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), 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/profile
e ~/.profile
nem 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/environment
pode 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/motd
e é 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/motd
arquivo e verifique se nada está sendo gerado, /etc/init.d/motd
se presente.
De qualquer forma, com base na saída que você mostra, parece ssh
que 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):
- O daemon SSH, através do
pam_motd
módulo da biblioteca PAM, exibe o conteúdo de /etc/motd
. Através do pam_env
módulo, ele define as variáveis de ambiente de /etc/environment
e ~/.pam_environment
.
- Um shell de logon é iniciado e os seguintes arquivos são lidos em ordem:
/etc/profile
/etc/bash.bashrc
(as /etc/profile
fontes padrão do Ubuntu /etc/bash.bashrc
).
~/.bash_profile
. Os outros arquivos que poderiam ter sido lidos aqui ( ~/.profile
e ~/.bash_login
) são ignorados porque ~/.bash_profile
existem.
export SET_IN_ETC_PROFILE=yes
em/etc/profile
,export SET_IN_HOME_ZSHRC=yes
em~/.zhshrc
(eu sou um usuário zsh), etc ... Em seguida, reiniciar e boaenv|grep SET_IN
irá 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