Sequência de scripts originados no login


41

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

No entanto, quando eu faço login, algo antes de obter minha ~/.bash_profileorigem 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

Gostaria de removê-lo para que apenas a minha própria saudação inicial definida em minhas ~/.bash_profileexibições seja exibida, mas não tenho certeza sobre a lógica / sequência dos scripts originados / executados quando um usuário efetuar login. Você pode me esclarecer?

Como bônus, também gostaria de saber a sequência de fontes / executivos automatizados quando o sistema iniciar, não apenas quando um usuário iniciar uma sessão efetuando login, embora essa seja uma preocupação de menor importância para mim no momento.

Respostas:


53

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-terminalpor exemplo), você está executando o que é conhecido como um interativo, non-login shell.

  • Quando você faz login na sua máquina a partir da linha de comando ou executa um comando como su - username, você está executando um shell de logon interativo .

  • Quando você faz login graficamente, está executando algo completamente diferente. Os detalhes vai depender do seu sistema e ambiente gráfico mas, em geral, é o shell gráfica que lida com o seu login. Enquanto muitos shells gráficos (incluindo o padrão do Ubuntu) leem /etc/profilee ~/.profilenem todos eles lêem .

  • Por fim, quando você executa um script de shell, ele é executado em um shell não interativo e sem logon .

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

Quando o bash é chamado como um shell de login interativo ou como um shell não interativo com a opção --login, ele primeiro lê e executa comandos do arquivo / etc / profile , se esse arquivo existir. Depois de ler esse arquivo, ele procura ~ / .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 existirem. Isso pode ser inibido usando a opção --norc. A opção --rcfile file 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 /etc/environmentpode definir onde as variáveis ​​ambientais globais são lidas, e não lidas (os comandos dentro dela 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 /etc/motde é exibido através pam_motd. Como 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 abreviação "motd" significa "mensagem do dia", e esse arquivo tem sido tradicionalmente usado exatamente para 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 /etc/motdarquivo e verifique se nada está sendo gerado, /etc/init.d/motdse presente.


De qualquer forma, com base na saída que você mostra, parece sshque você está acessando o sistema, o que significa que você está executando um shell de logon interativo , veja acima o que isso significa. Portanto, em resumo, as coisas com as quais você se importa são originadas quando você faz login são (e nesta ordem):

  1. O daemon SSH, através do pam_motdmódulo da biblioteca PAM, exibe o conteúdo de /etc/motd. Através do pam_envmódulo, ele define as variáveis ​​de ambiente de /etc/environmente ~/.pam_environment.
  2. Um shell de logon é iniciado e os seguintes arquivos são lidos em ordem:
    1. /etc/profile
    2. /etc/bash.bashrc(as /etc/profilefontes padrão do Ubuntu /etc/bash.bashrc).
    3. ~/.bash_profile. Os outros arquivos que poderiam ter sido lidos aqui ( ~/.profilee ~/.bash_login) são ignorados porque ~/.bash_profileexistem.

5
Um bom truque para descobrir essas coisas é colocar variáveis ​​sentinelas em volta. Quero dizer, eu coloquei export SET_IN_ETC_PROFILE=yesem /etc/profile, export SET_IN_HOME_ZSHRC=yesem ~/.zhshrc(eu sou um usuário zsh), etc ... Em seguida, reiniciar e boa env|grep SET_INirá dizer-lhe toda a história. Para ver quais variáveis ​​são vistas pelos aplicativos da área de trabalho (os que você inicia no painel ou no WM, sem usar um terminal), consulte askubuntu.com/a/356973/16395
Rmano

11
então quando você ssh, isso seria um shell interativo, correto?
Anfphient

@ anfphient um shell de login interativo, sim. Quando você abre um terminal na máquina local de turismo, é um shell interativo e não de login.
terdon

@Rmano Eu votei nos seus comentários. Momentos depois, a ordem encontrada envnão tem relação com a ordem de execução.
Penghe Geng

2
@xiaobai é claro que não, o ponto é que SET_INirá mostrar quais arquivos foram lidos, não em que ordem eles foram lidos. A ordem é padrão, é o que é mostrado nos trechos da página de manual que tenho na minha resposta.
terdon

1

As informações que você vê quando se loga via ssh são criadas antes de / etc / profile ser visualizado. Veja a 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.


11
Isso já está coberto na resposta principal, mas agradeço a sua brevidade. 1 :)
wjandrea
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.