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.
Antworten:
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/awk
könnte gawk oder mawk sein ./bin/sh
könnte im POSIX-Modus ein Bindestrich oder ein Bash sein . Hat auf einigen älteren Systemen/usr/bin/host
nicht 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_release
Standardinstallation.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:
quelle
:)
Auf nicht eingebetteten Linux-Systemen können Sie im Allgemeinen auf die meisten GNU-Dienstprogramme zählen:
find
undxargs
, nicht unbedingtlocate
undupdatedb
)plus die util-linux suite und die procps suite . Beachten Sie, dass
/bin/sh
nicht 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_release
Pakets 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.
quelle
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,ping
wie WhiteWinterWolf zu Recht kommentierte.quelle
ping
ist nicht Teil von POSIX ...ping
,ifconfig
,telnet
usw. sind nicht Bestandteil dieser Norm (noch irgendeine andere AFAIK, sie einfach angestrebte Kompatibilität mit "historischen Implementierungen" auf bestmöglicher Basis).