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.
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.
Odpowiedzi:
Możesz użyć lsb_release
polecenia 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
lsb_release -i -r
-bash: lsb_release: nie znaleziono polecenia. Jednak cat /etc/redhat-release
Red Hat Enterprise Linux Server wersja 5.6 (Tikanga)
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.
lsb_release
jest pierwszą rzeczą do wypróbowania, ale ponieważ nie można tego zainstalować, przeglądanie plików to dobry Plan B.
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).
/etc/issue
dział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 *.
/etc/issue
ma 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
.
/etc/issue
może zostać zastąpiony przez lokalnego administratora i dlatego nie jest wiarygodnym źródłem informacji.
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_release
brakuje.
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
/ cut
i innych narzędzi manipulujących tekstem UNIX, aby uzyskać to, czego chcesz.
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.
rpm -qa | grep release
jest nawet łatwiejsze
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).
rpm -q redhat-release
po prostu wraca package redhat-release is not installed
do mnie i uname -r
mówi mi tylko o wydaniu jądra.
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
Bardzo lubię używać /etc/os-release
pliku, 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)
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
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 ~]#
...