Gostaria de saber quais são os comandos padrão disponíveis em todos os sistemas Linux.
Por exemplo, se você obtiver um debian / ubuntu / redhat / suse / arch / slackware etc, sempre encontrará comandos como:
cd, mkdir, ls, eco, grep, sed, awk, ping etc.
Eu sei que alguns dos comandos mencionados são embutidos no shell, mas outros não, mas eles ainda estão sempre lá (com base no meu conhecimento e experiência até agora).
Por outro lado, comandos como gawk, parted, traceroute e outros comandos bastante famosos não são instalados por padrão em diferentes distribuições Linux.
Fiz pesquisas na web diferentes, mas não encontrei uma resposta direta a isso.
O objetivo é que eu gostaria de criar um script de shell e ele deve fazer algumas verificações de integridade se os comandos usados no script estão disponíveis no sistema. Caso contrário, ele deverá solicitar ao usuário que instale os binários necessários.
Respostas:
Infelizmente, não há garantia de que algo esteja disponível.
No entanto, a maioria dos sistemas terá coreutils GNU . Isso por si só fornece cerca de 105 comandos. Você provavelmente pode confiar neles, a menos que seja um sistema incorporado, que pode usar o BusyBox .
Você provavelmente também pode confiar em bash , cron , GNU findutils , GNU grep , gzip , iproute2 , iputils , man-db , module-init-tools , net-tools , passwd ( passwd ou shadow ), procps , tar e utilitários. linux .
Observe que alguns programas podem ter algumas diferenças entre distribuições. Por exemplo
/usr/bin/awk
pode ser gawk ou mawk ./bin/sh
pode ser traço ou festança no modo POSIX . Em alguns sistemas mais antigos,/usr/bin/host
não possui a mesma sintaxe que a versão BIND ; portanto, é melhor usar dig .Se você estiver procurando por alguns padrões, o Linux Standard Base define alguns programas comumente encontrados , mas nem todas as distribuições afirmam estar em conformidade com o padrão, e algumas o fazem apenas se você instalar um pacote de compatibilidade LSB opcional. Como exemplo disso, alguns sistemas que eu vi não vêm
lsb_release
em uma instalação padrão.Além disso, a lista de comandos padronizados pelo POSIX pode ser útil.
Outra abordagem para o seu problema é empacotar seu script usando as ferramentas de empacotamento de cada distribuição (por exemplo, RPM para Red Hat, DEB para Debian, etc.) e declarar uma dependência de quaisquer outros programas ou pacotes necessários. É um pouco de trabalho, mas significa que os usuários verão uma mensagem de erro mais amigável, informando não apenas o que está faltando, mas quais pacotes eles precisam instalar.
Mais informações:
fonte
:)
Em sistemas Linux não incorporados, você geralmente pode contar com a maioria dos utilitários GNU:
find
exargs
, não necessariamentelocate
eupdatedb
)além da suíte util-linux e da procps . Observe que
/bin/sh
nem sempre o bash pode ser uma concha com menos recursos, como um dos vários garfos de cinza .O Linux Standard Base define um conjunto de utilitários comuns com recursos esperados em todos os sistemas em conformidade. Você também pode esperar a maioria dos utilitários especificados pelo POSIX . Uma exceção notável é
pax
que não faz parte da instalação padrão de muitas distribuições.Se você quiser simplificar, solicite a instalação de um
lsb_release
pacote. Muitas distribuições possuem um pacote que extrai todas as dependências exigidas pelo LSB.Em um sistema incorporado, todas as apostas estão desativadas. Os sistemas Linux embarcados geralmente executam o BusyBox , mas muitos utilitários e recursos são opcionais, portanto, há muito pouco que você pode ter certeza de obter.
fonte
Existe um conjunto de comandos para a maioria, senão todas as distribuições Linux, e, nesse caso, também as distribuições Unix fornecerão. Estes são os comandos obrigatórios especificados pelo padrão POSIX .
A maioria dos comandos que você cita (
cd
,mkdir
,ls
,echo
,grep
,sed
,awk
, etc.) são da mesma. A exceção éping
como WhiteWinterWolf comentou corretamente.fonte
ping
não faz parte do POSIX ...ping
,ifconfig
,telnet
, etc. não fazem parte desta norma (nem qualquer outro AFAIK, eles só vise a compatibilidade com "implementações históricas" com base no melhor esforço).