Por que tantos programas vivem no PATH?


10

Uma coisa que me intriga no Linux para desktop, pelo menos, é que quase tudo está no meu caminho. Por tudo, quero dizer todos os aplicativos de desktop, incluindo coisas como gnome-character-map e glchess. Eles não têm interfaces de linha de comando, por isso não consigo pensar em um caso em que eu os lançasse regularmente a partir de um terminal - e, nesse caso improvável, não consigo me sentir incomodado por precisar digitar seu código completo. caminhos. Parece desordem, mas talvez haja uma boa razão.

Então, por que isso acontece? Existe algum impacto notável no desempenho ou na manutenção?

Respostas:


14

Todos os comandos que um usuário pode querer executar estão no PATH. É para isso que serve. Isso inclui comandos que você executa diretamente, comandos que outras pessoas executam diretamente e comandos que você ou outras pessoas executam indiretamente porque são invocados por outros comandos. Isso não se limita aos comandos executados a partir de um terminal: os comandos executados a partir de uma GUI também são pesquisados ​​no caminho de busca de comandos (novamente, é para isso).

Precisando digitar o caminho completo seria terrível: você precisaria descobrir qual é o caminho completo! Você precisaria acompanhar se está dentro /usr/bin(que contém a maioria dos programas fornecidos com o sistema operacional) ou dentro /usr/local/bin(que contém programas instalados manualmente pelo administrador, bem como programas que não fazem parte do SO principal em alguns variantes unix) ou em algum outro diretório específico do sistema ou em algum lugar do diretório inicial do usuário.

É difícil responder sobre o "impacto no desempenho ou na manutenção" porque você não diz com o que está comparando. Se você está comparando com a necessidade de digitar o caminho completo em qualquer lugar, esse é um pesadelo para a manutenção: se você mudar de local um programa ou se quiser instalar uma versão mais recente do que a que veio com o sistema operacional ou foi instalada por um administrador de sistema, você tem que substituir esse caminho completo em todos os lugares. O impacto no desempenho de procurar o nome em alguns diretórios é insignificante.

Se você está comparando com o Windows, é ainda pior: alguns programas adicionam não apenas o executável, mas também todo tipo de lixo ao PATH, e você acaba com uma PATHvariável de uma milha que ainda não inclui todos os programas, porque muitos programas não se adicionam ao PATH do sistema quando você os instala.


Isso parece bastante racional. Obrigado pela explicação! A parte de substituir um programa faz muito sentido. Eu não tinha pensado nisso :) A parte que mais me impressiona é que eu gosto de ter espaços de nomes pequenos e descritivos quando penso em programação, enquanto aqui tudo fica no mesmo espaço de nomes global (e, quando o fazemos) observe os caminhos completos, em locais bastante indefinidos, como * / bin). Eu acho que eles são coisas bem diferentes, no entanto.
Dylan McCall

4

A variável PATH contém uma lista de caminhos de diretório. Quando o usuário digita um comando sem fornecer o caminho completo, esta lista é verificada se contém um caminho que leva ao comando. Não há nada inerentemente terminal ou linha de comando específico sobre isso.

Além disso, também não há nada específico sobre o Desktop Linux. O PATH do meu sistema XP contém % SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem, que provavelmente cobre a maioria dos binários do Windows.

Os diretórios em PATH são pesquisados ​​na ordem especificada e param assim que uma correspondência é encontrada. Os diretórios do sistema geralmente estão no começo para dar a eles a maior precedência. Os usuários devem anexar caminhos de pesquisa personalizados no final.

Quanto ao desempenho: a maioria dos shells modernos armazena em cache o conteúdo do PATH para que eles não precisem varrer o disco toda vez que o usuário digitar um comando.


O PATH do Windows abrange a maioria dos binários fornecidos com o Windows, mas os aplicativos comuns que você instala normalmente não são encontrados no PATH. (Bem, aplicativos com um componente de linha de comando irá adicionar-se a PATH, mas GUI-únicos normalmente não o fazem.)
CJM

Legal, eu sempre contemplei a ordem e seu significado. Que tal uma regra de ouro? Eu tenho (quase) todas as combinações de usr, local, bin, e sbin(excluindo o meu diretório home do usuário).
Emanuel Berg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.