J'aimerais savoir quelles sont les commandes standard disponibles sur tous les systèmes Linux.
Par exemple, si vous obtenez un fichier debian / ubuntu / redhat / suse / arch / slackware, etc., vous trouverez toujours des commandes telles que:
cd, mkdir, ls, echo, grep, sed, awk, ping, etc.
Je sais que certaines des commandes mentionnées sont intégrées au shell mais d’autres pas, mais elles sont toujours présentes (sur la base de mes connaissances et de l’expérience acquises jusqu’à maintenant).
D'autre part, des commandes telles que gawk, parted, traceroute et d'autres commandes assez célèbres ne sont pas installées par défaut dans différentes distributions Linux.
J'ai fait différentes recherches sur le Web, mais je n'ai pas trouvé de réponse simple à cette question.
Le but est que je souhaite créer un script shell et il devrait effectuer des vérifications de cohérence si les commandes utilisées dans le script sont disponibles dans le système. Sinon, il devrait inviter l'utilisateur à installer les fichiers binaires nécessaires.
Réponses:
Malheureusement, rien n’est garanti.
Cependant, la plupart des systèmes auront GNU coreutils . Cela seul fournit environ 105 commandes. Vous pouvez probablement vous y fier, sauf s’il s’agit d’un système intégré, qui pourrait utiliser BusyBox à la place.
Vous pouvez probablement aussi compter sur bash , Cron , findutils GNU , GNU grep , gzip , iproute2 , iputils , man-db , le module-init-tools , net-tools , passwd ( passwd ou ombre ), procps , goudron et util- Linux .
Notez que certains programmes peuvent avoir des différences entre les distributions. Par exemple
/usr/bin/awk
pourrait être gawk ou mawk ./bin/sh
pourrait être tiret ou bash en mode POSIX . Sur certains systèmes plus anciens,/usr/bin/host
la syntaxe n'est pas identique à celle de la version de BIND . Il peut donc être préférable d'utiliser dig .Si vous recherchez des normes, Linux Standard Base définit certains programmes courants , mais toutes les distributions ne prétendent pas être conformes à la norme. Certaines le font uniquement si vous installez un package de compatibilité LSB en option. À titre d'exemple, certains systèmes que j'ai vus ne sont pas fournis avec
lsb_release
une installation par défaut.De plus, la liste des commandes normalisées par POSIX pourrait être utile.
Une autre solution à votre problème consiste à conditionner votre script à l’aide des outils d’empaquetage de chaque distribution (par exemple, RPM pour Red Hat, DEB pour Debian, etc.) et de déclarer une dépendance à tout autre programme ou package dont vous avez besoin. C'est un peu de travail, mais cela signifie que les utilisateurs verront un message d'erreur plus convivial, leur indiquant non seulement ce qui manque, mais également les packages à installer.
Plus d'informations:
la source
:)
Sur les systèmes Linux non intégrés, vous pouvez généralement compter sur la plupart des utilitaires GNU:
find
etxargs
pas nécessairementlocate
etupdatedb
)plus la suite util-linux et la suite procps . Notez que ce
/bin/sh
n'est pas toujours bash, il peut s'agir d'un shell avec moins de fonctionnalités telles que l'une des multiples fourchettes de cendres .La base standard Linux définit un ensemble d'utilitaires communs avec les fonctionnalités attendues sur tous les systèmes conformes. Vous pouvez également vous attendre à la plupart des utilitaires spécifiés par POSIX . Une exception notable est
pax
, qui ne fait pas partie de l'installation par défaut de nombreuses distributions.Si vous voulez garder les choses simples, demandez l’installation d’un
lsb_release
paquet. De nombreuses distributions ont un tel paquet qui inclut toutes les dépendances requises par le LSB.Sur un système embarqué, tous les paris sont ouverts. Les systèmes Linux embarqués utilisent généralement BusyBox , mais de nombreux utilitaires et fonctionnalités sont facultatifs. Vous ne pouvez donc pas vous en assurer.
la source
Il existe un ensemble de commandes que la plupart, sinon toutes les distributions Linux, fourniront également. Ce sont les commandes obligatoires spécifiées par le standard POSIX .
La plupart des commandes que vous citez (
cd
,mkdir
,ls
,echo
,grep
,sed
,awk
, etc.) sont de celui - ci. L'exception étantping
que WhiteWinterWolf a correctement commenté.la source
ping
fait, ne fait pas partie de POSIX ...ping
,ifconfig
,telnet
, etc. ne font pas partie de cette norme (ni aucun autre AFAIK, ils ont juste viser la compatibilité avec les "implémentations historiques" du mieux possible).