Jakiej wersji RHEL używam?

151

Z poziomu powłoki i bez uprawnień administratora, jak mogę ustalić, którą wersję Red Hat Enterprise Linux używam?

Idealnie chciałbym uzyskać zarówno główną, jak i mniejszą wersję wydania, na przykład RHEL 4.0 lub RHEL 5.1 itp.

Arthur Ulfeldt
źródło

Odpowiedzi:

154

Możesz użyć lsb_releasepolecenia w różnych dystrybucjach systemu Linux:

lsb_release -i -r 

Dzięki temu dowiesz się o dystrybucji i wersji i jest nieco dokładniejszy niż dostęp do plików, które mogły zostać zmodyfikowane przez administratora lub pakiet oprogramowania. Oprócz pracy w wielu dystrybucjach.

W przypadku RHEL należy użyć:

cat /etc/redhat-release
Zypher
źródło
5
polecenie nie znaleziono w moim polu CentOS 5.4 :(
gbjbaanb
@gbjbaanb: Dziwne, przetestowałem go na świeżej minimalnej instalacji 5.4 i działało dobrze ...
Zypher
26
lsb_release -i -r-bash: lsb_release: nie znaleziono polecenia. Jednak cat /etc/redhat-releaseRed Hat Enterprise Linux Server wersja 5.6 (Tikanga)
Tom
7
Dla przypomnienia: nie działa na minimalnej instalacji RHEL 6.5. Nigdzie nie można znaleźć polecenia lsb_release.
sborsky
4
lsb_release nie jest lekkim pakietem, pobiera CUPS, aby dostarczyć '/ usr / bin / lp', który pobiera trochę plików tłumaczących pdf, który pobiera niektóre biblioteki renderujące ...
Jens Timmerman
142

Możesz spojrzeć na zawartość / etc / redhat-release, która będzie wyglądać mniej więcej tak:

$ cat /etc/redhat-release 
CentOS release 5.4 (Final)

Zawartość jest inna dla rzeczywistego systemu RHEL. Ta technika działa na wszystkich pochodnych RedHat, w tym CentOS, Fedora i innych.

Larsks
źródło
14
To jest najbardziej odpowiednia odpowiedź na pytanie.
fsoppelsa
lsb_releasejest pierwszą rzeczą do wypróbowania, ale ponieważ nie można tego zainstalować, przeglądanie plików to dobry Plan B.
pisklęta
1
@chicks Biorąc pod uwagę, że pytanie dotyczy testu dla systemów Redhat, a lsb_release nie jest domyślnie instalowany w systemach Redhat i / etc / redhat-release jest, to oczywiście lsb_release nie jest pierwszą próbą!
cześć
@ bye To pierwsza rzecz, którą wypróbuję (przynajmniej moim zdaniem), zawsze najpierw wypróbujesz rzeczy, które powinny być wspólne dla wszystkich dystrybucji, a dopiero potem przejdziesz na rozwiązania specyficzne dla dystrybucji.
Dennis Nolte,
25

Wolę używać pliku / etc / issue.

$ cat /etc/issue

Widziałem wiele sytuacji, w których / etc / redhat-release został zmodyfikowany w celu spełnienia wymagań kompatybilności oprogramowania (na przykład agenci zarządzania Dell lub HP).

ewwhite
źródło
1
/etc/issuedziała również na innych systemach operacyjnych, takich jak Debian i Ubuntu, i współpracuje z systemami Linux, które nie są zgodne z Linux Standard Stand Base, oraz z lekkimi systemami operacyjnymi, które nie mają zainstalowanych narzędzi lsb *.
Stefan Lasiewski
5
To nie jest wiarygodne. Najwyraźniej /etc/issuema być analizowany przez agetty , który zastępuje sekwencje specjalne odpowiednimi informacjami. Jeśli tak cat, wynik może być rozczarowujący. Na Fedorze dostaje się Fedora release 20 (Heisenbug) Kernel \r on an \m (\l), co mówi coś, ale na RHEL7, po prostu dostaje \S Kernel \r on an \m.
David Tonhofer,
Pamiętaj, że /etc/issuemoże zostać zastąpiony przez lokalnego administratora i dlatego nie jest wiarygodnym źródłem informacji.
larsks
13

Najbardziej niezawodny sposób, gdy lsb_release nie jest zainstalowany, to:

# rpm -q --queryformat '%{VERSION}' redhat-release-server
6Server

# rpm -q --queryformat '%{RELEASE}' redhat-release-server
6.4.0.4.el6

W przypadku minimalnych instalacji lsb_releasebrakuje.

Aby działało to również z klonami Red Hat (podziękowania należą się do komentarzy):

# rpm -q --queryformat '%{VERSION}' $(rpm -qa '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)')

Lub jako pojedyncze polecenie (zamiast wykonywania dwóch „rpm”):

# rpm -qa --queryformat '%{VERSION}\n' '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)'

Użyj sed/ cuti innych narzędzi manipulujących tekstem UNIX, aby uzyskać to, czego chcesz.

lzap
źródło
2
Wydaje się, że działa to bardziej ogólnie: rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)' sl jest dla Scientific Linux; jeśli znasz właściwą nazwę dla innych odbudów RHEL, może komentuj poniżej. Ostrzeżenie - nie poddano dokładnym testom.
Dan Pritts,
1
Tak, dziękuję, jedna uwaga: nie działa z RHEL Worstation.
lzap
Jedna uwaga - działa o wiele wolniej niż parsowanie / etc / foo-release.
Dan Pritts,
1
lub rpm -qa | grep releasejest nawet łatwiejsze
warren
6

