So überprüfen Sie die Linux-Distribution, Version, den Kernel und die Architektur

Der beste erste Schritt, um eine Linux-Distribution und deren Version zu identifizieren, ist das Lesen von /etc/os-release. Sein PRETTY_NAME-Feld liefert einen menschenlesbaren Namen, während ID und VERSION_ID Identifikatoren bereitstellen, die in Skripten leichter zu verwenden sind.

Verwenden Sie hostnamectl, wenn Sie eine bequeme Zusammenfassung der Distribution, des Kernels und der Architektur möchten. Verwenden Sie uname -r für die aktuell laufende Linux-Kernel-Version, nicht für die Distributionsversion. Diese Werte beschreiben verschiedene Teile des Systems und sollten nicht als austauschbar behandelt werden.

Zu verwendende Befehle zuerst

Um nur den Namen der Distribution und die Version zu überprüfen, beginnen Sie mit:

cat /etc/os-release

Um nur die nützlichsten Felder anzuzeigen:

grep -E '^(PRETTY_NAME|ID|VERSION_ID|ID_LIKE)=' /etc/os-release

Führen Sie die folgenden Befehle aus, wenn Sie auch die Kernel-Version und die CPU-Architektur benötigen.

cat /etc/os-release
hostnamectl
uname -r
uname -m

Was ist eine Linux-Distribution?

Streng genommen ist Linux der Betriebssystemkernel. Eine Linux-Distribution kombiniert diesen Kernel mit Systemwerkzeugen, Bibliotheken, einem Paketmanager, einem Installer und einer Standardkonfiguration, um ein nutzbares Betriebssystem zu bilden.

Ubuntu, Debian, Fedora, Rocky Linux, openSUSE und Arch Linux verwenden alle den Linux-Kernel, aber ihre Paketformate, Update-Richtlinien und Administrationsbefehle unterscheiden sich. Überprüfen Sie die Distributionsfamilie und Version, bevor Sie Installations- oder Server-Konfigurationsanweisungen anwenden.

Distributionsfamilie Gängige Distributionen Paketformat und Werkzeuge Zu überprüfende Werte
Debian-Familie Debian, Ubuntu, Linux Mint DEB, APT ID und ID_LIKE=debian
Red Hat-Familie RHEL, Fedora, Rocky Linux, AlmaLinux RPM, DNF ID und RHEL- oder Fedora-bezogene Werte in ID_LIKE
SUSE-Familie openSUSE, SUSE Linux Enterprise RPM, Zypper ID und ID_LIKE=suse
Arch-Familie Arch Linux, Manjaro pkg.tar.zst, Pacman ID und ID_LIKE=arch
Unabhängig Alpine Linux und andere Distributionsabhängig ID und die offizielle Dokumentation der Distribution

ID_LIKE ist unterstützende Information, die eine verwandte oder übergeordnete Familie beschreibt. Sie kann fehlen. Verwenden Sie ID als primären Distributionsbezeichner und konsultieren Sie ID_LIKE nur, wenn die Familienkompatibilität von Bedeutung ist.

Überprüfen Sie die Distribution und Version in /etc/os-release

/etc/os-release speichert Betriebssystem-Identifikationsdaten als KEY=value Einträge. Laut der offiziellen systemd os-release-Spezifikation sollte Software /etc/os-release bevorzugen und auf /usr/lib/os-release zurückgreifen, wenn Erstere nicht verfügbar ist.

Alle Identifikationsfelder anzeigen

cat /etc/os-release

Die genauen Felder variieren je nach Distribution, aber die Ausgabe ähnelt üblicherweise:

PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian

Dieses Beispiel identifiziert Ubuntu 24.04 in der Debian-Familie. Patch-Level-Text und andere Details können je nach Distribution und Update-Status variieren.

Die wichtigsten os-release-Felder verstehen

