Como a variável de ambiente path funciona no Linux?

6

Estou confuso como a variável de ambiente PATH funciona no Linux. Eu sou um usuário do Linux Mint 15.

Primeiro, eu li sobre editar o arquivo /home/.bashrc e fazer um PATH=$PATH:/directory ,
mas eu também sabia sobre algum material de caminho gerenciado em /etc/bash.bashrc
e, portanto, qualquer software instalado em /usr/local/bin seria acessível de qualquer lugar no shell.

Como funciona a variável path no Linux e onde ela deve ser colocada?

    
por diegoaguilar 01.06.2013 / 21:08

3 respostas

7

O conceito básico para entender aqui é que o PATH pode ser definido em muitos lugares. Como o @demure explica em sua resposta, PATH=$PATH:/new/dir significa add /new_dir to $PATH , ele não limpará o original $PATH .

Agora, uma razão pela qual há muitos arquivos está intimamente conectada ao conceito de login e non-login shells. Veja aqui para um bom resumo. O seguinte é da página man bash (ênfase minha):

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

Ao fazer o login pela primeira vez no seu sistema, você inicia um shell login para que o bash leia os arquivos listados acima. A maioria das distribuições define um $PATH em todo o sistema (que se aplica a todos os usuários) em /etc/profile e é nesse local que você deve fazer as alterações que deseja aplicar a todos os usuários. Isto é o que eu tenho no meu Debian:

PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"

Depois de ter logado, quando você abre um terminal, você inicia um shell interativo, sem login . Isso é o que o man bash tem a dizer sobre isso:

   When  an  interactive shell that is not a login shell
   is started, bash reads  and  executes  commands  from
   /etc/bash.bashrc and ~/.bashrc, if these files exist.

Então, esses arquivos são lidos toda vez que você abre um novo terminal. Seu arquivo $ PATH é a combinação dos valores em todos os arquivos. Em uma situação típica, você efetua login usando um gerenciador de login gráfico e inicia uma nova sessão. Neste ponto seu $PATH é o que foi definido nos vários arquivos profile . Se você abrir um terminal, então você está em um shell interativo e os diferentes arquivos bashrc são lidos, o que pode acrescentar coisas ao $PATH .

Para resumir, tudo o que você realmente precisa saber é que pode fazer alterações no $PATH de seu usuário editando $HOME/.profile .

    
por 01.06.2013 / 22:29
3

No seu diretório home, seria .bashrc , não .bash.rc .
A configuração de todo o sistema é /etc/bashrc não /etc/.bash.rc .

Unix e linux não usam \some\path\here caminhos de arquivo, eles usam /some/path/here caminhos de arquivo. \ é um caractere de escape e é usado para desativar outros caracteres especiais.

Você pode editar seu $PATH adicionando-o a linhas ao seu ~/.bashrc ( ~ significa seu diretório inicial)

PATH=$PATH:/usr/local/bin:/some/other/path
export PATH

Onde

  • $PATH preserva qualquer coisa já definida no PATH.
  • : separa as entradas.
  • E os dois diretórios são exemplos (você não precisa da :/some/other/path part)

Eu não sugeriria editar o seu sistema /etc/bashrc caso você precise apenas de alterações.

    
por 01.06.2013 / 21:28
0

Primeiro, o kernel (ou initramfs) fornecerá um valor PATH padrão inicial para o processo init , além de algumas outras variáveis de ambiente. Você pode visualizá-los se quiser:

$ sudo strings /proc/1/environ
selinux=0
SHLVL=1
HOME=/
init=/sbin/init
TERM=linux
drop_caps=
BOOT_IMAGE=/vmlinuz-4.9.80-atom
PATH=/sbin:/usr/sbin:/bin:/usr/bin
crashkernel=384M-:128M
PWD=/
rootmnt=/root

Para daemons e outros processos iniciados na inicialização, o processo init (seja um SysVinit tradicional ou uma das novas substituições como systemd ) pode aplicar seu próprio PATH padrão ou apenas passar pelo valor padrão do kernel . Isso pode ou não ser configurável: veja a documentação do seu sistema init.

Para sessões de login, as configurações do PAM podem incluir pam_env.so , o que poderia impor um PATH padrão para sessões do usuário, configurável em /etc/security/pam_env.conf . Ou se pam_env.so não for usado, o processo que manipula o login (por exemplo, sshd ou o tradicional par *getty + login nos logins do console ou da porta serial) poderá impor seu próprio PATH inicial padrão para sessões do usuário.

Em seguida, o shell do usuário normalmente executará um ou mais scripts de login em todo o sistema e um ou mais scripts de login específicos do usuário, se existirem. Qualquer um deles pode adicionar à configuração do PATH existente ou substituí-lo completamente.

    
por 25.02.2018 / 15:10