$ PATH é um dos manipuladores silenciosos no fundo do seu computador Linux. Isso afeta discretamente a experiência do usuário, mas não há nada de obscuro nisso. Explicaremos o que ele faz e como você pode ajustá-lo.
últimas postagens
O que é $ PATH no Linux e como funciona?
Quando você digita um comando em uma janela de terminal e pressiona Enter, inicia muitas atividades antes mesmo de seu comando ser executado.
Bash é o shell padrão na maioria das distribuições Linux. Ele interpreta a linha de texto que você inseriu e identifica os nomes dos comandos misturados com os parâmetros, tubos, redirecionamentos, e tudo o mais que estiver lá. Em seguida, ele localiza os binários executáveis para esses comandos e os inicia com os parâmetros que você forneceu.
A primeira etapa que o shell executa para localizar o executável é identificar se um binário está envolvido. Se o comando que você usa estiver dentro do próprio shell (um “Shell embutido”) nenhuma pesquisa adicional é necessária.
Os builtins do shell são os mais fáceis de encontrar porque são parte integrante do shell. É como tê-los em um cinto de ferramentas – eles estão sempre com você.
Se você precisar de uma de suas outras ferramentas, no entanto, terá que vasculhar a oficina para encontrá-la. Está na sua bancada de trabalho ou em um cabide de parede? É isso que a variável de ambiente $ PATH faz. Ele contém uma lista de locais em que o shell pesquisa e a ordem em que serão pesquisados.
Se você quiser ver se um comando é um shell embutido, um alias, uma função ou um binário autônomo mv / work / unfile, você pode usar o comando type conforme mostrado abaixo:
type clear
type cd
Isso nos diz que o clear é um arquivo binário e o primeiro encontrado no caminho está localizado em / usr / bin. Você pode ter mais de uma versão do clear instalada no seu computador, mas esta é a que o shell tentará usar.
Sem surpresa, cd é um shell embutido.
Listando seu $ PATH
É fácil ver o que está em seu caminho. Basta digitar o seguinte para usar o comando echo e imprimir o valor mantido na variável $ PATH:
echo $PATH
A saída é uma lista de locais do sistema de arquivos delimitados por dois pontos (:). O shell pesquisa o caminho da esquerda para a direita, verificando cada local do sistema de arquivos em busca de um executável correspondente para executar seu comando.
Podemos percorrer a lista para ver os locais do sistema de arquivos que serão pesquisados e a ordem em que serão pesquisados:
/ usr / local / sbin
/ usr / local / bin
/ usr / sbin
/ usr / bin
/ sbin
/ bin
/ usr / games
/ usr / local / games
/ snap / bin
Algo que pode não ser imediatamente óbvio é que a pesquisa não começa no diretório de trabalho atual. Em vez disso, ele percorre os diretórios listados e apenas os diretórios listados.
Se o diretório de trabalho atual não estiver em seu caminho, ele não será pesquisado. Além disso, se você tiver comandos armazenados em diretórios que não estão no caminho, o shell não os encontrará.
Para demonstrar isso, criamos um pequeno programa chamado rf. Quando executado, rf imprime o nome do diretório de onde foi lançado na janela do terminal. Ele está localizado em / usr / local / bin. Também temos uma versão mais recente no diretório / dave / work.
Nós digitamos o seguinte qual comando para nos mostrar qual versão do nosso programa o shell encontrará e usará:
which rf
O shell relata que a versão encontrada é aquela no diretório que está no caminho.
Nós digitamos o seguinte para ativá-lo:
rf
A versão 1.0 do rf é executada e confirma que nossas expectativas estavam corretas. A versão encontrada e executada está localizada em / usr / local / bin.
Para executar qualquer outra versão do rf neste computador, teremos que usar o caminho para o executável na linha de comando, conforme mostrado abaixo:
./work/rf
Agora que informamos ao shell onde encontrar a versão do rf que queremos executar, ele usa a versão 1.1. Se preferirmos esta versão, podemos copiá-la para o diretório / usr / local / bin e sobrescrever a antiga.
Digamos que estejamos desenvolvendo uma nova versão do rf. Precisamos executá-lo com frequência à medida que o desenvolvemos e testamos, mas não queremos copiar uma compilação de desenvolvimento não lançada para o ambiente de produção.
Ou talvez tenhamos baixado uma nova versão do rf e queremos fazer alguns testes de verificação antes de disponibilizá-la publicamente.
Se adicionarmos nosso diretório de trabalho ao caminho, faremos o shell encontrar nossa versão. E essa mudança só nos afetará – outros ainda usarão a versão do rf em / usr / local / bin.
Adicionando um diretório ao seu $ PATH
Você pode usar o comando export para adicione um diretório para o $ PATH. O diretório é então incluído na lista de locais do sistema de arquivos pesquisados pelo shell. Quando o shell encontra um executável correspondente, ele para de pesquisar, portanto, você deseja ter certeza de que pesquisa seu diretório primeiro, antes de / usr / local / bin.
Isso é fácil de fazer. Para nosso exemplo, digitamos o seguinte para adicionar nosso diretório ao início do caminho para que seja o primeiro local pesquisado:
export PATH=/home/dave/work:$PATH
Este comando define $ PATH para ser igual ao diretório que estamos adicionando, / home / dave / work, e então todo o caminho atual.
O primeiro PATH não tem cifrão ($). Definimos o valor para PATH. O $ PATH final tem um cifrão porque estamos nos referindo ao conteúdo armazenado na variável PATH. Além disso, observe os dois pontos (:) entre o novo diretório e o nome da variável $ PATH.
Vamos ver como é o caminho agora:
echo $PATH
Nosso diretório / home / dave / work é adicionado ao início do caminho. Os dois pontos que fornecemos separam o resto do caminho.
Nós digitamos o seguinte para verificar se nossa versão de rf é a primeira encontrada:
which rf
A prova no pudim está funcionando rf, conforme mostrado abaixo:
rf
O shell encontra a versão 1.1 e a executa em / home / dave / work.
Para adicionar nosso diretório ao final do caminho, basta movê-lo para o final do comando, assim:
export PATH=$PATH:/home/dave/work
Tornando as mudanças permanentes
Como Beth Brooke-Marciniak disse: “O sucesso é bom, mas o sucesso é passageiro.” No momento em que você fecha a janela do terminal, todas as alterações feitas no $ PATH desaparecem. Para torná-los permanentes, você deve colocar seu comando de exportação em um arquivo de configuração.
Quando você coloca o comando export em seu arquivo .bashrc, ele define o caminho cada vez que você abre uma janela de terminal. diferente Sessões SSH, para as quais você deve efetuar login, são chamadas de sessões “interativas”.
No passado, você colocaria o comando export em seu arquivo .profile para definir o caminho para log nas sessões de terminal.
No entanto, descobrimos que se colocarmos o comando export nos arquivos .bashrc ou .profile, ele definirá corretamente o caminho para as sessões de terminal interativas e de log. Sua experiência pode ser diferente. Para lidar com todas as eventualidades, mostraremos como fazer em ambos os arquivos.
Use o seguinte comando em seu diretório / home para editar o arquivo .bashrc:
gedit .bashrc
O editor gedit é aberto com o arquivo .bashrc carregado.
Role até o final do arquivo e adicione o seguinte comando de exportação que usamos anteriormente:
export PATH=/home/dave/work:$PATH
Salve o arquivo. Em seguida, feche e reabra a janela do terminal ou use o comando dot para ler o arquivo .bashrc, da seguinte maneira:
. .bashrc
Em seguida, digite o seguinte comando echo para verificar o caminho:
echo $PATH
Isso adiciona o diretório / home / dave / work ao início do caminho.
O processo para adicionar o comando ao arquivo .profile é o mesmo. Digite o seguinte comando:
gedit .profile
O editor gedit é iniciado com o arquivo .profile carregado.
Adicione o comando de exportação ao final do arquivo e salve-o. Fechar e abrir uma nova janela de terminal não é suficiente para forçar a releitura do arquivo .profile. Para que as novas configurações entrem em vigor, você deve fazer logout e login novamente ou usar o comando de ponto conforme mostrado abaixo:
. .profile
Definindo o caminho para todos
Para definir o caminho para todos que usam o sistema, você pode editar o arquivo / etc / profile.
Você precisará usar o sudo, da seguinte maneira:
sudo gedit /etc/profile
Quando o editor gedit iniciar, adicione o comando de exportação ao final do arquivo.
Salve e feche o arquivo. As alterações terão efeito para outras pessoas na próxima vez que fizerem login.
Uma nota sobre segurança
Certifique-se de não adicionar acidentalmente dois pontos “:” à esquerda ao caminho, conforme mostrado abaixo.
Se você fizer isso, o diretório atual será pesquisado primeiro, o que apresenta um risco de segurança. Digamos que você baixou um arquivo compactado e o descompactou em um diretório. Você olha os arquivos e vê outro arquivo compactado. Você chama unzip mais uma vez para extrair esse arquivo.
Se o primeiro arquivo continha um arquivo executável chamado unzip, que era um executável malicioso, você acidentalmente o acionou em vez do executável de descompactação real. Isso aconteceria porque o shell procuraria primeiro no diretório atual.
Portanto, sempre tenha cuidado ao digitar seus comandos de exportação. Use echo $ PATH para revisá-los e certifique-se de que são do jeito que você deseja.