Wie kann ich feststellen, ob ein Build auf Debian basiert?


9

Ich fange an, mit einer Box zu arbeiten, auf der ein benutzerdefiniertes (kleines) Linux basiert. Wie kann ich feststellen, ob es sich um einen Debian- oder einen Red Hat-basierten Build handelt?

Das weiß ich bisher:

$ cat /proc/version
Linux version 2.6.31-2.5 (build@build-desktop) (gcc version 4.4.3 (Broadcom stbgcc-4.4.3-1.2) ) #7

$ apt-get
-sh: apt-get: command not found

$ yum
-sh: yum: command not found

warum lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-? Einfach ausführenlsb_release -si

Antworten:


2

Beim Ausführen uname -asollten Sie einige allgemeine Informationen zum System erhalten. Sie können auch apropos "package manager"oder mit ähnlichen Schlüsselwörtern ausführen, um hoffentlich mehr über den Paketmanager zu erfahren. Suchen Sie /etcnach einer Datei mit dem Namen, xyz-releasein der xyzsich die laufende Distribution befinden soll.


Dies ist, was ich bekomme, wenn ich uname -a: $ uname -a Linux 10.0.1.46 2.6.31-2.5 # 7 Do 15. Dezember 19:57:09 CST 2011 mips GNU / Linux
Sparky1

@ Sparky1 Dann haben Sie sich anscheinend eine Linux-MIPS- Distribution besorgt .

7

Zum Testen auf Debian-Systeme können Sie überprüfen, ob /etc/debian_versionFolgendes vorhanden ist:

if [ -f "/etc/debian_version" ]; then
   # do stuff
fi

Es sollte Debian und darauf basierende Systeme (einschließlich Ubuntu und seiner Derivate) enthalten, obwohl einige es möglicherweise nicht haben - in diesem Fall können Sie /etc/*releaseDateien überprüfen :

if [ "$(grep -Ei 'debian|buntu|mint' /etc/*release)" ]; then
   # do stuff
fi

Wo debian|buntu|mintist eine Liste von Distributionsnamen, nach denen gesucht werden muss (ohne Berücksichtigung der Groß- und Kleinschreibung) ? Hier können Sie sich einige gängige Derivate vorstellen , obwohl Debian-Derivate wie Ubuntu ihre eigenen Derivate haben .


Bei RedHat-basierten Systemen verwenden die Derivate einen größeren Dateibereich und haben möglicherweise keine lsb-Version installiert. Daher können Sie die folgenden Methoden anwenden:

  • Holen Sie sich den Release-Namen von

    lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-
    
  • Überprüfen Sie die DISTRIB-ID in der lsb-releaseDatei - eine 'Fallback-Methode, die auf modernen Systemen wahrscheinlich nicht erforderlich ist'. Außerdem fehlt die Datei anscheinend auf Fedora und enthält DISTRIB_ID unter OpenSUSE nicht

  • Überprüfen Sie, ob einige der folgenden Elemente vorhanden sind

    • /etc/fedora-releaseund / oder /etc/redhat-releasefür RedHat oder Fedora
    • /etc/SuSE-release für SuSe
    • /etc/mandriva-release für mandriva / mageia
  • Verwenden Sie eine ähnliche Methode wie die letztere Debian-Methode:

    if [ "$(grep -Ei 'fedora|redhat' /etc/*release)" ]; then
    ...
    

Die ersten 3 Punkte habe ich aus dem Update von Google Chrome bezogen, sodass Sie dies überprüfen können, um mehr zu erfahren (es bestimmt auch die Paketmanager).


Für eine größere Auswahl an Betriebssystemen sollte das Lesen dieses Beitrags über SO hilfreich sein.


2

Überprüfen Sie die Ausgabe von:

lsb_release -a

und:

cat /etc/issue

Sie können auch nach weiteren Paketbefehlen mit niedrigem Hebel rpmfür RedHat und dpkgDebian suchen .


Befehl $ dpkg nicht gefunden $ rpm (zeigt Optionen für den Befehl rpm an). Sieht so aus, als wäre es ein auf einem roten Hut basierender Build. Danke für die Hilfe!
Sparky1

2
Sie können auch die Datei / etc / debian_version überprüfen , die in allen debian-basierten Linux-Distributionen vorhanden ist
Coren

Installieren Sie es auch mit, apt-get install lsb-releasewenn es nicht installiert ist.
Massood Khaari

1

Wenn es sich um ein eingebettetes Gerät handelt (z. B. einen SoHo-Router), handelt es sich wahrscheinlich nicht um eine der "Desktop / Server" -Distributionen. Ich würde versuchen, das Handbuch des Geräts, die Website des Herstellers (sollte Quelle für den GPL-lizenzierten Code sein) und das gesamte Web zu lesen.


0

uname -aund cat /proc/version( schreibgeschützt für Superuser ), in meiner ehrlichen Meinung, sind die einzig richtigen Antworten auf diese Frage , wie der Rest - wie lsb_release, /etc/issueoder cat /proc/sys/kernel/version- nicht verfügbar / nicht verwendbar auf jedem System (nicht einmal offizielle Debian - Distributionen). Verwenden Sie auch nicht /etc/*releases, /etc/*versionda sie geändert werden können. Letzteres ist nicht in allen Debian-Distributionen verfügbar.

Andere Optionen könnten sein (nicht meine Empfehlung):

  • Überprüfen dashoder überprüfen Sie, ob sheine Verknüpfung besteht dash(dies sollte die Standardeinstellung für die Ausführung von Skripten sein).
  • Überprüfen Sie den Paketmanager durch Ausführen >/dev/null 2>&1 dpkg --version && { ... }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.