$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 faz e como você pode ajustá-lo.
Índice
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, canais , 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 fornecidos.
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 $PATH
variável de ambiente 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 type
comando conforme mostrado abaixo:
tipo claro
digite cd
Isso nos diz que clear
é um arquivo binário e que o primeiro encontrado no caminho está localizado em /usr/bin
. Você pode ter mais de uma versão do clear
instalado em 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 echo
comando e imprimir o valor mantido na $PATH
variável:
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 do qual foi lançado na janela do terminal. Ele está localizado em /usr/local/bin
. Também temos uma versão mais recente no /dave/work
diretório.
Digitamos o seguinte which
comando para nos mostrar qual versão do nosso programa o shell encontrará e usará:
qual 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 de rf
corre 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 rf
que queremos executar, ele usa a versão 1.1. Se preferirmos esta versão, podemos copiá-la para o /usr/local/bin
diretório 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 ativo.
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, fazemos com que o shell encontre nossa versão. E essa mudança só nos afetará – outros ainda usarão a versão de rf
in /usr/local/bin
.
Adicionando um diretório ao seu $ PATH
Você pode usar o export
comando para adicionar um diretório ao $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ê deve ter certeza de pesquisar primeiro em seu diretório, antes /usr/local/bin
.
Isso é fácil de fazer. Para nosso exemplo, digitamos o seguinte para adicionar nosso diretório ao início do caminho, de modo 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, em seguida, todo o caminho atual.
O primeiro PATH
não tem cifrão ( $
). Definimos o valor para PATH
. O final $PATH
tem um cifrão porque estamos nos referindo ao conteúdo armazenado na PATH
variável. Além disso, observe os dois pontos ( :
) entre o novo diretório e o $PATH
nome da variável.
Vamos ver como é o caminho agora:
echo $ PATH
Nosso /home/dave/work
diretório é adicionado ao início do caminho. Os dois pontos que fornecemos o separam do resto do caminho.
Digitamos o seguinte para verificar se nossa versão do rf
é a primeira encontrada:
qual rf
A prova no pudim está funcionando rf
, conforme mostrado abaixo:
rf
O shell encontra a versão 1.1 e a executa a partir /home/dave/work
.
Para adicionar nosso diretório ao final do caminho, basta movê-lo para o final do comando, assim:
exportar PATH = $ PATH: / home / dave / work
Tornando as mudanças permanentes
Como disse Beth Brooke-Marciniak : “O sucesso é bom, mas o sucesso é passageiro”. No momento em que você fecha a janela do terminal, todas as alterações feitas $PATH
nele desaparecem. Para torná-los permanentes, você deve colocar seu export
comando em um arquivo de configuração.
Quando você coloca o export
comando em seu .bashrc
arquivo, ele define o caminho cada vez que você abre uma janela de terminal. Ao contrário das SSH
sessões , para as quais você precisa fazer login, são chamadas de sessões “interativas”.
No passado, você colocaria o export
comando em seu .profile
arquivo para definir o caminho para as sessões de terminal de login.
No entanto, descobrimos que se colocarmos o export
comando nos arquivos .bashrc
ou .profile
, ele definirá corretamente o caminho para as sessões interativas e de log no terminal. 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 /home
diretório para editar o .bashrc
arquivo:
gedit .bashrc
O gedit
editor é aberto com o .bashrc
arquivo 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 dot
comando para ler o .bashrc
arquivo, da seguinte maneira:
. .bashrc
Em seguida, digite o seguinte echo
comando para verificar o caminho:
echo $ PATH
Isso adiciona o /home/dave/work
diretório ao início do caminho.
O processo para adicionar o comando ao .profile
arquivo é o mesmo. Digite o seguinte comando:
gedit .profile
O gedit
editor é iniciado com o .profile
arquivo carregado.
Adicione o export
comando ao final do arquivo e salve-o. Fechar e abrir uma nova janela do terminal não é suficiente para forçar a releitura do .profile
arquivo. Para que as novas configurações tenham efeito, você deve fazer logout e login novamente ou usar o dot
comando conforme mostrado abaixo:
. .perfil
Definindo o caminho para todos
Para definir o caminho para todos que usam o sistema, você pode editar o /etc/profile
arquivo.
Você precisará usar o sudo
seguinte:
sudo gedit / etc / profile
Quando o gedit
editor for iniciado, 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 iniciais “ :
” ao caminho, conforme mostrado abaixo.
Se você fizer isso, isso pesquisará primeiro o diretório atual, 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 unzip
executável real . Isso aconteceria porque o shell procuraria primeiro no diretório atual.
Portanto, sempre tenha cuidado ao digitar seus export
comandos. Use echo
$ PATH para revisá-los e certifique-se de que são do jeito que você deseja.