Zakładając, że to naprawdę wydanie Red Hat (nie Centos):

rpm -q redhat-release

Lub po prostu uruchom:

uname -r

I mapuj dane wyjściowe. Jądra 2.6.9 to RHEL4, jądra 2.6.18 to RHEL5. W razie potrzeby możesz zamapować pełną wersję na określone wydania aktualizacji Red Hata (tj. 2.6.9-89 to RHEL5 U4).

TCampbell
źródło
1
rpm -q redhat-releasepo prostu wraca package redhat-release is not installeddo mnie i uname -rmówi mi tylko o wydaniu jądra.
Mark Booth,
Och! A teraz, gdy minął czas, czym byłby RHEL6? RHEL7? Hum ... Oto odpowiedzi: access.redhat.com/articles/3078#RHEL7
mika
3

Wolę hostnamectl:

$ hostnamectl
   Static hostname: xxxxxx.xxx.xxx
         Icon name: computer-server
           Chassis: server
        Machine ID: 3e3038756eaf4c5c954ec3d24f35b13f
           Boot ID: 958452e0088b4191a4ea676ebc90403b
  Operating System: Red Hat Enterprise Linux Server 7.5 (Maipo)
       CPE OS Name: cpe:/o:redhat:enterprise_linux:7.5:GA:server
            Kernel: Linux 3.10.0-862.3.3.el7.x86_64
      Architecture: x86-64
Wernfried Domscheit
źródło
2

Bardzo lubię używać /etc/os-releasepliku, który znajduje się w wersji RPM:

# yum whatprovides /etc/os-release 
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
 * base: dl.za.jsdaav.net
 * extras: dl.za.jsdaav.net
 * updates: dl.za.jsdaav.net
centos-release-7-4.1708.el7.centos.x86_64 : CentOS Linux release file
Repo        : base
Matched from:
Filename    : /etc/os-release

centos-release-7-4.1708.el7.centos.x86_64 : CentOS Linux release file
Repo        : @anaconda
Matched from:
Filename    : /etc/os-release

Ten plik może pochodzić ze skryptów, takich jak:

$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
Andrzej
źródło
Ciekawe, przydatne. Niestety, nie jest obecny na RHEL6, więc ma obecnie ograniczoną wartość.
Dan Pritts
1

Jeśli chcesz tylko uzyskać numery wersji, poniższe informacje są tak krótkie i proste, jak tylko mogę.

Testowane na rhel 6.7, rhel 7.2, debian 8.3 i ubuntu 14.04:

lsb_release -s -r | cut -d '.' -f 1

Dla praktycznego przykładu powiedz, że chcesz przetestować wersję główną i pomocniczą dystrybucji i robić rzeczy w oparciu o to:

#!/bin/bash

major=$(lsb_release -s -r | cut -d '.' -f 1)
minor=$(lsb_release -s -r | cut -d '.' -f 2)

if (( "$major" >= 7 ))
then
  echo "Do stuff, OS major version is $major"
  echo "OS minor version is $minor"
else
  echo "Do other things"
  echo "Your version is $major.$minor"
fi
aseq
źródło
1

Później do tego doszło, ale dobrze się bawiłem, próbując znaleźć wersję RHEL na kilku odległych węzłach. Tak więc, jeśli masz partię serwerów, które używają tego samego hasła (wiem, wiem ...), tutaj jest szybkie i brudne sprawdzenie wersji RedHat:

Utwórz skrypt spodziewany

vim server-version.sh

Spodziewaj się, że skrypt sprawdzi główną wersję RedHat na wielu zdalnych hostach

#!/usr/bin/expect
log_user 0
spawn ssh -l root [lindex $argv 0]
expect "assword:"
send "sUp3rS3cr3tP4ssW0rd^\r"
expect "# "
log_user 1
send "cat /etc/redhat-release\r"
expect "*#"
log_user 0
send "exit\n"

Uruchom skrypt dla wszystkich swoich węzłów

[root@home ~]#
for server in server1 server2 server3 server4 server5; do echo -e "$server: \c"; /root/server-version.sh $server; echo; echo; done;

Wynik

server1: cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server1 ~]#

server2: cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server2 ~]#

...
Lefty G. Balogh
źródło
Jeśli zamierzasz robić zdalne rzeczy na wielu komputerach, zdecydowanie zalecam używanie skryptów Ansible zamiast ręcznie wykonywanych skryptów bash.
Neil Mayhew
Polecam również nie włączać logowania roota przez ssh
Neil Mayhew