Feld Bedeutung Typische Nutzung
PRETTY_NAME Für Menschen lesbarer Distributionsname und Version Anzeige und manuelle Inspektion
NAME Betriebssystemname ohne die Version Beschreibende Bezeichnungen
ID Distributionskennung in Kleinbuchstaben Distributionsabhängige Verzweigungen in Skripten
VERSION_ID Distributionsversion für maschinelle Vergleiche Unterstützte Versionsprüfungen
ID_LIKE Verwandte oder übergeordnete Distributionsfamilien Bestimmung wahrscheinlicher Paket- und Konventionskonfigurationen
VERSION_CODENAME Codename für die Distributionsversion Repository-Konfiguration und Dokumentation

Eine Rolling-Release-Distribution hat möglicherweise keine feste Hauptversion und kann VERSION_ID auslassen. Ein fehlendes optionales Feld bedeutet nicht, dass die Datei ungültig ist.

Verwenden Sie hostnamectl für eine Systemübersicht

Bei Distributionen, die systemd verwenden, kann hostnamectl den Hostnamen, das Betriebssystem, den Kernel und die CPU-Architektur zusammen anzeigen.

hostnamectl

Die nützlichsten Felder sind:

  • Betriebssystem: Distributionsname und -version
  • Kernel: aktuell laufende Kernel-Version
  • Architektur: Systemarchitektur
  • Virtualisierung: erkannte Virtualisierungs- oder Container-Umgebung

hostnamectl ist eine praktische Zusammenfassung, kann jedoch in Minimalinstallationen, einigen Containern oder Distributionen, die systemd nicht verwenden, nicht verfügbar sein. Verwenden Sie in diesen Umgebungen /etc/os-release und uname.

Unterscheiden Sie die Distributionsversion von der Kernel-Version

Die von uname gemeldeten Werte sind keine Distributionsversionen wie Ubuntu 24.04 oder Rocky Linux 10. Sie beschreiben den aktuell laufenden Kernel und die Hardwarearchitektur.

uname -r
uname -m
uname -a
Befehl Zurückgegebene Informationen Beispielverwendung
uname -r Kernel-Version Überprüfung der Kompatibilität von Treiber und Kernel-Modul
uname -m Hardware-Architektur Auswahl von x86_64- oder aarch64-Paketen
uname -a Mehrere kernelbezogene Werte in einer Zeile Bereitstellung einer kompakten Fehlerbehebungsübersicht

Ein System kann die gleiche Distributionsversion beibehalten, während es einen neueren Kernel erhält. Systeme mit derselben Distributionsversion können auch unterschiedliche Kernel ausführen. Nach einem Kernel-Paket-Update kann uname -r weiterhin den älteren Kernel anzeigen, bis das System neu gestartet wird. Die GNU Coreutils uname-Dokumentation definiert jede Option.

Verwenden Sie alternative Methoden auf älteren Systemen

Überprüfen Sie mit lsb_release

Wenn lsb_release installiert ist, kann es den Distributor, die Beschreibung, die Version und den Codenamen anzeigen.

lsb_release -a

Der Befehl ist nicht in jeder Minimalinstallation enthalten. Prüfen Sie ihn zuerst mit command -v lsb_release. Die Linux Standard Base lsb_release-Spezifikation beschreibt seine Ausgabefelder.

Lesen Sie distributionsspezifische Release-Dateien

Auf älteren Systemen ohne /etc/os-release verwenden Sie eine distributionsspezifische Datei als Fallback.

cat /etc/redhat-release
cat /etc/debian_version
cat /etc/alpine-release

