Auf welchen Linux-Distributionen kann ich mich auf das Vorhandensein von / etc / os-release verlassen?

17

Ich versuche, einen Weg zu finden, um den Namen und die Version der Linux-Distribution zu bestimmen, die für die meisten (oder idealerweise für alle) modernen Distributionen geeignet sind. Mir ist aufgefallen, dass es /etc/os-releasedie Informationen enthält, die ich für die von mir getesteten Distributionen (CentOS, Debian) benötige. Aber wie sicher ist es, sich auf die Präsenz zu verlassen? Befehle wie uname -aenthalten nicht wirklich die gleichen Informationen und lsb_releasesind anscheinend zB auf minimalem CentOS nicht vorhanden.

Gibt es eine schnelle Möglichkeit, genau herauszufinden, mit welchen Distributionen sie geliefert werden /etc/os-release? Darüber hinaus wird /etc/os-releasegarantiert enthalten NAME, VERSIONund PRETTY_NAMEFelder?

w128
quelle
1
Ubuntu, Debian, Arch sicher. Auf jeden Fall würde ich es unterlassen, Distro auf diese Weise zu erkennen. Das letzte Mal, als ich Distributionen unterscheiden musste, überprüfte ich die Anwesenheit bestimmter Paketmanager (z. B. pacman -> Arch, apt-get & no pacman -> entweder Ubuntu oder Debian). Es ist eine knifflige Aufgabe und ich würde auch gerne wissen, ob es eine bessere Lösung gibt.
ddnomad
1
Man fragt sich, warum Sie den Distributionsnamen kennen müssen. Dies klingt wie ein Fall der Browsererkennung, wenn Sie die Feature-Erkennung durchführen sollten .
xDaizu
@ xDaizu Ich führe Skripts auf Remote-Hosts aus, um verschiedene Informationen zu diesen abzurufen.
w128
@ w128 Können Sie in diesem Fall nicht überprüfen, ob die "Funktion" (/ etc / os-release) vorhanden ist (und, falls nicht, auf andere Methoden zurückgreifen), anstatt sich auf eine statisch veränderbare Liste von Distributionen zu verlassen, auf denen sie funktioniert?
xDaizu
1
@xDaizu, das auf "andere Methoden" zurückgreift, kann zusätzliche Arbeit erfordern, die sich als unnötig erweisen kann, wenn ich garantieren kann, dass die in der Frage vorgeschlagene einfache Lösung für die verschiedenen Hauptdistros, die ich unterstützen muss, zuverlässig ist, sodass eine veränderbare Liste der unterstützten Distros in Ordnung ist in diesem Fall.
w128

Antworten:

14

Jedes System läuft systemd sollte /etc/os-release, was ist angegeben als Teil systemd. Einige Systeme ohne systemd haben es möglicherweise auch ( z. B. Debian 8, wo systemd optional ist, aber /etc/os-releasein allen Fällen installiert ist).

Entsprechend der Spezifikation sind alle Felder optional und einige haben Standardeinstellungen ("Linux" für NAMEund PRETTY_NAME).

Weitere Hintergrundinformationen finden Sie in der /etc/os-releaseAnkündigung .

Stephen Kitt
quelle