Quais são os comandos padrão disponíveis em todas as distribuições baseadas em Linux?

39

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.

Vangelis Tasoulas
fonte
5
Apenas uma dica: " deve fazer algumas verificações de integridade se os comandos usados ​​no script estão disponíveis no sistema " soa muito como o Autoconf .
sr_
Definitivamente um caso de auto-configuração ... ou talvez seu primo mais científico, prometa a teoria .
Curinga
@Wildcard, acredito que qualquer sistema de gerenciamento de configuração seria um exagero para esse caso, a menos que você deseje verificações contínuas de integridade e autocorreção do sistema, mesmo após a instalação inicial.
Vangelis Tasoulas 04/04
@VangelisTasoulas, acho que não. Em uma configuração de usuário único, como um computador doméstico, por que você precisaria criar um script? O gerenciamento de configurações seria um exagero - mas também uma verificação por script versus manual. Em um cenário em que você tem várias caixas nas quais deseja garantir consistência, o script não seria um exagero - mas também não o gerenciamento de configurações. Ou você é um desenvolvedor de software que deseja executar verificações de sanidade durante a instalação do pacote para o seu produto? Depende do seu cenário, sim, mas se você deseja gerenciar sua configuração, uma ferramenta de gerenciamento de configuração não é um exagero. ;)
Caractere curinga
1
@Wildcard, quando escrevi esta pergunta, estava pensando sobre o último: só quero executar verificações de sanidade durante a instalação em uma única máquina, para garantir que o software esteja funcionando corretamente. Obviamente, se você deseja gerenciar vários servidores e lidar com implantações distribuídas etc., concordo que o gerenciamento de configuração é o caminho a longo prazo.
Vangelis Tasoulas 04/04

Respostas:

41

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/awkpode ser gawk ou mawk . /bin/shpode ser traço ou festança no modo POSIX . Em alguns sistemas mais antigos, /usr/bin/hostnã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_releaseem 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:

Mikel
fonte
A idéia de pacote e adição de dependências- é ótima, supera mergulhar no Autoconf de mãos dadas:)
sr_
2
ótima resposta, eu concordo com tudo. eu acrescentaria uma etapa extra de cuidado: leve em consideração as opções específicas adicionais da versão específica do comando que você está usando ... elas podem não funcionar em todas as versões (isso aconteceu em um projeto em que trabalhei).
JoséNunoFerreira
Suponho que não exista um arquivo de texto simples com uma lista desses comandos em qualquer lugar? pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html pode relativamente ser facilmente convertido nisso, mas ainda falta muitas coisas.
Dylan Nicholson
7

Em sistemas Linux não incorporados, você geralmente pode contar com a maioria dos utilitários GNU:

além da suíte util-linux e da procps . Observe que /bin/shnem 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 é paxque não faz parte da instalação padrão de muitas distribuições.

Se você quiser simplificar, solicite a instalação de um lsb_releasepacote. 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.

Gilles 'SO- parar de ser mau'
fonte
6

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 é pingcomo WhiteWinterWolf comentou corretamente.

jlliagre
fonte
1
Na verdade, pingnão faz parte do POSIX ...
WhiteWinterWolf
A página inicial do POSIX afirma que eles se concentram em garantir a "portabilidade do aplicativo no nível do código fonte" , ie. no meu entendimento, eles estão interessados ​​na API do sistema, no comportamento do sistema (incluindo shell) e nos comandos que podem ser usados ​​para configurar, compilar e instalar um aplicativo e manipular seu código-fonte.
WhiteWinterWolf 2/17
Eles não se preocupam com utilitários de rede ( "Sistema de configuração e disponibilidade de recursos" são explicitamente fora do escopo), comandos tão onipresente como 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).
WhiteWinterWolf 2/17