Seqüência de scripts originados no login

32

Gostaria de concentrar toda a minha configuração de login no meu ~/.bash_profile . Havia um ~/.bashrc lá por padrão, mas eu o substituí por um ~/.bash_profile .

No entanto, quando eu faço login, algo antes do meu ~/.bash_profile é originado e exibe o seguinte:

Linux ubnt10-dev1 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc

  System information as of Fri May  9 12:17:39 EDT 2014

  System load:  0.01              Processes:           74
  Usage of /:   5.5% of 18.58GB   Users logged in:     0
  Memory usage: 4%                IP address for eth0: 123.x.x.x
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/

New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Fri May  9 12:11:52 2014 from 123.x.x.x

Eu gostaria de remover isso para que apenas minha própria saudação inicial definida em minhas exibições ~/.bash_profile gets seja exibida, mas não tenho certeza sobre a lógica / sequência de scripts originados / executados quando um usuário efetua login. Você pode me esclarecer?

Como bônus, também gostaria de saber a sequência de origens / execuções automatizadas quando o sistema é iniciado, não apenas quando um usuário inicia uma sessão fazendo login, embora essa seja uma preocupação de menor importância para mim agora.

    
por amphibient 09.05.2014 / 18:23

2 respostas

46

Isso é meio complexo. Primeiro de tudo, os detalhes dependem do tipo de shell que você está executando. Para me plagiar :

  • Quando você abre um emulador de terminal ( gnome-terminal , por exemplo), está executando o que é conhecido como um shell interativo, sem login .

  • Ao efetuar login na sua máquina a partir da linha de comando ou executar um comando como su - username , você está executando um shell login interativo .

  • Quando você faz login graficamente, você está executando algo completamente diferente, os detalhes dependerão do seu sistema e ambiente gráfico, mas em geral é o shell gráfico que lida com seu login. Embora muitos shells gráficos (incluindo o padrão do Ubuntu) leiam /etc/profile e ~/.profile nem todos eles fazem isso.

  • Finalmente, quando você executa um script de shell, ele é executado em um shell não-interativo, não-login .

Os arquivos que o bash lerá quando lançado dependem do tipo de shell em que ele está sendo executado. A seguir, um trecho da seção INVOCATION de man bash (ênfase minha):

  

Quando o bash é invocado como um shell de login interativo , ou como um shell não interativo com a opção --login, primeiro lê e executa comandos do arquivo / etc / profile , se esse arquivo existir. Depois de ler esse arquivo, ele procura por ~ / .bash_profile, ~ / .bash_login e ~ / .profile,    nessa ordem , e lê e executa comandos do primeiro que   existe e é legível. A opção --noprofile pode ser usada quando o    shell é iniciado para inibir esse comportamento.

     

Quando um shell interativo que é não um shell de login é iniciado, o bash   lê e executa comandos de /etc/bash.bashrc e ~ / .bashrc , se   esses arquivos existem. Isso pode ser inibido usando a opção --norc.   A opção de arquivo --rcfile forçará o bash a ler e executar comandos   do arquivo em vez de /etc/bash.bashrc e ~ / .bashrc.

Esses são os arquivos de inicialização. Você também tem /etc/environment , onde é possível definir variáveis ​​ambientais globais, mas isso é lido em vez de originado (os comandos dentro dele não são executados, mas as definições de variáveis ​​são definidas).

Agora, a saudação que você vê é outra coisa novamente. Isso é definido em /etc/motd e é exibido por meio de pam_motd . Conforme explicado em man motd :

  

O conteúdo de / etc / motd é exibido por pam_motd (8) após um   login bem-sucedido, mas antes de executar o shell de login.

     

A abreviatura "motd" significa "mensagem do dia", e esta   arquivo tem sido tradicionalmente usado para exatamente isso (requer   muito menos espaço em disco do que o correio para todos os usuários).

     

No Debian GNU / Linux, o conteúdo de /run/motd.dynamic também é   exibido. Este arquivo é gerado por /etc/init.d/motd na inicialização.

Para remover a mensagem, basta esvaziar o arquivo /etc/motd e certificar-se de que nada esteja sendo gerado por /etc/init.d/motd , se houver.

De qualquer forma, com base na saída exibida, parece que você está fazendo login via ssh , o que significa que você está executando um shell de login interativo , veja acima o que isso significa. Então, em resumo, as coisas de que você gosta são originadas quando você faz login (e nesta ordem):

  1. O daemon SSH, através do módulo pam_motd da biblioteca PAM, exibe o conteúdo de /etc/motd . Por meio do módulo pam_env , ele define as variáveis ​​de ambiente de /etc/environment e ~/.pam_environment .
  2. Um shell de login é iniciado e os seguintes arquivos são lidos em ordem:
    1. /etc/profile
    2. /etc/bash.bashrc (o padrão do Ubuntu /etc/profile sources /etc/bash.bashrc ).
    3. %código%. Os outros arquivos que poderiam ter sido lidos aqui ( ~/.bash_profile e ~/.profile ) são ignorados porque ~/.bash_login existe.
por terdon 09.05.2014 / 18:54
1

A informação que você está vendo quando você faz o login via ssh é criada antes do / etc / profile ser visto. Dê uma olhada na sequência de arquivos em /etc/update-motd.d. Isso mostrará onde as mensagens que você está vendo são geradas por vários scripts.

    
por Reese 23.02.2018 / 23:13