Welche RHEL-Version verwende ich?

151

Wie kann ich in der Shell und ohne Root-Rechte feststellen, welche Red Hat Enterprise Linux-Version ich verwende?

Im Idealfall möchte ich sowohl die Haupt- als auch die Nebenversion erhalten, zum Beispiel RHEL 4.0 oder RHEL 5.1 usw.

Arthur Ulfeldt
quelle

Antworten:

154

Sie können den lsb_releaseBefehl auf verschiedenen Linux-Distributionen verwenden:

lsb_release -i -r 

Dies gibt Aufschluss über die Verteilung und Version und ist ein bisschen genauer als der Zugriff auf Dateien, die möglicherweise vom Administrator oder einem Softwarepaket geändert wurden oder nicht. Sowie über mehrere Distributionen hinweg arbeiten.

Für RHEL sollten Sie verwenden:

cat /etc/redhat-release
Zypher
quelle
5
Befehl auf meiner CentOS 5.4-Box nicht gefunden :(
gbjbaanb
@ gbjbaanb: Das ist seltsam, ich habe es mit einer neuen 5.4-Minimalinstallation getestet und es hat
einwandfrei
26
lsb_release -i -r-bash: lsb_release: Befehl nicht gefunden. Allerdings cat /etc/redhat-releaseRelease von Red Hat Enterprise Linux Server 5.6 (Tikanga)
Tom
7
Nur zur Veranschaulichung: Funktioniert nicht bei der Minimalinstallation von RHEL 6.5. Der Befehl lsb_release ist nirgends zu finden.
sborsky
4
lsb_release ist kein leichtgewichtiges Paket. Es ruft CUPS auf, um '/ usr / bin / lp' bereitzustellen, was einige PDF-Übersetzungs-Goops einlädt, was einige Rendering-Bibliotheken einlädt ...
Jens Timmerman
142

Sie können sich den Inhalt von / etc / redhat-release ansehen, der ungefähr so ​​aussieht:

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

Die Inhalte sind für ein tatsächliches RHEL-System unterschiedlich. Diese Technik funktioniert auf allen RedHat-Derivaten, einschließlich CentOS, Fedora und anderen.

larsks
quelle
14
Dies ist die am besten geeignete Antwort auf die Frage.
fsoppelsa
lsb_releaseist das erste, was Sie versuchen sollten, aber da dies möglicherweise nicht installiert ist, ist das Durchsuchen von Dateien ein guter Plan B.
chicks
1
@chicks Da in der Frage nach einem Test für Redhat-Systeme gefragt wird und lsb_release nicht standardmäßig auf Redhat-Systemen und / etc / redhat-release installiert ist, ist lsb_release offensichtlich nicht das erste, was Sie versuchen sollten!
Tschüss
@bye Es ist das erste, was man probiert (zumindest meiner Meinung nach), man probiert immer zuerst die Dinge aus, die für alle Distributionen gelten sollten, und wechselt dann nur zu distributionsspezifischen Lösungen.
Dennis Nolte
25

Ich bevorzuge die / etc / issue-Datei.

$ cat /etc/issue

Ich habe viele Situationen erlebt, in denen / etc / redhat-release geändert wurde, um die Softwarekompatibilitätsanforderungen zu erfüllen (z. B. die Verwaltungsagenten von Dell oder HP).

ewwhite
quelle
1
/etc/issuefunktioniert auch auf anderen Betriebssystemen, wie Debian und Ubuntu, und funktioniert mit Linux-Betriebssystemen, die nicht der Linux Standards Base entsprechen, und leichten Betriebssystemen, auf denen die lsb * -Dienstprogramme nicht installiert sind.
Stefan Lasiewski
5
Das ist nicht zuverlässig. Anscheinend /etc/issuesoll durch agetty analysiert werden , die die Escape-Sequenzen mit richtigen Informationen ersetzt. Wenn Sie es einfach catso machen, kann das Ergebnis nicht überzeugend sein. Auf Fedora bekommt man Fedora release 20 (Heisenbug) Kernel \r on an \m (\l), was einem etwas sagt, aber auf RHEL7 bekommt man nur \S Kernel \r on an \m.
David Tonhofer
Beachten Sie, dass dies /etc/issuemöglicherweise durch den lokalen Administrator ersetzt wird und daher keine zuverlässige Informationsquelle ist.
Larsks
13

Der zuverlässigste Weg, wenn lsb_release nicht installiert ist , ist:

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

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

Bei minimalen Installationen lsb_releasefehlt.

Damit dies auch mit Red Hat-Klonen funktioniert (siehe Kommentare):

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

Oder als einzelner Befehl (anstatt dass zwei "rpm" ausgeführt werden):

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

Verwenden Sie sed/ cutund andere UNIX-Tools zur Textbearbeitung, um die gewünschten Informationen zu erhalten.

lzap
quelle
2
Dies scheint allgemeiner zu funktionieren: rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)' sl ist für Scientific Linux; Wenn Sie den richtigen Namen für andere RHEL-Umbauten kennen, können Sie unten einen Kommentar abgeben. Warnung - nicht ausgiebig getestet.
Dan Pritts
1
Ja danke, ein Hinweis: Funktioniert nicht mit RHEL Worstation.
lzap
Eine Anmerkung - dies läuft viel langsamer als das Parsen von / etc / foo-release.
Dan Pritts
1
oder rpm -qa | grep releaseist noch einfacher
warren
6

