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

Um laptop Linux com linhas de texto verde em uma janela de terminal.
Fatmawati Achmad Zaenuri / Shutterstock

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

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

Os comandos "type clear" e "type cd" em uma janela de terminal.

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

O comando "echo $ PATH" em uma janela de terminal.

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.

Recomendado:  Como criar uma lista de distribuição no Outlook

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 comando "which rf" em uma janela de terminal.

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 comando "rf" em uma janela de terminal.

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

O comando "./work/rf" em uma janela de terminal.

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.

Recomendado:  Como definir um papel de parede diferente para sua tela de bloqueio no Android Nougat

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

O comando "export PATH = / home / dave / work: $ PATH" em uma janela de terminal.

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

O comando "echo $ PATH" em uma janela de terminal.

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

O comando "which rf" em uma janela de terminal.

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

rf

O comando "rf" em uma janela de terminal.

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.

Recomendado:  8K TV chegou. Aqui está o que você precisa saber

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 comando "gedit .bashrc" em uma janela de terminal.

O gediteditor é  aberto com o .bashrcarquivo carregado.

O editor gedit 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 dotcomando para ler o .bashrcarquivo, da seguinte maneira:

. .bashrc

Em seguida, digite o seguinte echo comando para verificar o caminho:

echo $ PATH

Os comandos ". .Bashrc" e "echo $ PATH" em uma janela de terminal.

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 comando "gedit .profile" em uma janela de terminal.

O gediteditor é iniciado com o .profilearquivo carregado.

O editor gedit com o arquivo ".profile" 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.

O editor gedit com o arquivo "/ etc / profile" carregado.

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.

O comando "echo $ PATH" com dois pontos destacados em uma janela de terminal.

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.