Dalla shell e senza i privilegi di root, come posso determinare quale versione di Red Hat Enterprise Linux sto usando?
Idealmente, vorrei ottenere sia la versione principale che quella secondaria, ad esempio RHEL 4.0 o RHEL 5.1, ecc.
Dalla shell e senza i privilegi di root, come posso determinare quale versione di Red Hat Enterprise Linux sto usando?
Idealmente, vorrei ottenere sia la versione principale che quella secondaria, ad esempio RHEL 4.0 o RHEL 5.1, ecc.
Risposte:
È possibile utilizzare il lsb_release
comando su varie distribuzioni Linux:
lsb_release -i -r
Questo ti dirà la distribuzione e la versione ed è un po 'più preciso rispetto all'accesso ai file che potrebbero essere stati o meno modificati dall'amministratore o da un pacchetto software. Oltre a lavorare su più distro.
Per RHEL, dovresti usare:
cat /etc/redhat-release
lsb_release -i -r
-bash: lsb_release: comando non trovato. Tuttavia, cat /etc/redhat-release
Red Hat Enterprise Linux Server versione 5.6 (Tikanga)
Puoi guardare il contenuto di / etc / redhat-release, che avrà un aspetto simile al seguente:
$ cat /etc/redhat-release
CentOS release 5.4 (Final)
I contenuti sono diversi per un vero sistema RHEL. Questa tecnica funziona su tutti i derivati RedHat, inclusi CentOS, Fedora e altri.
lsb_release
è la prima cosa da provare, ma dal momento che potrebbe non essere installato guardando i file è un buon piano B.
Preferisco usare il file / etc / issue.
$ cat /etc/issue
Ho visto molte situazioni in cui / etc / redhat-release è stato modificato per soddisfare i requisiti di compatibilità del software (Dell o gli agenti di gestione di HP, per esempio).
/etc/issue
funziona anche su altri sistemi operativi, come Debian e Ubuntu, e funziona con sistemi operativi Linux che non sono conformi alla base degli standard Linux e con sistemi operativi leggeri che non dispongono di utility lsb * installate.
/etc/issue
è pensato per essere analizzato da agetty , che sostituisce le sequenze di escape con informazioni adeguate. Se lo fai cat
, il risultato potrebbe essere deludente. Su Fedora, uno ottiene Fedora release 20 (Heisenbug) Kernel \r on an \m (\l)
, il che ti dice qualcosa ma su RHEL7, uno lo ottiene \S Kernel \r on an \m
.
/etc/issue
può essere sostituito dall'amministratore locale e quindi non è una fonte affidabile di informazioni.
Il modo più affidabile quando lsb_release
non è installato è:
# rpm -q --queryformat '%{VERSION}' redhat-release-server
6Server
# rpm -q --queryformat '%{RELEASE}' redhat-release-server
6.4.0.4.el6
Sulle installazioni minime, lsb_release
manca.
Per farlo funzionare anche con i cloni di Red Hat (il merito va ai commenti):
# rpm -q --queryformat '%{VERSION}' $(rpm -qa '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)')
Oppure, come singolo comando (anziché due "rpm" in esecuzione):
# rpm -qa --queryformat '%{VERSION}\n' '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)'
Usa sed
/ cut
e altri strumenti di manipolazione del testo UNIX per ottenere ciò che desideri.
rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)'
sl è per Scientific Linux; se conosci il nome giusto per altre ricostruzioni RHEL, commenta qui sotto. Avvertenza: non ampiamente testato.
rpm -qa | grep release
è ancora più facile
Supponendo che sia davvero una versione di Red Hat (non Centos):
rpm -q redhat-release
O semplicemente corri:
uname -r
E mappare l'output. I kernel 2.6.9 sono RHEL4, i kernel 2.6.18 sono RHEL5. Se necessario, è possibile associare la versione completa alle versioni di aggiornamento specifiche di Red Hat (ovvero 2.6.9-89 è RHEL5 U4).
rpm -q redhat-release
ritorna package redhat-release is not installed
per me e uname -r
mi dice solo la versione del kernel.
Io preferisco 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
Mi piace abbastanza usare il /etc/os-release
file, che è nella versione 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
Questo file può essere reperito in script, come:
$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
Se vuoi ottenere solo i numeri di versione, quanto segue è il più breve e semplice possibile.
Testato su rhel 6.7, rhel 7.2, debian 8.3 e ubuntu 14.04:
lsb_release -s -r | cut -d '.' -f 1
Per un esempio pratico, supponiamo che tu voglia testare la versione principale e secondaria di distribuzione e fare le cose in base a ciò:
#!/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
Un arrivo in ritardo a questo, ma mi sono divertito cercando di capire la versione RHEL su diversi nodi remoti. Quindi, se hai un batch di server che usano la stessa password (lo so, lo so ...) ecco un veloce e sporco per controllare la versione di RedHat:
Crea uno script prevede
vim server-version.sh
Aspettatevi che lo script controlli la versione principale di RedHat su più host remoti
#!/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"
Esegui lo script per tutti i tuoi nodi
[root@home ~]#
for server in server1 server2 server3 server4 server5; do echo -e "$server: \c"; /root/server-version.sh $server; echo; echo; done;
Produzione
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 ~]#
...