variável de ambiente PATH no linux [duplicado]

7

Eu quero saber como as variáveis de ambiente padrão fornecidas pelo sistema operacional Linux, como PATH, HOME, são configuradas automaticamente. Em qual arquivo estes são lidos. Deve haver algum arquivo a partir do qual essas variáveis são definidas quando um login de usuário específico.

    
por pradeepchhetri 22.09.2011 / 08:05

5 respostas

9

A resposta à sua pergunta pode ser encontrada na seção INVOCATION de man bash . Aqui está um trecho relevante:

   When  bash is invoked as an interactive login shell, or as a non-inter-
   active shell with the --login option, it first reads and executes  com-
   mands  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.

   When  a  login  shell  exits, bash reads and executes commands from the
   file ~/.bash_logout, if it exists.

   When an interactive shell that is not a login shell  is  started,  bash
   reads  and executes commands from ~/.bashrc, if that file exists.  This
   may be inhibited by using the --norc option.  The --rcfile file  option
   will  force  bash  to  read  and  execute commands from file instead of
   ~/.bashrc.

   When bash is started non-interactively, to  run  a  shell  script,  for
   example, it looks for the variable BASH_ENV in the environment, expands
   its value if it appears there, and uses the expanded value as the  name
   of  a  file to read and execute.  Bash behaves as if the following com-
   mand were executed:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   but the value of the PATH variable is not used to search for  the  file
   name.

Há ainda mais na man page, eu recomendo que você leia.

    
por 22.09.2011 / 08:36
3

As coisas são um pouco mais complexas do que o que seu shell oferece.

Existem três formas principais de login:

  • faça o login a partir de um terminal verdadeiro (atualmente, principalmente o console)
  • faça login em um pseudo-terminal (principalmente conexões de rede)
  • faça login em um ambiente gráfico

Todos eles são capazes de configurar o ambiente antes de executar o shell, e todos eles o fazem ( HOME , LOGNAME , TERM provavelmente não foram definidos pelo seu shell, e mesmo se você não tiver nenhum start-up arquivos, seu shell geralmente herda a variável de ambiente PATH ).

Ao efetuar login a partir de um terminal verdadeiro, o processo que manipula a conexão provavelmente configurará a variável de ambiente TERM e delegará o restante do trabalho ao programa login . Esse programa faz algumas verificações (como impedir o login para raiz em terminais inseguros), garante que todo o ambiente seja excluído TERM está limpo, inicializa HOME , PATH , SHELL , TERM , MAIL , e LOGNAME e, em seguida, inicie seu shell de login. Seu shell fará sua própria inicialização.

Ao efetuar login a partir de um pseudo-terminal, as mesmas coisas acontecem com um pequeno toque. Muitas vezes, o ambiente obtém mais inicialização do processo que manipula a conexão do que apenas a variável de ambiente TERM (protocolos de rede geralmente têm uma maneira de transferir o ambiente do outro lado) e, portanto, login é usado em um modo no qual limpar o ambiente, a limpeza é feita pelo programa que manipula a conexão.

Ambientes gráficos geralmente não delegam para login , mas se comportam de maneira semelhante. Depois de verificar suas credenciais, elas criam um ambiente limpo (com a variável de ambiente usual e pelo menos DISPLAY configurado corretamente; eles geralmente permitem que um script fornecido pelo sysadmin adicione coisas) e, em seguida, iniciam o script de inicialização do ambiente de área de trabalho; Esses podem tentar obter o ambiente do seu shell de login e também fornecem a possibilidade de fornecer um script para concluir a configuração. Portanto, quando você inicia qualquer programa a partir de sua área de trabalho, seu ambiente é a combinação do que o programa de login gráfico, seu ambiente de área de trabalho e seus scripts de login definem.

Uma última coisa: quando você inicia um emulador de terminal, você pode obter um shell de login (caso em que o script de login do shell é executado e você pode ver o efeito de suas últimas alterações, mas ganhou pode ver o mesmo ambiente que os outros programas) ou não (nesse caso o script de login do shell não é executado, você não vê as alterações mais recentes, mas obtém o mesmo ambiente que os outros programas - modificado por o script de inicialização interativo do seu shell).

    
por 23.09.2011 / 17:25
1

verifique os arquivos /etc/bash* /etc/profile* .

    
por 22.09.2011 / 14:37
0

Você deve dar uma olhada no arquivo .profile na raiz dos diretórios dos usuários - variáveis como aquelas que podem ser definidas (ou sobrescritas) lá.

No entanto, se você quer dizer onde todas as variáveis ambientais são definidas - eu diria que elas são herdadas de algum processo pai. Talvez uma olhada em algo como este possa ajudar.

    
por 22.09.2011 / 08:11
0

Verifique a man page do bash, pois ela deve fornecer todos os arquivos que estão marcados (e em qual ordem), dependendo da sua distribuição. O comando env dirá o que está definido, mas não de onde. No entanto, um grep rápido lhe dirá onde isso está definido.

    
por 22.09.2011 / 15:42