No Linux, os diferentes locais geralmente, quando bem mantidos, espelham alguma lógica. Por exemplo:
-
/bin
contém as ferramentas mais básicas (programas) -
/sbin
contém os programas de administração mais básicos
Ambos contêm os comandos elementares usados pela inicialização e solução de problemas fundamentais. E aqui você vê a primeira diferença. Alguns programas não devem ser usados por usuários comuns.
Em seguida, dê uma olhada em /usr/bin
. Aqui você deve encontrar uma maior escolha de comandos (programas), geralmente mais de 1000 deles. Eles são ferramentas padrão, mas não tão essenciais quanto os de /bin
e /sbin
.
/usr/bin
contém os comandos, enquanto os arquivos de configuração residem em outro lugar. Isso separa as entidades funcionais (programas) e suas configurações e outros arquivos, mas em termos de funcionalidade do usuário, isso é útil, pois ter os comandos não misturados com qualquer outra coisa permite o uso simples da variável PATH
apontando para o executáveis. Também introduz clareza. O que quer que seja deve ser executável.
Veja meu PATH
$ echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/home/tomas/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games
Existem exatamente seis locais contendo os comandos que eu posso chamar diretamente (ou seja, não por seus caminhos, mas pelos nomes de seus executáveis).
-
/home/tomas/bin
é meu diretório privado na minha pasta pessoal para meus executáveis privados. -
/usr/local/bin
explicarei separadamente abaixo. -
/usr/bin
é descrito acima. -
/bin
também é descrito acima. -
/usr/local/games
é uma combinação de/usr/local
(a ser explicado abaixo) e jogos -
/usr/games
são jogos. Para não serem misturados com executáveis de utilitário, eles têm seus locais separados.
Agora para /usr/local/bin
. Este é um pouco escorregadio, e já foi explicado aqui: O que é / usr / local / bin? . Para entendê-lo, você precisa saber que a pasta /usr
pode ser compartilhada por várias máquinas e montada a partir de um local de rede. Os comandos não são necessários na inicialização, como observado anteriormente, ao contrário dos que estão em /bin
, portanto, o local pode ser montado em estágios posteriores do processo de inicialização. Ele também pode ser montado de maneira somente leitura. /usr/local/bin
, por outro lado, é para os programas instalados localmente e precisa ser gravável. Assim, enquanto muitas máquinas de rede podem compartilhar o diretório geral /usr
, cada uma delas terá seu próprio /usr/local
montado dentro da comum /usr
.
Por fim, dê uma olhada no PATH
do meu usuário root:
# echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
Ele contém estes:
-
/usr/local/sbin
, que contém os comandos admin do tipo/usr/local
-
/usr/local/bin
, que são os mesmos que o usuário comum pode usar. Novamente, o tipo deles pode ser descrito como/usr/local
. -
/usr/sbin
são os utilitários de administração não essenciais. -
/usr/bin
são a administração não essencial e utilitários de usuário regulares. -
/sbin
são as ferramentas administrativas essenciais. -
/bin
são as ferramentas essenciais do administrador e do usuário regular.