¿Cuáles son los comandos estándar disponibles en cada distribución basada en Linux?

39

Me gustaría saber cuáles son los comandos estándar disponibles en todos los sistemas Linux.

Por ejemplo, si obtiene un debian / ubuntu / redhat / suse / arch / slackware, etc., siempre encontrará comandos como:

cd, mkdir, ls, echo, grep, sed, awk, ping, etc.

Sé que algunos de los comandos mencionados están integrados en shell, pero otros no, pero siempre están ahí (según mi conocimiento y experiencia hasta ahora).

Por otro lado, los comandos como gawk, parted, traceroute y otros comandos bastante famosos no se instalan por defecto en diferentes distribuciones de Linux.

Hice diferentes búsquedas en la web, pero no he encontrado una respuesta directa a esto.

El propósito es que me gustaría crear un script de shell y debería hacer algunas comprobaciones de cordura si los comandos utilizados en el script están disponibles en el sistema. De lo contrario, debe solicitar al usuario que instale los archivos binarios necesarios.

Vangelis Tasoulas
fuente
55
Solo una pista: " debería hacer algunas comprobaciones de cordura si los comandos utilizados en el script están disponibles en el sistema " se parece mucho a Autoconf .
Sr_
Definitivamente un caso para la autoconfiguración ... o quizás su primo más científico, la teoría de la promesa .
Comodín el
@Wildcard, creo que cualquier sistema de gestión de la configuración sería una exageración para tal caso, a menos que desee controles continuos de sanidad y autocuración del sistema incluso después de la instalación inicial.
Vangelis Tasoulas
@ VangelisTasoulas, no lo creo. En una configuración de un solo usuario, como una computadora doméstica, ¿por qué necesitaría escribir un script? La administración de la configuración sería exagerada, pero también lo sería una verificación programada versus un manual. En un escenario en el que tiene varios cuadros en los que desea garantizar la coherencia, las secuencias de comandos no serían excesivas, pero tampoco la administración de configuración. ¿O es un desarrollador de software que solo desea realizar comprobaciones de sanidad durante la instalación del paquete para su producto? Depende de su escenario, sí, pero si desea administrar su configuración, una herramienta de administración de configuración no es exagerada. ;)
Comodín el
1
@Wildcard, cuando escribí esta pregunta, estaba pensando en lo último: solo quiero ejecutar comprobaciones de cordura durante la instalación en una sola máquina, para asegurar que el software se ejecutará correctamente. Por supuesto, si desea administrar varios servidores y manejar implementaciones distribuidas, etc., acepto que la administración de la configuración es el camino a largo plazo.
Vangelis Tasoulas

Respuestas:

41

Lamentablemente, no hay garantía de que haya nada disponible.

Sin embargo, la mayoría de los sistemas tendrán coreutils de GNU . Eso solo proporciona alrededor de 105 comandos. Probablemente pueda confiar en ellos a menos que sea un sistema integrado, que podría usar BusyBox en su lugar.

Probablemente también pueda confiar en bash , cron , GNU findutils , GNU grep , gzip , iproute2 , iputils , man-db , module-init-tools , net-tools , passwd ( passwd o shadow ), procps , tar y util- Linux .

Tenga en cuenta que algunos programas pueden tener algunas diferencias entre las distribuciones. Por ejemplo, /usr/bin/awkpodría ser gawk o mawk . /bin/shpuede ser dash o bash en modo POSIX . En algunos sistemas más antiguos, /usr/bin/hostno tiene la misma sintaxis que la versión BIND , por lo que sería mejor usar dig .

Si está buscando algunos estándares, Linux Standard Base define algunos programas que se encuentran comúnmente , pero no todas las distribuciones afirman que cumplen con el estándar, y algunos solo lo hacen si instala un paquete opcional de compatibilidad LSB. Como ejemplo de esto, algunos sistemas que he visto no vienen con lsb_releaseuna instalación predeterminada.

Además de esto, la lista de comandos estandarizados por POSIX podría ser útil.

Otro enfoque para su problema es empaquetar su script utilizando las herramientas de empaquetado de cada distribución (por ejemplo, RPM para Red Hat, DEB para Debian, etc.) y declarar una dependencia en cualquier otro programa o paquete que necesite. Es un poco de trabajo, pero significa que los usuarios verán un mensaje de error más amigable, que les dice no solo lo que falta, sino también qué paquetes necesitan instalar.

Más información:

Mikel
fuente
El paquete-y-agregar-dependencias -idea es genial, es mejor sumergirse en Autoconf sin :)
dudas
2
Gran respuesta, estoy de acuerdo con todo. Añadiría un paso de precaución adicional: tenga en cuenta las opciones específicas adicionales de la versión particular del comando que está utilizando ... podrían no funcionar en todas las versiones (esto ha sucedido en un proyecto en el que trabajé).
JoséNunoFerreira
¿Supongo que no hay un archivo de texto sin formato con una lista de estos comandos en alguna parte? pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html se puede convertir fácilmente en eso, pero todavía le faltan muchas cosas.
Dylan Nicholson
7

En sistemas Linux no integrados, generalmente puede contar con la mayoría de las utilidades GNU:

más la suite util-linux y la suite procps . Tenga en cuenta que /bin/shno siempre es bash, puede ser un shell con menos características, como una de las múltiples horquillas de cenizas .

La base estándar de Linux define un conjunto de utilidades comunes con características que se esperan en todos los sistemas conformes. También puede esperar la mayoría de las utilidades especificadas por POSIX . Una excepción notable es paxque no forma parte de la instalación predeterminada de muchas distribuciones.

Si desea simplificar las cosas, solicite la instalación de un lsb_releasepaquete. Muchas distribuciones tienen un paquete que atrae todas las dependencias requeridas por el LSB.

En un sistema integrado, todas las apuestas están desactivadas. Los sistemas Linux integrados generalmente ejecutan BusyBox , pero muchas utilidades y características son opcionales, por lo que hay muy poco de lo que puede estar seguro.

Gilles 'SO- deja de ser malvado'
fuente
6

Hay un conjunto de comandos, la mayoría, si no todas, las distribuciones de Linux, y para el caso, también proporcionarán las distribuciones de Unix. Estos son los comandos obligatorios especificados por el estándar POSIX .

La mayoría de los comandos que usted cita ( cd, mkdir, ls, echo, grep, sed, awk, etc.) son de la misma. La excepción es pingcomo WhiteWinterWolf comentó correctamente.

jlliagre
fuente
1
En realidad pingno es parte de POSIX ...
WhiteWinterWolf
La página de inicio de POSIX establece que se centran en garantizar la "portabilidad de la aplicación en el nivel del código fuente" , es decir. Según tengo entendido, están interesados ​​en la API del sistema, el comportamiento del sistema (incluido el shell) y los comandos que se pueden usar para configurar, compilar e instalar una aplicación y manejar su código fuente.
WhiteWinterWolf
Ellos no se preocupan por la creación de redes utilidades ( "Configuración del sistema y la disponibilidad de recursos" son explícitamente fuera de alcance), los comandos tan omnipresente como ping, ifconfig, telnet, etc, no son parte de esta norma (ni ningún otro que yo sepa, sólo compatibilidad de objetivos con "implementaciones históricas" con el mejor esfuerzo).
WhiteWinterWolf