Ich arbeite an einem einfachen Bash-Skript, das auf Ubuntu- und CentOS-Distributionen ausgeführt werden kann (Unterstützung für Debian und Fedora / RHEL wäre von Vorteil), und ich muss den Namen und die Version der Distribution kennen, die das Skript ausführt ( um bestimmte Aktionen auszulösen, zum Beispiel das Anlegen von Repositories). Bisher habe ich Folgendes:
OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
if [ -z "$OS" ]; then
OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi
if [ -z "$VERSION" ]; then
VERSION=$(awk '{print $3}' /etc/*-release)
fi
echo $OS
echo $ARCH
echo $VERSION
Dies scheint zu funktionieren und als Release-Name zurückzukehren ubuntu
oder centos
(ich habe es noch nicht mit anderen versucht). Ich habe jedoch das Gefühl, dass es einen einfacheren und zuverlässigeren Weg geben muss, dies herauszufinden - stimmt das?
Bei RedHat funktioniert das nicht. / etc / redhat-release enthält: Redhat Linux Entreprise Version 5.5
Die Version ist also nicht das dritte Wort, Sie sollten Folgendes verwenden:
OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"
+-release
funktioniert? Sie gehen davon aus, dass dies tatsächlich der Fall/etc/lsb-release
ist. Nennen Sie es also einfach so.*
mit+
dem Kommentar Formatierung zu vermeiden, sollte es seinetc/*-release
, scheint es zu funktionieren.uname -rv | grep -i "name_of_distro"
und benutzt einen Exit-Code?Antworten:
OS
Und zu bekommenVER
, scheint der neueste Standard zu sein/etc/os-release
. Davor gab eslsb_release
und/etc/lsb-release
. Vorher mussten Sie für jede Distribution nach unterschiedlichen Dateien suchen.Folgendes würde ich vorschlagen
Ich denke
uname
zu bekommenARCH
ist immer noch der beste Weg. Aber das Beispiel, das Sie angegeben haben, behandelt offensichtlich nur Intel-Systeme. Ich würde es entweder so nennenBITS
:Oder ändern Sie
ARCH
, um die gebräuchlicheren und doch eindeutigeren Versionen zu werden:x86
undx64
oder ähnlich:aber das liegt natürlich an dir.
quelle
-
und zu buchstabieren_
? Vielleicht ist es in/lib/lsb
oder irgendwo so. Wasrpm -qa "lsb*"
druckt?rpm -qa "lsb*
druckt nichts. Demnach istyum provides */lsb_release
es in einem Paket namens redhat-lsb enthalten, das meiner Meinung nach nicht standardmäßig installiert ist. Ich bin jedoch kein Fedora-Experte. Dies sind nur die Ergebnisse einer zufälligen Fedora-VM, die ich habe und die möglicherweise sehr falsch ist.lsb-release
, wie Sie sagten.$OS
,$VERSION
usw - vereinbarungs wir nutzen Umgebungsvariablen (PAGER, REDAKTION, SHELL, ...) und interne Shell - Variablen (BASH_VERSION, RANDOM, ...). Alle anderen Variablennamen sollten mindestens einen Kleinbuchstaben enthalten. Diese Konvention vermeidet das versehentliche Überschreiben von Umgebungsvariablen und internen Variablen.Ich würde damit als ersten Schritt gehen:
Gentoo, RedHat, Arch & SuSE haben eine Datei namens zB
/etc/gentoo-release
. Scheint populär zu sein, schauen Sie auf dieser Seite nach Release-Dateien .Debian & Ubuntu sollte auch eine haben,
/etc/lsb-release
die Release-Informationen enthält und mit dem vorherigen Befehl angezeigt wird.Ein weiterer schneller ist
uname -rv
. Wenn es sich bei dem installierten Kernel um den Standard-Distributionskernel handelt, finden Sie in derRegelmanchmal den Namen darin.quelle
uname -a
.uname -rv
jedoch die Informationen enthalten?uname -a
druckt Dinge wie Prozessortyp und Hostname, die hier nicht relevant sind. (Aber sowohl kernel release (-r
) als auch version (-v
) sind notwendig, nicht alle Distributionen machen es dort gleich)2.6.32-5-686-bigmem
und uname -v gibt#1 SMP Tue Mar 8 22:14:55 UTC 2011
unter Debian 6. uname -a OTOH gibtLinux debian 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 GNU/Linux
.uname -a
ist-n
, dh Knotenname == Hostname. Ich würde also sagenuname
, dass Debian nicht interessant sein wird. Ich bin mir nicht sicher, ob es für RedHat so nützlich ist.debian
.lsb_release -a
. Funktioniert mit Debian und ich denke Ubuntu, aber ich bin nicht sicher, was den Rest betrifft. Normalerweise sollte es in allen GNU / Linux-Distributionen vorhanden sein, da es mit LSB (Linux Standard Base) zusammenhängt.quelle
Einzeilig, Fallbacks, eine Ausgabezeile, keine Fehler.
quelle
oder nur
quelle
Nehmen Sie einen Tipp von Javascript-Entwicklern. Testen Sie nicht die Version, sondern die Fähigkeit. Es ist nicht schön, aber es funktioniert. Erweitern Sie nach Bedarf.
quelle
In der Reihenfolge des wahrscheinlichsten Erfolgs sind dies:
decken die meisten Fälle (AFAIK) ab: Debian, Ubuntu, Slackware, Suse, Redhat, Gentoo, * BSD und vielleicht andere.
quelle
cat /etc/*version
funktioniert nicht (es gibt keine solche Datei) auf CentOS (mindestens auf 6.4)Bei den meisten modernen Linux-Betriebssystemen wird die Datei
/etc/os-release
zum Standard und in den meisten Betriebssystemen enthalten. In Ihrem Bash-Skript können Sie also einfach die Datei einfügen und haben Zugriff auf alle hier beschriebenen Variablen (zum Beispiel: NAME, VERSION, ...).Also benutze ich dies nur in meinem Bash-Skript:
quelle
Wenn die Datei
/etc/debian_version
existiert, ist die Distribution Debian oder ein Debian-Derivat. Diese Datei hat möglicherweise eine Versionsnummer. auf meinem Rechner ist es derzeit6.0.1
. Wenn es getestet oder instabil ist, wird möglicherweise "testing / unstable" oder die Nummer der bevorstehenden Version angezeigt. Mein Eindruck ist, dass zumindest unter Ubuntu diese Datei immer testet / instabil ist und dass sie die Versionsnummer nicht enthält, aber jemand kann mich korrigieren, wenn ich falsch liege.Fedora (zumindest in den letzten Releases) hat eine ähnliche Datei, nämlich
/etc/fedora-release
.quelle
/etc/debian_version
und/etc/os-release
./etc/debian_version
Datei. Die Art und Weise, wie wir eine Debian-Installation vorbereiten, könnte sich auf die verfügbaren Release-Dateien auswirken, das ist interessant.os-release
enthält nicht die vollständige Versionsnummer vondebian_version
. Siehe unix.stackexchange.com/questions/382531 .Wenn Sie die LSB-Release-Datei nicht verwenden können oder möchten (aufgrund der Abhängigkeiten, die das Paket mit sich bringt), können Sie nach den distro-spezifischen Release-Dateien suchen. Bcfg2 hat eine Sonde für die Distribution, die Sie möglicherweise verwenden können: http://trac.mcs.anl.gov/projects/bcfg2/browser/doc/server/plugins/probes/group.txt
quelle
2 Wege von vielen:
1) verwenden
Ich habe es auf CentOS 5.5 und Ubuntu 10.04 getestet
Die Ausgabe für CentOS ist:
und für Ubuntu ist:
2) folgenden Befehl eingeben:
Ich habe es auf CentOS 5.5 und Ubuntu 10.04 getestet und es funktioniert einwandfrei.
quelle
Dieses Skript funktioniert unter Debian (muss unter Ubuntu möglicherweise angepasst werden)
quelle
Hier ist meine einfache chech_distro Version. ^^;
quelle
Ohne Version nur dist:
quelle
Dies wurde auf Ubuntu 14 und CentOS 7 getestet
quelle
sed -n -e '/PRETTY_NAME/ s/^.*=\|"\| .*//gp' /etc/os-release
Von hier aus finde ich ein gutes Skript , das für die meisten gängigen Linux-Benutzer geeignet ist:
quelle
Ich benutze das Dienstprogramm screenfetch script:
quelle
Es gibt einen facter Ruby Gem, die Ihnen einige Fakten über os OS gibt es analysiert OS Release - Dateien, andere Daten und druckt auf Terminal - Bildschirm. Sie können Folgendes versuchen, beginnend mit der Rubygems-Installation:
Bitte verwenden Sie den obigen Fall, der für Ihr Betriebssystem geeignet ist. Dann installieren Sie den Edelstein selbst.
Dann benutze:
ANMERKUNG: Weitere Informationen zur Installation finden Sie in den Quellen der Facter Gems.
quelle
Wenn jemand auch die Distribution braucht:
Ausgabe:
Wechseln Sie zu: lsb_release -sc, um die Distribution zu erhalten:
Ausgabe:
quelle
Dieser Befehl funktioniert für Debian- und Redhat-basierte Distributionen: Mit dem
tr
Filter konvertieren Sie das Dokument in ein zeilenweises Format und zählen dann die erste Zeile, die den Distributionsnamen enthält.quelle
/etc/issue
diese keine Version oder einen Namen auf zenwalk enthielt. Dies ist eine vom Administrator veränderbare Datei, die eine Nachricht enthält, die Menschen präsentiert wird und keine Garantie dafür hat, dass sie alles enthält, was programmgesteuert herausgezogen werden kann.