Quelles sont les commandes standard disponibles dans chaque distribution basée sur Linux?

39

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.

Vangelis Tasoulas
la source
5
Juste un indice: " il devrait faire quelques vérifications avant que les commandes utilisées dans le script soient disponibles dans le système " sonne beaucoup comme Autoconf .
Sr.
Certainement un cas d'auto-configuration ... ou peut-être son cousin plus scientifique, la théorie des promesses .
Wildcard
@Wildcard, je crois que tout système de gestion de la configuration serait excessif, à moins que vous ne souhaitiez des contrôles de cohérence continus et une réparation automatique du système, même après l'installation initiale.
Vangelis Tasoulas
@VangelisTasoulas, je ne le pense pas. Dans une configuration mono-utilisateur telle qu'un ordinateur personnel, pourquoi devriez-vous écrire un script? La gestion de la configuration serait excessive, mais il en irait de même d'une vérification scriptée ou manuelle. Dans un scénario où vous avez plusieurs cases sur lesquelles vous souhaitez assurer la cohérence, les scripts ne seraient pas excessifs, mais la gestion de la configuration ne le serait pas non plus. Ou êtes-vous un développeur de logiciels qui souhaite simplement exécuter des contrôles de cohérence lors de l'installation des packages pour votre produit? Cela dépend de votre scénario, oui, mais si vous souhaitez gérer votre configuration, un outil de gestion de la configuration n’est pas excessif. ;)
Wildcard
1
@Wildcard, quand j'ai écrit cette question, je pensais à cette dernière: Je veux juste exécuter des contrôles de cohérence lors de l'installation sur une seule machine, afin de s'assurer que le logiciel fonctionnera correctement. Bien sûr, si vous souhaitez gérer plusieurs serveurs et gérer des déploiements distribués, etc., je conviens que la gestion de la configuration est la voie à suivre à long terme.
Vangelis Tasoulas

Réponses:

41

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/awkpourrait être gawk ou mawk . /bin/shpourrait être tiret ou bash en mode POSIX . Sur certains systèmes plus anciens, /usr/bin/hostla 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_releaseune 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:

Mikel
la source
Le paquet-et-add-dépendances -idea est génial, bat la plongée dans Autoconf haut la main:)
sr_
2
excellente réponse, je suis d'accord avec tout. J'ajouterais une étape de précaution supplémentaire: tenez compte des options spécifiques supplémentaires de la version de la commande que vous utilisez ... elles risquent de ne pas fonctionner avec toutes les versions (cela s'est produit dans un projet dans lequel j'ai travaillé).
JoséNunoFerreira
Je ne suppose pas qu'il existe un fichier texte avec une liste de ces commandes n'importe où? pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html peut être facilement converti à cela, mais il manque encore beaucoup de choses.
Dylan Nicholson
7

Sur les systèmes Linux non intégrés, vous pouvez généralement compter sur la plupart des utilitaires GNU:

plus la suite util-linux et la suite procps . Notez que ce /bin/shn'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_releasepaquet. 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.

Gilles, arrête de faire le mal
la source
6

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 étant pingque WhiteWinterWolf a correctement commenté.

jlliagre
la source
1
En pingfait, ne fait pas partie de POSIX ...
WhiteWinterWolf
La page d'accueil POSIX indique qu'ils se concentrent sur la "portabilité des applications au niveau du code source" , c'est-à-dire. selon ma compréhension, ils s'intéressent aux API système, au comportement du système (y compris le shell) et aux commandes pouvant être utilisées pour configurer, compiler et installer une application et gérer son code source.
WhiteWinterWolf
Ils ne se soucient pas de services publics en réseau ( « configuration du système et la disponibilité des ressources » sont hors explicitement champ), les commandes si omniprésents tels que 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).
WhiteWinterWolf