Malheureusement, il n'y a aucune garantie que quoi que ce soit soit disponible.
Cependant, la plupart des systèmes auront GNU coreutils. Cela seul fournit environ 105 commandes. Vous pouvez probablement compter sur ceux-ci à moins qu'il ne s'agisse d'un système intégré, qui pourrait utiliser BusyBox à la place.
Vous pouvez probablement aussi compter sur bash, cron, GNU findutils, GNU grep, gzip, iproute2, iputils, man-db, module-init-tools, net-tools, passwd (passwd ou shadow), procps, tar 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
peut être dash ou bash en mode POSIX. Sur certains anciens systèmes, /usr/bin/host
n'a pas la même syntaxe que la version BIND, il serait donc préférable d'utiliser dig.
Si vous recherchez des normes, la base standard Linux définit certains programmes couramment trouvés, mais toutes les distributions ne prétendent pas être conformes à la norme, et certaines ne le font que si vous installez un package de compatibilité LSB facultatif. Par exemple, certains systèmes que j'ai vus ne sont pas livrés avec lsb_release
dans une installation par défaut.
De plus, la liste des commandes normalisées par POSIX pourrait être utile.
Une autre approche de votre problème consiste à empaqueter 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 paquet 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 aussi les packages qu'ils doivent installer.
Plus d'informations :
- RPM – Ajout d'informations de dépendance à un package
- Debian - Déclaration des relations entre les paquets.
Sur les systèmes Linux non embarqués, vous pouvez généralement compter sur la plupart des utilitaires GNU :
- coreutils
- bash
- findutils (au moins
find
etxargs
, pas nécessairementlocate
etupdatedb
) - grep
- gzip
- sed
- goudron
ainsi que la suite util-linux et la suite procps. Notez que /bin/sh
n'est pas toujours bash, il peut s'agir d'une coque avec moins de fonctionnalités comme l'une des multiples fourches de frêne.
La base standard Linux définit un ensemble d'utilitaires communs avec des 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 faire simple, demandez l'installation d'un lsb_release
forfait. De nombreuses distributions ont un tel paquet qui extrait toutes les dépendances requises par le LSB.
Sur un système embarqué, tous les paris sont ouverts. Les systèmes Linux embarqués exécutent généralement BusyBox, mais de nombreux utilitaires et fonctionnalités sont facultatifs, vous n'êtes donc pas sûr d'obtenir.
Il existe un ensemble de commandes pour la plupart sinon toutes les distributions Linux, et d'ailleurs, les distributions Unix le fourniront également. Ce sont les commandes obligatoires spécifiées par la norme POSIX.
La plupart des commandes que vous citez (cd
, mkdir
, ls
, echo
, grep
, sed
, awk
, etc.) en font partie. L'exception étant ping
comme l'a justement commenté WhiteWinterWolf.