Ich kenne die Befehle, um den Namen des Linux-Computers zu überprüfen, der auf meinem Computer ausgeführt wird. Zum Beispiel:
Ubuntu
cat /etc/version
CentOS
cat /etc/issue
Wie erhalte ich die Ausgabe vom Terminal und vergleiche, ob es sich um UBUNTU oder CENTOS handelt, und führe die folgenden Befehle aus?
apt-get install updates
oder
yum update
Ubuntu 14.04
cat /etc/issue
command-line
bash
scripts
Shekhar
quelle
quelle
Antworten:
Leider gibt es keine todsichere, einfache Möglichkeit, den Distributionsnamen zu ermitteln. Die meisten großen Distributionen gehen zu einem System über, in dem sie
/etc/os-release
diese Informationen speichern. Die meisten modernen Distributionen enthalten auch dielsb_release
Tools, diese werden jedoch nicht immer standardmäßig installiert. Hier sind einige Ansätze, die Sie verwenden können:Verwenden
/etc/os-release
Verwenden Sie die
lsb_release
Werkzeuge, falls verfügbarVerwenden Sie ein komplexeres Skript, das für die meisten Distributionen geeignet ist:
Analysieren Sie die Versionsinformationen von,
gcc
falls installiert:CentOS 5.x
CentOS 6.x
Ubuntu 12.04
Ubuntu 14.04
Dies wurde im Grunde direkt von @ slms großartiger Antwort auf meine Frage hier kopiert .
quelle
<—
Dies ist überhaupt nicht der Fall. Sylvain Pineau zeigte zum Beispiel einen trivialen Einzeiler, der den aktuellen Plattformtyp zuverlässig abfragt, indem er auf Python zurückgreift - das auf den meisten Plattformen (einschließlich Ubuntu) vorinstalliert ist. Shell-Skripte sollten niemals versuchen, Plattform-Metadaten mit einfachen, nicht portierbaren Tests der in dieser Antwort implementierten Art manuell abzufragen.awk
oder so einemawk
andere Implementierung würde genauso gut funktionieren.lsb_release
:lsb_release -d | awk -F"\t" '{print $2}' | awk -F " " '{print $1}'
lsb_release -d | awk '{print $3}'
odergrep -oP 'VERSION="\K\S+' /etc/os-release
, es ist nicht erforderlich, dass sich die Doppelpfeife bewegt.Sie brauchen bash nicht, um eine solche Aufgabe zu erledigen, und ich würde vorschlagen, einen High-Level-Ansatz zu verwenden, um den Umgang mit Dateien wie
/etc/version
und zu vermeiden/etc/issue
(ich habe / etc / version in 13.10 nicht).Meine Empfehlung lautet daher, stattdessen diesen Befehl zu verwenden:
Das Python- Plattform- Modul funktioniert auf beiden Systemen. Der Rest des Befehls prüft, ob Ubuntu von Python zurückgegeben wird, und startet
apt-get
andernfallsyum
.quelle
-i
zugrep
helfen können.Hier ist eine einfache Antwort, die meines Erachtens für alle Versionen von Ubuntu / CentOS / RHEL durch das bloße Vorhandensein der Dateien funktioniert (natürlich nicht ausfallsicher, wenn jemand nach dem Zufallsprinzip / etc / redhat-release auf Ihre Ubuntu-Boxen legt usw.):
quelle
/etc/lsb-release
Existiert unter CloudLinux (CentOS) 6.8 und gibt daher beideyum
und zurückapt-get
.Benutze Chef für diese Aufgaben. ;-)
In Chef können Sie die
platform?
Methode verwenden:Oder:
Oder:
Oder:
quelle
lsb_release
,/etc/os-release
), diese Lösung den entscheidenden Nachteil, dass Chef hat - ein Schwergewicht Infrastructure as - Code (IAC) Rahmen nicht standardmäßig installiert auf den meisten Plattformen und erfordern den Einsatz von eine eigene domänenspezifische Sprache (DSL). Kurz gesagt, die meisten Benutzer möchten wahrscheinlich nur auf Python zurückgreifen , das standardmäßig auf den meisten Plattformen (einschließlich Ubuntu) installiert ist und sich gut mit Shell-Skripten kombinieren lässt.Überprüfen Sie den Kernelnamen auf Ubuntu:
quelle
Wenn es nur zwei Distributionen gibt, können Sie sie kürzer machen:
Irgendwie wird
yum -v
in CentOS ein Wert ungleich Null zurückgegeben. Verwenden Siewhich
stattdessen.Natürlich sollten Sie das Szenario in Betracht ziehen, wenn es kein
which
installiertes gibt.quelle
Das folgende Skript sollte zeigen, ob es sich um Ubuntu handelt. Wenn dies nicht der Fall ist und die einzige andere Option, die Sie haben, CentOS ist, sollten Sie sie in einer
else
Klausel haben:quelle
lsb_release
Tool vereinfacht werden , das dieselben Dateien auslesen sollte.lsb_release -i
Berichte entwederDistributor ID: Ubuntu
oderDistributor ID: CentOS
in diesen Fällen.Führen Sie
/etc/os-release
in einer Sub-Shell aus und geben Sie den Wert zurück:quelle
Ich würde Python verwenden
quelle
Dieser Befehl funktioniert unter CentOS, Ubuntu und Debian:
grep "^NAME=" /etc/os-release |cut -d "=" -f 2 | sed -e 's/^"//' -e 's/"$//'
In Debian gibt es nach
Debian GNU/Linux
, in Ubuntu gibt es nachUbuntu
und in CentOS gibt es nachCentOS Linux
.Der Vorteil der Verwendung von grep, cut und sed anstelle von gawk liegt auf der Hand: In Debian ist gawk nicht standardmäßig installiert, so dass Sie sich nicht auf eine zufällige Debian-Box verlassen können.
quelle