Questo è un po 'complesso. Prima di tutto, i dettagli dipendono dal tipo di shell in esecuzione. Per plagiarmi :
Quando si apre un emulatore di terminale ( gnome-terminal
ad esempio), si esegue quella che è nota come shell interattiva senza accesso .
Quando si accede al computer dalla riga di comando o si esegue un comando come su - username
, si esegue una shell di accesso interattiva .
Quando accedi graficamente, esegui qualcosa di completamente diverso. I dettagli dipenderanno dal sistema e dall'ambiente grafico ma, in generale, è la shell grafica che si occupa del tuo login. Mentre molte shell grafiche (incluso il default di Ubuntu) leggeranno /etc/profile
e ~/.profile
non tutte lo fanno.
Infine, quando si esegue uno script di shell, viene eseguito in una shell non interattiva e non di accesso .
I file che bash leggeranno all'avvio dipendono dal tipo di shell su cui è in esecuzione. Quello che segue è un estratto della sezione INVOCATION di man bash
(sottolineatura mia):
Quando bash viene invocato come shell di login interattiva o come shell non interattiva con l'opzione --login, legge prima ed esegue i comandi dal file / etc / profile , se quel file esiste. Dopo aver letto quel file, cerca ~ / .bash_profile, ~ / .bash_login e ~ / .profile, in quell'ordine , e legge ed esegue i comandi dal primo che esiste ed è leggibile. L'opzione --noprofile può essere usata all'avvio della shell per inibire questo comportamento.
Quando viene avviata una shell interattiva che non è una shell di accesso , bash legge ed esegue i comandi da /etc/bash.bashrc e ~ / .bashrc , se esistono questi file. Questo può essere inibito usando l'opzione --norc. L'opzione --rcfile forzerà bash a leggere ed eseguire comandi dal file anziché /etc/bash.bashrc e ~ / .bashrc.
Questi sono i file di inizializzazione. Hai anche /etc/environment
dove puoi impostare variabili ambientali globali ma che vengono lette piuttosto che provenienti (i comandi al suo interno non vengono eseguiti ma vengono impostate le definizioni delle variabili).
Ora, il saluto che vedi è di nuovo qualcos'altro. Questo è impostato /etc/motd
e visualizzato attraverso pam_motd
. Come spiegato in man motd
:
Il contenuto di / etc / motd viene visualizzato da pam_motd (8) dopo un login riuscito ma poco prima che esegua la shell di login.
L'abbreviazione "motd" sta per "messaggio del giorno" e questo file è stato tradizionalmente usato esattamente per questo (richiede molto meno spazio su disco rispetto alla posta a tutti gli utenti).
Su Debian GNU / Linux, viene anche visualizzato il contenuto di /run/motd.dynamic. Questo file è generato da /etc/init.d/motd all'avvio.
Per rimuovere il messaggio basta svuotare il /etc/motd
file e assicurarsi che non sia stato generato nulla /etc/init.d/motd
se presente.
Ad ogni modo, in base all'output che mostri, sembra ssh
che tu stia effettuando l' accesso tramite il che significa che stai eseguendo una shell di login interattiva , vedi sopra per cosa significa. Quindi, in sintesi, le cose a cui tieni che provengono quando effettui l'accesso sono (e in questo ordine):
- Il demone SSH, tramite il
pam_motd
modulo della libreria PAM, visualizza il contenuto di /etc/motd
. Tramite il pam_env
modulo, imposta le variabili di ambiente da /etc/environment
e ~/.pam_environment
.
- Viene avviata una shell di accesso e vengono letti i seguenti file in ordine:
/etc/profile
/etc/bash.bashrc
(le /etc/profile
fonti predefinite di Ubuntu /etc/bash.bashrc
).
~/.bash_profile
. Gli altri file che avrebbero potuto essere letti qui ( ~/.profile
e ~/.bash_login
) vengono ignorati perché ~/.bash_profile
esistono.
export SET_IN_ETC_PROFILE=yes
a/etc/profile
,export SET_IN_HOME_ZSHRC=yes
a~/.zhshrc
(io sono un utente zsh), ecc ... Poi riavvio e bellissimoenv|grep SET_IN
vi racconterò tutta la storia. Per vedere quali variabili sono visualizzate dalle applicazioni desktop (quelle che lanci dalla lineetta o dalla WM, senza usare un terminale), vedi askubuntu.com/a/356973/16395