GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finde ich heraus, welche Version von Linux ausgeführt wird?

Lösung 1:

Es gibt keinen Querverteilungsweg. Allerdings:

  • Redhat und Freunde:Test auf /etc/redhat-release , Inhalt prüfen
  • Debian:Test auf /etc/debian_version , Inhalt prüfen
  • Mandriva und Freunde:Test auf /etc/version , Inhalt prüfen
  • Slackware:Test auf /etc/slackware-version , Inhalt prüfen

Usw. Suchen Sie im Allgemeinen nach /etc/*-release und /etc/*-version .

Bearbeiten:Ich habe ein altes (1+ Jahre) Bash-Skript von mir herumliegend gefunden, das ich im Laufe der Jahre zusammengeschustert haben muss (es hat ein beeindruckendes CVS-Protokoll, das 6 Jahre zurückreicht). Machen Sie sich nicht die Mühe, installierte Distributionen zum Testen zu finden, aber es sollte Ihnen einen guten Ausgangspunkt bieten. Es funktioniert gut auf CentOS, Fedora und Gentoo. gyaresu hat es erfolgreich auf Debian Lenny getestet.

#!/bin/bash

get_distribution_type()
{
    local dtype
    # Assume unknown
    dtype="unknown"

    # First test against Fedora / RHEL / CentOS / generic Redhat derivative
    if [ -r /etc/rc.d/init.d/functions ]; then
        source /etc/rc.d/init.d/functions
        [ zz`type -t passed 2>/dev/null` == "zzfunction" ] && dtype="redhat"

    # Then test against SUSE (must be after Redhat,
    # I've seen rc.status on Ubuntu I think? TODO: Recheck that)
    elif [ -r /etc/rc.status ]; then
        source /etc/rc.status
        [ zz`type -t rc_reset 2>/dev/null` == "zzfunction" ] && dtype="suse"

    # Then test against Debian, Ubuntu and friends
    elif [ -r /lib/lsb/init-functions ]; then
        source /lib/lsb/init-functions
        [ zz`type -t log_begin_msg 2>/dev/null` == "zzfunction" ] && dtype="debian"

    # Then test against Gentoo
    elif [ -r /etc/init.d/functions.sh ]; then
        source /etc/init.d/functions.sh
        [ zz`type -t ebegin 2>/dev/null` == "zzfunction" ] && dtype="gentoo"

    # For Slackware we currently just test if /etc/slackware-version exists
    # and isn't empty (TODO: Find a better way :)
    elif [ -s /etc/slackware-version ]; then
        dtype="slackware"
    fi
    echo $dtype
}

Beachten Sie, dass dies wahrscheinlich nur in Bash korrekt funktioniert. Sie könnten es für andere Shells umschreiben.

Davon abgesehen möchten Sie vielleicht auf Funktionen testen, nicht auf Distributionen. Ich benutze das nicht mehr, einfach weil es zu einer Wartungsbelastung wurde. Es ist einfacher, sich auf vertriebsübergreifende Tools und Lösungen zu verlassen.

Konzeptionell funktioniert es in der Reihenfolge:

  • Ziehen Sie einen bekannten Dateityp "allgemeine Init-Skript-Funktion" ein. Diese sind verteilungsspezifisch. Wenn es nicht vorhanden ist, fahren Sie mit der nächsten Verteilungsprüfung fort.
  • Überprüfen Sie die Existenz einer bestimmten, bekanntermaßen existierenden, häufig verwendeten und wahrscheinlich nicht umbenannten Funktion aus diesem Kernskript. Wir machen das mit dem type Bash eingebaut. type -t gibt function zurück wenn dieses Symbol eine Funktion ist. Wir stellen zz voran zur Ausgabe von type -t 2>/dev/null denn wenn der Name nicht definiert wäre, wäre der Ausgabestring leer und wir würden einen Syntaxfehler über eine fehlende linke Hand zum == erhalten Operator. Wenn der gerade überprüfte Name keine Funktion ist, fahren Sie mit der nächsten Verteilungsprüfung fort, andernfalls haben wir den Verteilungstyp gefunden.
  • Schließlich geben Sie den Verteilungstyp wieder, damit die Funktionsausgabe einfach in einem case .. esac-Block verwendet werden kann.

Bearbeiten Sie, falls Sie versuchen, dies als reines Skript auszuführen:Dieses Skript soll von anderen Skripten bezogen oder eingefügt werden. Es gibt nichts von sich aus aus, wenn Sie es so ausführen, wie es ist. Um es zu testen, sourcen Sie es und rufen Sie dann die Funktion auf, z. B.:

source /path/to/this/script.sh
get_distribution_type

an der Bash-Eingabeaufforderung.

Bearbeiten:Bitte beachten Sie, dass dieses Skript keine Root-Rechte erfordert. Ich fordere Sie auf, es nicht als root auszuführen. Sollte nichts schaden, ist aber auch nicht nötig.

Einen Link zu einem relevanten Mailinglisten-Beitrag im CVS-Protokoll gefunden. Sollte beim Entpacken von Init-Skript-Spaghetti hilfreich sein.

Lösung 2:

Versuchen Sie nicht, basierend auf der Distribution Annahmen darüber zu treffen, was Sie tun können und was nicht, denn auf diesem Weg liegt Wahnsinn (siehe auch "Erkennung von Benutzeragenten"). Ermitteln Sie stattdessen, ob das, was Sie tun möchten, unterstützt wird und wie es von dem Befehl oder Dateispeicherort ausgeführt wird, den Sie verwenden möchten.

Wenn Sie beispielsweise ein Paket installieren möchten, können Sie feststellen, ob Sie sich auf einem Debian-ähnlichen System oder einem RedHat-ähnlichen System befinden, indem Sie prüfen, ob dpkg oder rpm vorhanden sind (überprüfen Sie zuerst, ob dpkg vorhanden ist, da Debian-Rechner möglicherweise der rpm-Befehl auf ihnen ...). Treffen Sie Ihre Entscheidung darüber, was zu tun ist, nicht nur darauf, ob es sich um ein Debian- oder ein RedHat-System handelt. Auf diese Weise unterstützen Sie automatisch alle abgeleiteten Distributionen, die Sie nicht explizit programmiert haben. Oh, und wenn Ihr Paket bestimmte Abhängigkeiten erfordert, dann testen Sie diese auch und lassen Sie den Benutzer wissen, was ihnen fehlt.

Ein weiteres Beispiel ist das Hantieren mit Netzwerkschnittstellen. Finden Sie heraus, was zu tun ist, je nachdem, ob es eine /etc/network/interfaces-Datei oder ein /etc/sysconfig/network-scripts-Verzeichnis gibt, und beginnen Sie von dort aus.

Ja, es ist mehr Arbeit, aber wenn Sie nicht alle Fehler wiederholen möchten, die Webentwickler in den letzten zehn oder mehr Jahren gemacht haben, tun Sie es von Anfang an auf die intelligente Art und Weise.

Lösung 3:

Sie können die Kernel-Version finden, indem Sie uname -a ausführen , das Finden der Distributionsversion hängt von der Distribution ab.

Unter Ubuntu und einigen anderen Betriebssystemen können Sie lsb_release -a ausführen oder lesen Sie /etc/lsb_release

Debian speichert die Version in /etc/debian_version

Lösung 4:

Die meisten Distributionen haben eine einzigartige Methode zur Bestimmung der jeweiligen Distribution.

Zum Beispiel:

Redhat (And derivatives): /etc/redhat-release

SUSE: /etc/SUSE-release

Es gibt einen Standard, der als Linux Standard Base oder LSB bekannt ist. Er definiert, dass es eine Datei namens /etc/lsb-release oder ein Programm namens lsb_release geben sollte, das Informationen über Ihre Linux-Distribution zurückgibt.

lsb_release -a

Lösung 5:

python -c 'import platform ; print platform.dist()[0]'

code:http://hg.python.org/cpython/file/2.7/Lib/platform.py


Linux
  1. So überprüfen Sie die Redhat-Version

  2. Welche Linux-Version verwende ich? So finden Sie es heraus

  3. So finden Sie heraus, was ein Linux-Befehl tut

  4. So überprüfen Sie die Kernel-Version unter Linux

  5. Wie finde ich heraus, welcher Prozess eine Datei in Linux gesperrt hat?

So überprüfen Sie die Kernel-Version in Linux

So finden Sie heraus, welche Version des Linux-Kernels auf Ihrem PC läuft

So finden Sie heraus, wie lange ein Prozess unter Linux läuft

So überprüfen Sie, welche Linux-Kernel-Version ich verwende

So finden Sie heraus, welche Linux-Version Sie ausführen

So überprüfen Sie die PHP-Version unter Linux