Bash - A variável do ambiente PATH

Novembro 2016



I. Preâmbulo


Nos sistemas GNU/Linux, queiramos ou não, nos tornamos os administradores do nosso sistema. Cada vez mais, vemos no GNU/Linux o aparecimento de utilitários gráficos para realizar tarefas administrativas.

Mas a linha de comando conhecida sob vários nomes (shell, terminal, console, etc) continua a ser um utilitário muito poderoso e de fácil manuseio.

Depois de aprender o básico, você ficará espantado com a facilidade de utilização desta linha de comando.

O uso da linha de comando é muito mais rápido do que o uso de um utilitário gráfico. Se você contar o tempo do download da interface, a busca (física) do mouse em sua área de trabalho e, sem contar que, além disso, você ainda terá que entrar os dados, então você perderá algumas vantagens desta "linha de comando "e, consequentemente, não beneficiará nem da tecla TAB para a realização do comando, nem do histórico que possibilitaria a repetição de um comando, nem dos pseudônimos para os comandos demorados, etc .

A desvantagem com o shell é que você não poderá segurar a sua xícara de café ou um cigarro com uma mão, enquanto a outra estiver digitando no teclado.
Com o mouse é possível, até você precisar preencher as áreas propostas pelo seu utilitário gráfico preferido.

Mas, quem sabe, com o shell você não decidirá parar de fumar...
O shell é mais barato do que o Niquitin, etc.?!

Mas você ainda está no GNU/Linux e a escolha é sua.

Mas como a liberdade tem um preço, é preciso pagá-lo.
No caso dos sistemas GNU/Linux o preço a ser pago é a liberdade de ler os documentos disponíveis em seu sistema, ou seja, as páginas "man" e o comando "informação", para explorar melhor o seu sistema.

Assim, você pode ver as páginas "man" com o navegador Konqueror usando o URL man:/
Na Internet podem-se encontrar traduções para as páginas "man".
Manual do Linux - páginas do man
Páginas de man em português 1
Páginas de man em português 2

II. O que é o shell ?


É um software que faz parte do sistema e que tem o papel de processar os comandos ou as linhas de comando entradas no teclado.

Para ver a lista dos shells disponíveis no seu sistema, consulte o arquivo /etc/shells
cat /etc/shells


Um usuário no Linux tem um shell padrão de conexão.

Consulte o arquivo /etc/passwd e verá que o último campo é algo como /bin/<qualquercoisa>. Trata-se da sua shell de conexão.

Para ver os shells dos usuários, usar o comando
cat /etc/passwd | cut -d: -f1,7


Para um usuário em particular, preencher o comando desta maneira :
cat /etc/passwd | cut -d: -f1,7 | grep usuário


Se você estiver em modo gráfico você poderá abrir um terminal (xterm,gterm,konsole, etc) e, depois, escreva suas linhas de comando.

Saiba que o GNU/Linux tem 6 consoles virtuais, cujo acesso a partir da interface gráfica é feito com a combinação das seguintes: Ctrl+ALT+Fn ou
n é um número de 1 a 6.

A partir do console virtual, você poderá alternar para outro com a combinação ALT+Fn, (com n de 1 a 6).
Para voltar para o modo gráfico a partir de um console virtual, faça ALT+F7.

Num shell, podemos ver um prompt de comando do tipo:
usuário@debian: ~$

Se, no lugar do $ estiver um #, saiba que está conectado como administrador, a menos que você tenha modificado a sua configuração.

O prompt do comando muda de acordo com o sistema operacional e pode ser alterado graças a outra variável de ambiente, a PS1.

III. Definição


Vamos começar com o termo genérico de variável.

Uma variável, é um recipiente de memória que armazena um dado que poderá se alterar durante a execução de um programa.

Assim, uma variável tem um nome e um conteúdo. Não vamos entrar em detalhes aqui, sobre o programa para explicar o tipo e o conteúdo da variável

Por enquanto, nos contentaremos em saber que a variável da qual estamos falando chama-se PATH e que seu conteúdo é uma cadeia com os caminhos de diretórios, separados por dois pontos:

Para exibir o conteúdo de uma variável no Shell, você deverá escrever
echo $variável


No caso da variável PATH, você deverá escrever
echo $PATH


IMPORTANTE! Respeite a forma. GNU/Linux faz diferença entre as MAIÚSCULAS e as minúsculas.

Para uma exibição mais agradável você poderá utilizar o comando
echo $PATH | tr : \n


Aqui estão outras maneiras de ver o conteúdo do PATH (para informação, saiba que sempre há outras alternativas para atingir os seus fins...).
printenv PATH 
env | grep -i PATH | cut -d= -f2 
perl -e 'print $ENV{PATH},"n"' 
perl -e '$,="n" and print split(":",$ENV{PATH}),""' 
perl -e '($_=$ENV{PATH})=~s/:|$/n/g and print'


Obviamente, é preferível a mais curta.

IV. Seção de dissecção


