Leider gibt es keine Verfügbarkeitsgarantie.
Die meisten Systeme verfügen jedoch über GNU-Coreutils. Das allein stellt ungefähr 105 Befehle zur Verfügung. Sie können sich wahrscheinlich auf diese verlassen, es sei denn, es handelt sich um ein eingebettetes System, das stattdessen BusyBox verwendet.
Sie können sich wahrscheinlich auch auf bash, cron, GNU findutils, GNU grep, gzip, iproute2, iputils, man-db, module-init-tools, net-tools, passwd (passwd oder shadow), procps, tar und util verlassen. Linux.
Beachten Sie, dass einige Programme Unterschiede zwischen den Distributionen aufweisen können. Zum Beispiel /usr/bin/awk
könnte gawk oder mawk sein. /bin/sh
kann im POSIX-Modus dash oder bash sein. Auf einigen älteren Systemen /usr/bin/host
hat nicht dieselbe Syntax wie die BIND-Version, daher ist es möglicherweise besser, dig.
Wenn Sie nach Standards suchen, die Linux Standard Base definiert einige häufig vorkommende Programme, aber nicht alle Distributionen behaupten, dem Standard zu entsprechen, und einige tun dies nur, wenn Sie ein optionales LSB-Kompatibilitätspaket installieren. Als Beispiel dafür kommen einige Systeme, die ich gesehen habe, nicht mit lsb_release
in einer Standardinstallation.
Außerdem könnte die Liste der von POSIX standardisierten Befehle hilfreich sein.
Ein anderer Ansatz für Ihr Problem besteht darin, Ihr Skript mit den Paketierungstools jeder Distribution (z. B. RPM für Red Hat, DEB für Debian usw.) zu paketieren und eine Abhängigkeit von anderen Programmen oder Paketen zu deklarieren, die Sie benötigen. Es ist ein bisschen Arbeit, aber es bedeutet, dass die Benutzer eine freundlichere Fehlermeldung sehen, die ihnen nicht nur sagt, was fehlt, sondern auch, welche Pakete sie installieren müssen.
Weitere Informationen:
- RPM - Hinzufügen von Abhängigkeitsinformationen zu einem Paket
- Debian - Deklaration von Beziehungen zwischen Paketen.
Auf nicht eingebetteten Linux-Systemen können Sie im Allgemeinen auf die meisten GNU-Dienstprogramme zählen:
- coreutils
- Bash
- findutils (mindestens
find
undxargs
, nicht unbedingtlocate
undupdatedb
) - grep
- gzip
- sed
- tar
plus die util-linux-Suite und die procps-Suite. Beachten Sie, dass /bin/sh
ist nicht immer bash, es kann auch eine Shell mit weniger Funktionen sein, wie zum Beispiel eine der mehreren Aschegabeln.
Die Linux Standard Base definiert eine Reihe allgemeiner Dienstprogramme mit Funktionen, die auf allen konformen Systemen erwartet werden. Sie können auch die meisten der von POSIX spezifizierten Dienstprogramme erwarten. Eine bemerkenswerte Ausnahme ist pax
, das nicht Teil der Standardinstallation vieler Distributionen ist.
Wenn Sie die Dinge einfach halten möchten, fordern Sie die Installation eines lsb_release
an Paket. Viele Distributionen haben ein solches Paket, das alle Abhängigkeiten enthält, die vom LSB benötigt werden.
Auf einem eingebetteten System ist alles möglich. Eingebettete Linux-Systeme führen normalerweise BusyBox aus, aber viele Dienstprogramme und Funktionen sind optional, sodass Sie sich auf sehr wenige Dinge verlassen können.
Es gibt eine Reihe von Befehlen, die die meisten, wenn nicht alle Linux-Distributionen und auch Unix-Distributionen bereitstellen. Dies sind die vom POSIX-Standard spezifizierten obligatorischen Befehle.
Die meisten der von Ihnen zitierten Befehle (cd
, mkdir
, ls
, echo
, grep
, sed
, awk
, etc.) sind davon. Die Ausnahme ist ping
wie WhiteWinterWolf zu Recht kommentierte.