Tutoriais

Para que serve e como configurar a $PATH no Linux

Todo sistema é recheado de “variáveis de ambiente”, valores que podem ser consultados e alterados para dar suporte a diversos tipos de execução. No Linux, a variável PATH é uma das mais importantes, pois serve para achar os principais arquivos executáveis. Prometo que depois deste artigo você nunca mais vai perder seu caminho. 👀

A variável PATH no Linux contém uma série de diretórios em que o terminal procura pela existência do comando digitado sem o seu caminho completo. Por exemplo, se você digitar o comando tree, o bash vai consultar a variável PATH, retornando o diretório /usr/bin onde o tree está armazenado e por fim vai executar o caminho completo /usr/bin/tree.

E que tal dominar ainda mais o terminal e controle de variáveis com o nosso Curso de Terminal Linux Bash? Nele você vai aprender a “falar a língua do terminal” do iniciante ao avançado e como controlar processos e tarefas para aumentar sua produtividade.

Como funciona a variável $PATH no Linux?

Cada distribuição Linux vem com diferentes valores em PATH. Mas como é uma “variável”, você pode alterar de modo temporário (para testar) ou permanente (que dura mesmo após o boot). 

Veja a diferença do $PATH no Linux em diferentes distros como o Parrot, Fedora e o OpenSUSE:

parrot:$> printenv PATH
/home/neo/.local/bin:/snap/bin:/usr/sandbox/:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/share/games:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
fedora:$> printenv PATH
/home/neo/.local/bin:/home/neo/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin
opensuse:$> printenv PATH
/home/neo/bin:/usr/local/bin:/usr/bin:/bin

Se o mesmo executável existir em mais de um diretório presente em PATH, será executado o que estiver no diretório mais à esquerda da sequência. E para ficar fera no conceito de caminhos no Linux e entender porque nele não existe o “C:\” do Windows, recomendamos este vídeo super completo sobre o assunto:

Se você quiser ver todas as variáveis do seu sistema, digite somente printenv. A saída pode ser bem longa.

$> printenv

Erros mais comuns de $PATH

Se você digitar um comando que não for achado em PATH, o seguinte erro é apresentado. 

$> meuscript
bash: meuscript: command not found…

Agora veja o erro ao criar o arquivo “meuscript” no diretório /home/neo/bin, existente em PATH, mas sem dar permissão de execução.

$> meuscript
bash: /home/neo/bin/meuscript: Permission denied

Consultando o caminho de um executável

Você também pode consultar o caminho de um executável existente em PATH no Linux com o comando which.

$> which meuscript
/home/neo/bin/meuscript
$> which tree
/usr/bin/tree

Como adicionar um diretório em $PATH

Para adicionar um diretório, é preciso tomar cuidado para não sobrepor o conteúdo original e assim bloquear as execuções do seu sistema. Para fazer isso, daremos um comando que primeiro lê o conteúdo atual e depois concatena o novo.

Neste exemplo, primeiro criamos o diretório “meusprogramas”:

$> mkdir /home/neo/meusprogramas

Depois vamos incluir na variável, digitando o seguinte:

$> export PATH=$PATH:/home/neo/meusprogramas

Onde:

  • export >> comando do bash para definir uma variável acessível por qualquer processo filho dele;
  • PATH >> o nome da variável, sempre em LETRAS MAIÚSCULAS, que é o padrão POSIX;
  • $PATH >> ao usar $NOME_DA_VARIÁVEL, retorna o valor atual armazenado;
  • : >> dois pontos é o separador de valores convencionado para PATH;
  • /home/neo/meusprogramas >> o novo valor que estamos adicionando.

Para ver como ficou, basta consultar assim:

$> printenv PATH
/home/neo/bin:/usr/local/bin:/usr/bin:/bin:/homeneo/meusprogramas

Porém, o comando export só vale para a sessão atual do bash. Ao abrir um novo terminal ou reiniciar o computador, a variável volta ao que era antes.

Como adicionar um diretório permanente em $PATH no Linux

Para tornar a alteração permanente, será preciso dar a mesma instrução em algum script usado no boot do sistema.

Para fazer de modo global, para todos os usuários do sistema, geralmente fazemos isso no arquivo /etc/profile (lembrando que a pasta a ser adicionada também tem que ser acessível para todos). Dizemos “geralmente” porque pode haver diferenças significativas no modo em que uma distro opera seus scripts. 

Algumas distribuições podem criar scripts filhos justamente para esse tipo de personalização, de modo que ao fazer uma atualização do sistema suas alterações sejam preservadas. Em distribuições bem documentadas, logo no início do arquivo há uma explicação se você pode ou não fazer alterações ali mesmo ou se deve fazer num arquivo filho (a Suse Enterprise, por exemplo, usa /etc/profile como principal e recomenda que personalizações sejam feitas no filho /etc/profile.local).

Para fazer isso somente para o usuário atual, podemos usar o arquivo /home/[nome_do_usuário]/.bash_profile ou /home/[nome_do_usuário]/.profile (dependendo de sua distribuição estes arquivos ainda podem variar)

Para adicionar somente para você, abra o arquivo ~/.bash_profile ou ~/.profile com o editor de textos de sua escolha, como o vim, o meu preferido. O ~ (til) também é uma variável do sistema e aponta para o diretório home do usuário atual (em nosso exemplo, o ~ tem o valor /home/neo). 

$> vim ~/.bash_profile

Acrescente a seguinte linha no final do arquivo (se colocar em outro trecho, corre o risco de outra parte do script sobrepor seu comando), alterando o trecho “neo/meusprogramas” pelo caminho que você desejar:

export PATH=$PATH:/home/neo/meusprogramas

Depois de editar e salvar, você precisa dar um source para o script ser lido e começar a valer (mas se abrir um novo terminal já funciona também):

$> source ~/.profile

ou

$> source ~/.bash_profile

Conclusão

Ao personalizar a variável PATH, poderá habilitar seu sistema a localizar scripts e programas que não são instalados e que você deseje organizar em pastas próprias, como dentro da sua /home, por exemplo. Você também pode criar atalhos de desktop dentro do seu KDE, GNOME, XFCE etc. Para um programa gráfico, isso funcionará bem. Mas se for um script que precise receber parâmetros de entrada no momento da execução, não será uma boa alternativa porque você não consegue fazer isso como faz pela linha de comando.

Como existe muita diferença nos valores de PATH entre as diferentes distribuições e mesmo que você não precise alterar por conta de algum script personalizado, é bem comum se deparar com programas que estão corretamente instalados, mas que não executam por não ter o caminho reconhecido.

Agora você já sabe como resolver este problema, bastando identificar o caminho do seu programa e adicioná-lo na variável PATH.

Diolinux Ofertas - Aproveite os melhores descontos em diversos produtos!