Já vimos que a variável PATH tem uma lista de diretórios separados por dois pontos:

Estes são os diretórios onde o shell procura o comando que você digitou no teclado.
A busca é feita na ordem dos diretórios contidos na variável PATH.

Exemplo:
lami20j@debian: ~$ echo $PATH 
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/lami20j/bin


Quando escrevemos um comando, o shell vai buscar primeiro no /usr/local/bin, depois no /usr/bin, no /usr/bin/X11, no /usr/games e, finalmente, no /home/lami20j/bin.

Ao encontrar o comando, o shell para a busca e executa o comando encontrado.

Um comando pode ser escrito usando :
- seu nome
- o caminho absoluto ( /bin/cat /etc/passwd )
- o caminho relativo (utilizamos o "." ou ".." para programas ou scripts que não estão localizados no PATH)

. é o diretório atual
.. é o diretório parente

Ao escrever um comando, podemos nos deparar com diversas situações:
1. o comando é único e se encontra em um dos diretórios
2. o comando não é único e se encontra em diversos diretórios
3. o comando não se encontra em nenhum dos diretórios

1. No 1° caso, as coisas são simples.
Se você fizer um erro de execução é, provavelmente, devido à sintaxe.
Solução: consultar o manual do comando

2. No 2° caso, as coisas também não são tão complicadas.
Suponhamos que dispomos de um comando que se encontra no diretório /usr/bin e que nós instalamos, a partir das fontes, uma versão mais recente do comando cujo executável se encontra no /usr/local/bin.

Se o comando é chamado pleo seu nome, o que acontecerá?

O shell olha no PATH começando pelo 1° diretório encontrado.
No nosso caso, ele encontrará o comando no /usr/local/bin logo, será /usr/local/bin/prog que será executado.

Por outro lado, se ainda quisermos executar o comandoprog que se encontra no /usr/bin, será preciso utilizar o caminho absoluto /usr/bin/prog

3. O 3° caso inclui 2 situações

- o comando existe mas não se encontra em nenhum diretório do nosso PATH
- o comando não existe

Nos dois casos, o alerta de erro será "command not found"

Mas a interpretação não será a mesma.

Certos comandos só podem ser utilizados pelo administrador.
Solução: conecte-se como administrador com su ou su -
Linux utilizar o comando su

Certos comandos, podem se encontrar num diretório que, por sua vez, não se encontram na sua variável PATH.
Solução: - utilizar o caminho absoluto
- adicionar o diretório ao seu PATH

Você criou um script e não está conseguindo executá-lo, seja qual for o caminho especificado ?

Solução : - verificar os direitos de execução no script ( ls -l script )

O comando não existe, neste caso, suponho que você saiba o que fazer. Se não, veja a solução.
Peça ao administrador para que ele instale o programa para você.

Podemos buscar um comando usando, seja "whereis", seja "which"
whereis comando 
which -a comando


No caso do "which" a opção -a nos permite ver todos os caminhos correspondentes.
Sem a opção -a apenas o 1° diretório terá o comando exibido, o que não é ideal já que o comando se encontrará em vários diretórios.

V. Adicionar um diretório à variável PATH


- Apenas para esta sessão

Se quisermos adicionar, por exemplo, /home/user/mes_prog à variável PATH, no shell digite
export PATH=$PATH:/home/user/mes_prog

para ter o diretório em último lugar no PATH.

ou

export PATH=/home/user/mes_prog/:$PATH

para ter seu diretório em primeiro lugar no PATH.

Agora, você poderá utilizar o seu programa apenas digitando o seu nome.

Na desconexão, PATH retomará seu valor padrão, assim /home/user/mes_prog não existirá mais no PATH.

- De maneira permanente

Se você quiser configurar o PATH de maneira permanente, você deverá editar o arquivo de configuração do seu shell de conexão.
Como, na maioria dos casos, é o shell BASH que é utilizado, você deverá editar o seu arquivo /home/user/.bashrc.

Para isso, você deverá utilizar um editor de textos ou, simplesmente, um comando para te facilitar a vida.
Pois é, muitas vezes o uso da linha de comando torna as coisas bem mais fáceis do que o uso do mouse, principalmente em tarefas administrativas (opinião pessoal).

Veja o comando
echo 'export PATH=$PATH:/home/user/mes_prog' >> /home/user/.bashrc 

Assim, à cada conexão o seu PATH conterá o seu diretório /home/user/prog

Esta operação poderá ser executada pelo usuário user já que se trata do seu ambiente.

VI. E mais...


A variável PATH é apenas uma variável entre muitas que conteem o shell.

Você poderá exibir as variáveis do seu ambiente sem se preocupar com seus nomes (que talvez você nem conheça!).

Para isso, você tem à sua disposição, diversos comandos:

printenv 
env 
set 
export



Tradução feita por Lucia Maurity y Nouira

Veja também :
Este documento, intitulado « Bash - A variável do ambiente PATH »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.