Welche Standardbefehle sind in jeder Linux-basierten Distribution verfügbar?

39

Ich würde gerne wissen, welche Standardbefehle in jedem Linux-System verfügbar sind.

Wenn Sie beispielsweise ein debian / ubuntu / redhat / suse / arch / slackware usw. erhalten, finden Sie dort immer Befehle wie:

cd, mkdir, ls, echo, grep, sed, awk, ping usw.

Ich weiß, dass einige der genannten Befehle Shell-Built-in sind, andere jedoch nicht, aber sie sind immer noch vorhanden (basierend auf meinen bisherigen Kenntnissen und Erfahrungen).

Auf der anderen Seite werden Befehle wie gawk, parted, traceroute und andere bekannte Befehle in verschiedenen Linux-Distributionen nicht standardmäßig installiert.

Ich habe verschiedene Websuchen durchgeführt, aber keine eindeutige Antwort darauf gefunden.

Der Zweck ist, dass ich ein Shell-Skript erstellen möchte und es einige Überprüfungen durchführen soll, ob die im Skript verwendeten Befehle im System verfügbar sind. Wenn nicht, sollte der Benutzer aufgefordert werden, die erforderlichen Binärdateien zu installieren.

Vangelis Tasoulas
quelle
5
Nur ein Hinweis: " Es sollte ein paar Sicherheitsüberprüfungen durchgeführt werden, ob die im Skript verwendeten Befehle im System verfügbar sind " klingt sehr nach Autoconf .
Sr_
Auf jeden Fall ein Fall für Auto-Config ... oder vielleicht seine wissenschaftlichere Cousine, verspricht Theorie .
Wildcard
@Wildcard, ich glaube, dass jedes Konfigurationsverwaltungssystem in einem solchen Fall ein Overkill wäre, es sei denn, Sie möchten eine kontinuierliche Überprüfung der Integrität und Selbstheilung des Systems auch nach der Erstinstallation.
Vangelis Tasoulas
@VangelisTasoulas, das glaube ich nicht. Warum müssen Sie in einem Einzelbenutzer-Setup wie einem Heimcomputer ein Skript erstellen? Das Konfigurationsmanagement wäre übertrieben - aber auch eine Überprüfung per Skript im Vergleich zu einer manuellen Überprüfung. In einem Szenario, in dem Sie über mehrere Kontrollkästchen verfügen, für die Sie die Konsistenz sicherstellen möchten, wäre die Skripterstellung kein Übermaß - aber auch nicht die Konfigurationsverwaltung. Oder sind Sie ein Softwareentwickler, der nur die Sicherheitsprüfung während der Paketinstallation für Ihr Produkt durchführen möchte? Es hängt von Ihrem Szenario ab, ja, aber wenn Sie Ihre Konfiguration verwalten möchten, ist ein Konfigurationsverwaltungstool nicht überfordert. ;)
Wildcard
1
@Wildcard, Als ich diese Frage schrieb, dachte ich über letztere nach: Ich möchte nur während der Installation auf einem einzelnen Computer eine Überprüfung der Integrität durchführen, um sicherzustellen, dass die Software ordnungsgemäß ausgeführt wird. Wenn Sie mehrere Server verwalten und verteilte Bereitstellungen usw. verwalten möchten, stimme ich natürlich zu, dass das Konfigurationsmanagement auf lange Sicht der richtige Weg ist.
Vangelis Tasoulas

Antworten:

41

Leider gibt es keine Garantie dafür, dass etwas verfügbar ist.

Die meisten Systeme werden jedoch GNU-Coreutils haben . Das allein liefert ungefähr 105 Befehle. Sie können sich wahrscheinlich auf diese verlassen, es sei denn, es handelt sich um ein eingebettetes System, das stattdessen möglicherweise BusyBox verwendet.

Sie können sich wahrscheinlich auch auf bash , cron , GNU-Findutils , GNU-grep , gzip , iproute2 , iputils , man-db , Modul-Init-Tools , Netz-Tools , passwd ( passwd oder shadow ), procps , tar und util stützen. Linux .

Beachten Sie, dass einige Programme möglicherweise Unterschiede zwischen Distributionen aufweisen. Zum Beispiel /usr/bin/awkkönnte gawk oder mawk sein . /bin/shkönnte im POSIX-Modus ein Bindestrich oder ein Bash sein . Hat auf einigen älteren Systemen /usr/bin/hostnicht die gleiche Syntax wie die BIND-Version , daher ist es möglicherweise besser, dig zu verwenden .