Angenommen, es handelt sich tatsächlich um eine Red Hat-Version (nicht Centos):

rpm -q redhat-release

Oder einfach laufen:

uname -r

Und ordnen Sie die Ausgabe. 2.6.9-Kernel sind RHEL4, 2.6.18-Kernel sind RHEL5. Bei Bedarf können Sie die Vollversion den spezifischen Update-Releases von Red Hat zuordnen (dh 2.6.9-89 ist RHEL5 U4).

TCampbell
quelle
1
rpm -q redhat-releasekehrt gerade package redhat-release is not installedfür mich zurück und uname -rteilt mir nur die Kernelfreigabe mit.
Mark Booth
Oh ! Und jetzt ist diese Zeit vergangen, was wäre RHEL6? RHEL7? Hum ... Hier sind die Antworten: access.redhat.com/articles/3078#RHEL7
mika
3

Ich bevorzuge 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
quelle
2

Ich benutze sehr gerne die /etc/os-releaseDatei, die im Release-RPM enthalten ist:

# 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

Diese Datei kann in Skripten bezogen werden, wie zum Beispiel:

$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
Andrew
quelle
Interessant, nützlich. Leider nicht auf RHEL6 vorhanden, daher momentan von begrenztem Wert.
Dan Pritts
1

Wenn Sie nur die Versionsnummern erhalten möchten, ist das Folgende ungefähr so ​​kurz und einfach, wie ich es bekommen kann.

Getestet auf Rhel 6.7, Rhel 7.2, Debian 8.3 und Ubuntu 14.04:

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

Nehmen wir als praktisches Beispiel an, Sie möchten die Haupt- und Nebenversion der Distribution testen und die folgenden Schritte ausführen:

#!/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
quelle
1

Ein verspäteter Einstieg, aber ich hatte Spaß daran, die RHEL-Version auf mehreren entfernten Knoten herauszufinden. Wenn Sie also mehrere Server haben, die dasselbe Passwort verwenden (ich weiß, ich weiß ...), können Sie hier schnell und einfach die RedHat-Version überprüfen:

Erstellen Sie ein Expect-Skript

vim server-version.sh

Erwarten Sie, dass das Skript die Hauptversion von RedHat auf mehreren Remote-Hosts überprüft

#!/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"

Führen Sie das Skript für alle Knoten aus

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

Ausgabe

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
quelle
Wenn Sie Remote-Aufgaben auf vielen Computern ausführen möchten, empfehle ich dringend die Verwendung von Ansible-Skripten anstelle von handgerollten Bash-Skripten.
Neil Mayhew
Ich empfehle auch, die root-Anmeldung nicht über ssh
Neil Mayhew