Como o PATH funciona no Bash

How Does Path Work Bash



Quando você está digitando um comando no terminal Linux, geralmente está chamando um programa para fazer um determinado trabalho, por exemplo, ls , CD , rm , mkdir , etc. Todos esses programas estão localizados em algum lugar no sistema de arquivos, certo? Como o bash sabe onde esses programas estão?

Aí entram as variáveis ​​de ambiente em jogo, especialmente a variável PATH. Esta variável é responsável por dizer ao bash onde procurar esses programas. Vamos verificar como o PATH funciona e como visualizar / modificar o PATH.







Variável de ambiente e $ PATH

Na terminologia do shell, o ambiente é uma área que o shell constrói toda vez que inicia uma sessão. Para gerenciar o ambiente, existem variáveis ​​de ambiente que denotam diferentes partes do ambiente. O valor da variável pode ser string, localização do diretório, valor ou outros.



PATH é uma variável de ambiente que rastreia certos diretórios. Por padrão, a variável PATH contém os seguintes locais.



  • / usr / bin
  • / usr / sbin
  • / usr / local / bin
  • / usr / local / sbin
  • /sou
  • / sbin
  • / snap / bin (se o Snap estiver instalado)

Quer ver quais diretórios estão registrados no PATH? Abra um terminal e execute o seguinte comando.





$jogou fora $ PATH

Aqui, o sinal $ denota uma variável. o jogou fora comando imprime o valor da variável PATH.



Agora, por que essa variável de ambiente específica é tão importante? É porque o shell e o sistema como um todo o tratam. A variável PATH armazena onde os executáveis ​​podem ser encontrados. Sempre que qualquer comando é executado, o shell procura os diretórios PATH do arquivo executável de destino e o executa.

Por exemplo, vamos testar com o jogou fora comando. Aqui, estou executando um comando echo.

$jogou foraOlá Mundo!

Onde está o arquivo executável de jogou fora ? Execute o próximo comando para descobrir.

$que jogou fora

Como podemos ver, o jogou fora executável está localizado em / usr / bin / echo. Onde fica qual? Vamos descobrir.

$que que

Ele também está localizado em / usr / bin / which. A maioria das ferramentas de comando está localizada no diretório / usr / bin. Aqui, o bash está consultando o PATH para os locais para pesquisar os executáveis ​​de um comando.

Modificando PATH

Antes de modificarmos o valor de PATH, é importante entender sua estrutura. Execute o comando novamente para verificar o valor de PATH.

$jogou fora $ PATH

Observe que cada um dos diretórios é separado por um sinal:.

Adicionando diretório ao PATH

Para adicionar um diretório personalizado ao PATH, usaremos a ajuda do arquivo bashrc. É um script bash especial que carrega o bash toda vez que uma nova sessão bash é iniciada. Observe que o arquivo bashrc é exclusivo para cada usuário no sistema Linux.

Abra o arquivo bashrc em um editor de texto. Se o arquivo bashrc ainda não estiver presente, o editor o criará automaticamente.

$vim~/.bashrc

Aqui, é o bashrc padrão que vem com o Ubuntu. Vá para o último arquivo (se existir) e adicione a seguinte linha.

$exportar CAMINHO='$ PATH: / '

Aqui, o novo valor da variável PATH será a variável antiga junto com o novo diretório que acabamos de adicionar.

Salve o arquivo e diga ao bash para recarregá-lo.

$fonte~/.bashrc

Vamos verificar se o novo caminho foi adicionado com sucesso.

$jogou fora $ PATH

Voila! PATH atualizado com sucesso! Agora, o bash também pesquisará o novo caminho para executáveis. Eu já tenho um script demo.sh no desktop. Vamos ver se o bash pode chamá-lo sem especificar o local exato.

$demo.sh

Sim, o bash pode chamá-lo diretamente sem nenhum problema.

Removendo diretório de PATH

Não há uma maneira direta de adicionar / remover diretórios do PATH. Deixe-me explicar.

O valor de PATH é realmente fixo. Então, que tal o truque do bashrc? Bashrc é um script bash que carrega o bash toda vez que inicia uma sessão. No bashrc, acabamos de declarar que o novo valor de PATH será seu valor padrão e o diretório definido pelo usuário. Agora, toda vez que o bash carrega, ele vê que o bashrc está dizendo para atribuir um novo valor de PATH e é isso que ele faz.

Da mesma forma, se quisermos remover um diretório de PATH, temos que reatribuir um valor diferente de PATH no bashrc para que toda vez que o bash iniciar, ele use o valor modificado.

Vamos dar uma olhada neste exemplo. Desejo remover o diretório ~ / Desktop do PATH.

$jogou fora $ PATH | sed -E 's /: ~ / Desktop $ //'

Se o diretório fosse / home / wrong / dir, o comando teria a seguinte aparência.

$jogou fora $ PATH | sed -E 's /: / home / wrong / dir $ //'

Aqui, a parte interessante é a ferramenta sed. Saiba mais sobre sed aqui e aqui . Resumindo, usando o sed, estamos modificando a saída do jogou fora comando. Agora, podemos usar essa saída modificada para alterar o valor de PATH.

Abra o bashrc em um editor de texto e adicione as seguintes linhas. Estou intencionalmente mantendo as linhas anteriores para provar que está funcionando.

$exportar CAMINHO='$ (echo $ PATH | sed -e 's /: ~ / Desktop $ //')'

Como alternativa, você também pode definir manualmente o valor de PATH. É um processo laborioso, mas mais direto e simples.

$exportar CAMINHO=/usr/local/sbin:/usr/local/sou:/usr/sbin:/usr/sou:/sbin:/sou:
/usr/jogos:/usr/local/jogos:/foto/sou

Aqui, o valor do comando será atribuído a PATH. Salve o arquivo e recarregue o bashrc.

$fonte~/.bashrc

Vamos verificar o resultado.

$jogou fora $ PATH

O valor PATH é atualizado!

Pensamentos finais

No bash, a variável PATH é importante. Qualquer programa executado através da sessão bash herda a variável, por isso é importante que PATH inclua apenas os diretórios necessários. Adicionar mais diretório apenas adicionará redundância ao sistema.

Para ver todas as variáveis ​​de ambiente do bash, execute este comando. A primeira parte do comando retornará todas as variáveis ​​de ambiente e a segunda parte classificará a saída em ordem crescente.

$env | ordenar

Quer apimentar sua experiência bash? Os apelidos de Bash oferecem uma maneira única de acelerar e apimentar as coisas. Saiba mais sobre aliases de bash .

Aproveitar!