Wenn Sie nach Standards suchen, definiert die Linux Standard Base einige häufig vorkommende Programme , aber nicht alle Distributionen erheben den Anspruch, dem Standard zu entsprechen, und einige tun dies nur, wenn Sie ein optionales LSB-Kompatibilitätspaket installieren. Als Beispiel hierfür haben einige Systeme, die ich gesehen habe, keine lsb_releaseStandardinstallation.

Darüber hinaus kann die von POSIX standardisierte Befehlsliste hilfreich sein.

Ein weiterer Ansatz für Ihr Problem besteht darin, Ihr Skript mit den Pakettools der einzelnen Distributionen (z. B. RPM für Red Hat, DEB für Debian usw.) zu packen und eine Abhängigkeit von anderen Programmen oder Paketen zu deklarieren, die Sie benötigen. Es ist ein bisschen Arbeit, aber es bedeutet, dass Benutzer eine freundlichere Fehlermeldung erhalten, die ihnen nicht nur sagt, was fehlt, sondern welche Pakete sie installieren müssen.

Mehr Info:

Mikel
quelle
Die Paket-und-Add-Abhängigkeiten -idea ist großartig, Beats Tauchen in Autoconf :)
zweifellos
2
tolle antwort, ich bin mit allem einverstanden. Ich möchte einen zusätzlichen Warnschritt hinzufügen: Berücksichtigen Sie die zusätzlichen spezifischen Optionen der jeweiligen Version des Befehls, den Sie verwenden. Sie funktionieren möglicherweise nicht bei allen Versionen (dies ist in einem Projekt geschehen, in dem ich gearbeitet habe).
JoséNunoFerreira
Ich nehme nicht an, dass es irgendwo eine Klartextdatei mit einer Liste dieser Befehle gibt. pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html kann relativ einfach in diese konvertiert werden, aber es fehlen noch ein paar Sachen.
Dylan Nicholson
7

Auf nicht eingebetteten Linux-Systemen können Sie im Allgemeinen auf die meisten GNU-Dienstprogramme zählen:

plus die util-linux suite und die procps suite . Beachten Sie, dass /bin/shnicht immer bash ist, kann es eine Schale sein , mit weniger Funktionen wie einer der mehreren Gabeln von Asche .

Die Linux Standard Base definiert eine Reihe allgemeiner Dienstprogramme mit Funktionen, die auf allen kompatiblen Systemen erwartet werden. Sie können auch die meisten von POSIX angegebenen Dienstprogramme erwarten . Eine bemerkenswerte Ausnahme ist pax, dass dies nicht Teil der Standardinstallation vieler Distributionen ist.

Wenn Sie die Dinge einfach halten möchten, fordern Sie die Installation eines lsb_releasePakets an. Viele Distributionen haben ein solches Paket, das alle vom LSB benötigten Abhängigkeiten berücksichtigt.

Auf einem eingebetteten System sind alle Wetten deaktiviert. Eingebettete Linux-Systeme führen normalerweise BusyBox aus , aber viele Dienstprogramme und Funktionen sind optional, sodass Sie sich kaum sicher sein können, dass Sie diese erhalten.

Gilles 'SO - hör auf böse zu sein'
quelle
6

Es gibt eine Reihe von Befehlen, die meisten, wenn nicht alle Linux-Distributionen, und diesbezüglich auch Unix-Distributionen. Dies sind die obligatorischen Befehle, die vom POSIX-Standard angegeben werden .

Die meisten der Befehle , die Sie zitieren ( cd, mkdir, ls, echo, grep, sed, awk, etc.) sind von ihm. Die Ausnahme ist, pingwie WhiteWinterWolf zu Recht kommentierte.

jlliagre
quelle
1
Eigentlich pingist nicht Teil von POSIX ...
WhiteWinterWolf
Die POSIX-Homepage gibt an, dass sie sich auf die Gewährleistung der "Anwendungsportabilität auf Quellcode-Ebene" konzentriert , d. H. Nach meinem Verständnis interessieren sie sich für die System-API, das Systemverhalten (einschließlich der Shell) und Befehle, die zum Konfigurieren, Kompilieren und Installieren einer Anwendung und zum Behandeln ihres Quellcodes verwendet werden können.
WhiteWinterWolf
Sie kümmern sich nicht über Dienstprogramme Networking ( „Systemkonfiguration und die Verfügbarkeit von Ressourcen“ sind explizit out-of-scope), so allgegenwärtig Befehle wie ping, ifconfig, telnetusw. sind nicht Bestandteil dieser Norm (noch irgendeine andere AFAIK, sie einfach angestrebte Kompatibilität mit "historischen Implementierungen" auf bestmöglicher Basis).
WhiteWinterWolf