
$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 $PATHvariá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 typecomando 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 clearinstalado 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 echocomando e imprimir o valor mantido na $PATHvariá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, rfimprime 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/workdiretório.
Digitamos o seguinte whichcomando 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 rfcorre 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 rfque queremos executar, ele usa a versão 1.1. Se preferirmos esta versão, podemos copiá-la para o /usr/local/bindiretó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 rfin /usr/local/bin.
Adicionando um diretório ao seu $ PATH
Você pode usar o exportcomando 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 $PATHpara ser igual ao diretório que estamos adicionando /home/dave/work, e, em seguida, todo o caminho atual.
O primeiro PATHnão tem cifrão ( $). Definimos o valor para PATH. O final $PATHtem um cifrão porque estamos nos referindo ao conteúdo armazenado na PATHvariável. Além disso, observe os dois pontos ( :) entre o novo diretório e o $PATHnome da variável.
Vamos ver como é o caminho agora:
echo $ PATH

Nosso /home/dave/workdiretó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 exportcomando em um arquivo de configuração.
Quando você coloca o exportcomando em seu .bashrcarquivo, ele define o caminho cada vez que você abre uma janela de terminal. Ao contrário das SSHsessões , para as quais você precisa fazer login, são chamadas de sessões “interativas”.
No passado, você colocaria o exportcomando em seu .profilearquivo para definir o caminho para as sessões de terminal de login.
No entanto, descobrimos que se colocarmos o exportcomando nos arquivos .bashrcou .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 /homediretório para editar o .bashrcarquivo:
gedit .bashrc

O gediteditor é aberto com o .bashrcarquivo 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 dotcomando para ler o .bashrcarquivo, da seguinte maneira:
. .bashrc
Em seguida, digite o seguinte echo comando para verificar o caminho:
echo $ PATH

Isso adiciona o /home/dave/workdiretório ao início do caminho.
O processo para adicionar o comando ao .profilearquivo é o mesmo. Digite o seguinte comando:
gedit .profile

O gediteditor é iniciado com o .profilearquivo carregado.

Adicione o exportcomando ao final do arquivo e salve-o. Fechar e abrir uma nova janela do terminal não é suficiente para forçar a releitura do .profilearquivo. Para que as novas configurações tenham efeito, você deve fazer logout e login novamente ou usar o dotcomando conforme mostrado abaixo:
. .perfil
Definindo o caminho para todos
Para definir o caminho para todos que usam o sistema, você pode editar o /etc/profilearquivo.
Você precisará usar o sudoseguinte:
sudo gedit / etc / profile
Quando o gediteditor 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 unzipexecutável real . Isso aconteceria porque o shell procuraria primeiro no diretório atual.
Portanto, sempre tenha cuidado ao digitar seus exportcomandos. Use echo$ PATH para revisá-los e certifique-se de que são do jeito que você deseja.