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.
Respuestas:
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/awk
podría ser gawk o mawk ./bin/sh
puede ser dash o bash en modo POSIX . En algunos sistemas más antiguos,/usr/bin/host
no 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_release
una 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:
fuente
:)
En sistemas Linux no integrados, generalmente puede contar con la mayoría de las utilidades GNU:
find
yxargs
no necesariamentelocate
yupdatedb
)más la suite util-linux y la suite procps . Tenga en cuenta que
/bin/sh
no 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
pax
que no forma parte de la instalación predeterminada de muchas distribuciones.Si desea simplificar las cosas, solicite la instalación de un
lsb_release
paquete. 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.
fuente
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 esping
como WhiteWinterWolf comentó correctamente.fuente
ping
no es parte de POSIX ...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).