Como adicionar um diretório ao seu $ PATH no Linux

$ 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.

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

O

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

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

O

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

O

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

O

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

O

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

O

A prova no pudim está funcionando rf, conforme mostrado abaixo:

rf

O

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

O editor gedit é aberto com o arquivo .bashrc carregado.

O editor gedit com o

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

O

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

O editor gedit é iniciado com o arquivo .profile carregado.

O editor gedit com o

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.

O editor gedit com o

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.

O

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.