Quale versione di RHEL sto usando?


151

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:


154

È possibile utilizzare il lsb_releasecomando 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

5
comando non trovato sul mio CentOS 5.4 box :(
gbjbaanb

@gbjbaanb: È strano che l'ho testato su una nuova installazione minima 5.4 e ha funzionato bene ...
Zypher,

26
lsb_release -i -r-bash: lsb_release: comando non trovato. Tuttavia, cat /etc/redhat-releaseRed Hat Enterprise Linux Server versione 5.6 (Tikanga)
Tom,

7
Solo per la cronaca: non funziona con l'installazione minima di RHEL 6.5. Il comando lsb_release non si trova da nessuna parte.
sborsky,

4
lsb_release non è un pacchetto leggero, richiama CUPS per fornire '/ usr / bin / lp', che estrae alcuni goop di traduzione pdf, che estrae alcune librerie di rendering ...
Jens Timmerman,

142

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.


14
Questa è la risposta più appropriata alla domanda.
fsoppelsa,

lsb_releaseè la prima cosa da provare, ma dal momento che potrebbe non essere installato guardando i file è un buon piano B.
pulcini

1
@chicks Dato che la domanda richiede un test per i sistemi Redhat e lsb_release non è installato di default sui sistemi redhat e / etc / redhat-release è, allora lsb_release non è ovviamente la prima cosa da provare!
ciao

@bye È la prima cosa da provare (almeno secondo me), provi sempre le cose che dovrebbero essere comuni prima su tutte le distribuzioni, quindi solo tu passi a soluzioni specifiche per la distribuzione.
Dennis Nolte,

25

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).


1
/etc/issuefunziona 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.
Stefan Lasiewski,

5
Questo non è affidabile. Apparentemente /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.
David Tonhofer,

Si noti che /etc/issuepuò essere sostituito dall'amministratore locale e quindi non è una fonte affidabile di informazioni.
Larks

13

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_releasemanca.

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/ cute altri strumenti di manipolazione del testo UNIX per ottenere ciò che desideri.


2
Questo sembra funzionare, in modo più generico: 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.
Dan Pritts

1
Sì grazie, una nota: non funziona con RHEL Worstation.
lzap,

Una nota: funziona molto più lentamente dell'analisi / etc / foo-release.
Dan Pritts,

1
o rpm -qa | grep releaseè ancora più facile
warren

6

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).


1
rpm -q redhat-releaseritorna package redhat-release is not installedper me e uname -rmi dice solo la versione del kernel.
Mark Booth,

Oh! E ora che è passato quel tempo, quale sarebbe RHEL6? RHEL7? Hum ... Ecco le risposte: access.redhat.com/articles/3078#RHEL7
mika

3

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

2

Mi piace abbastanza usare il /etc/os-releasefile, 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)

Interessante, utile. Purtroppo, non presente su RHEL6, quindi al momento con un valore limitato.
Dan Pritts,

1

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

1

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 ~]#

...

Se hai intenzione di fare cose remote su molte macchine, ti consiglio vivamente di usare Ansible piuttosto che gli script bash arrotolati a mano.
Neil Mayhew,

Consiglio anche di non abilitare il login root su ssh
Neil Mayhew
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.