Die Verfügbarkeit und das Format dieser Dateien unterscheiden sich je nach Distribution. In der Automatisierung bevorzugen Sie /etc/os-release und prüfen Sie nur die expliziten Fallback-Dateien, die Ihre unterstützten Distributionen verwenden. Vermeiden Sie es, blind jede Datei zu kombinieren, die /etc/*release entspricht.

Erkennen einer Distribution in einem Shell-Skript

Für Installationsskripte und die Automatisierung von Operationen verwenden Sie ID und VERSION_ID anstelle des Parsens des für Menschen lesbaren PRETTY_NAME.

if [ -r /etc/os-release ]; then
    . /etc/os-release
    printf 'distribution=%s\n' "$ID"
    printf 'version=%s\n' "${VERSION_ID:-unknown}"
    printf 'family=%s\n' "${ID_LIKE:-unknown}"
else
    printf 'distribution=unknown\n'
    uname -srm
fi

Der Ausdruck ${VERSION_ID:-unknown} verwendet unknown, wenn der Wert nicht gesetzt oder leer ist. Da viele Felder in os-release optional sind und Distributionen eigene Felder hinzufügen können, dürfen Skripte nicht davon ausgehen, dass jeder Wert existiert.

Beim Auswählen von Paketverwaltungsbefehlen vergleichen Sie zuerst ID und verwenden ID_LIKE nur als unterstützende Bedingung. Selbst Distributionen derselben Familie können unterschiedliche Repository-Konfigurationen und Paketnamen verwenden, daher garantiert die Familienähnlichkeit nicht, dass jeder Befehl austauschbar ist.

Ergebnisse in Containern, WSL und chroot interpretieren

Container

Innerhalb eines Containers identifiziert /etc/os-release normalerweise die User-Space-Distribution im Container-Image und nicht den Host. Im Gegensatz dazu kann uname -r den Kernel anzeigen, der mit dem Host geteilt wird. Es kann normal sein, dass diese Befehle verschiedene Distributionsfamilien zu beschreiben scheinen.

Windows Subsystem für Linux

Im Windows Subsystem für Linux (WSL) identifiziert /etc/os-release die installierte Ubuntu-, Debian- oder andere Distribution. Die Ausgabe von uname -r kann eine Zeichenkette enthalten, die einen WSL-Kernel identifiziert. Verwenden Sie weiterhin /etc/os-release für die Distributionsversion.

chroot-Umgebungen

Innerhalb eines Chroot-Systems identifiziert /etc/os-release die Distribution im Chroot-Dateisystem, während uname den mit dem laufenden Host geteilten Kernel beschreibt. Berücksichtigen Sie diesen Unterschied während der Wiederherstellungsarbeiten und übergreifender Distributions-Build-Prozesse.

Häufig gestellte Fragen

Was ist der zuverlässigste Befehl, um die Linux-Version zu überprüfen?

Um die Distribution und deren Version zu identifizieren, beginnen Sie mit cat /etc/os-release. Überprüfen Sie den Kernel separat mit uname -r und die CPU-Architektur mit uname -m.

Ist etwas falsch, wenn hostnamectl fehlt oder nicht ausgeführt werden kann?

Nicht unbedingt. Minimale Umgebungen und Distributionen, die kein systemd verwenden, stellen möglicherweise hostnamectl nicht bereit. Verwenden Sie /etc/os-release und uname, um die Informationen separat abzurufen.

Wie kann ich CentOS, Rocky Linux und AlmaLinux unterscheiden?

Überprüfen Sie ID in /etc/os-release. Diese Distributionen teilen Teile desselben Administrationsmodells, aber ihre Support-Richtlinien und Repositories sind getrennt. Behandeln Sie sie nicht als dieselbe Distribution nur basierend auf ID_LIKE.

Sind x86_64- und aarch64-Linux-Distributionsversionen?

Nein. Sie identifizieren Hardware-Architekturen. Eine Distributionsversion kann separate x86_64- und aarch64-Images bereitstellen, daher sollten Sie die Architektur beim Auswählen von Softwarepaketen oder Installationsmedien überprüfen.

Zusammenfassung

Verwenden Sie /etc/os-release für den Namen und die Version der Linux-Distribution, hostnamectl für eine praktische Systemübersicht, uname -r für den laufenden Kernel und uname -m für die Architektur.

In Skripten verwenden Sie ID, VERSION_ID und gegebenenfalls ID_LIKE, anstelle von PRETTY_NAME zu parsen. In Containern, WSL- und chroot-Umgebungen sollten Sie daran denken, dass die Benutzerraum-Distribution und der laufende Kernel aus unterschiedlichen Ebenen stammen können.