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.
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.
Antworten:
Sie können den lsb_release
Befehl 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
lsb_release -i -r
-bash: lsb_release: Befehl nicht gefunden. Allerdings cat /etc/redhat-release
Release von Red Hat Enterprise Linux Server 5.6 (Tikanga)
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.
lsb_release
ist das erste, was Sie versuchen sollten, aber da dies möglicherweise nicht installiert ist, ist das Durchsuchen von Dateien ein guter Plan B.
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).
/etc/issue
funktioniert 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.
/etc/issue
soll durch agetty analysiert werden , die die Escape-Sequenzen mit richtigen Informationen ersetzt. Wenn Sie es einfach cat
so 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
.
/etc/issue
möglicherweise durch den lokalen Administrator ersetzt wird und daher keine zuverlässige Informationsquelle ist.
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_release
fehlt.
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
/ cut
und andere UNIX-Tools zur Textbearbeitung, um die gewünschten Informationen zu erhalten.
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.
rpm -qa | grep release
ist noch einfacher
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).
rpm -q redhat-release
kehrt gerade package redhat-release is not installed
für mich zurück und uname -r
teilt mir nur die Kernelfreigabe mit.
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
Ich benutze sehr gerne die /etc/os-release
Datei, 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)
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
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 ~]#
...