Sequenza di script provenienti al momento dell'accesso


41

Vorrei concentrare tutta la mia configurazione di accesso nella mia ~/.bash_profile. C'era un ~/.bashrclì di default ma l'ho sostituito con un ~/.bash_profile.

Tuttavia, quando eseguo l'accesso, qualcosa prima del mio ~/.bash_profileviene fornito e visualizza quanto segue:

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

Vorrei rimuoverlo in modo che ~/.bash_profilevenga visualizzato solo il mio splash splash definito nel mio display, ma non sono sicuro della logica / sequenza degli script provenienti / eseguiti quando un utente accede. Puoi illuminarmi?

Come bonus, vorrei anche conoscere la sequenza di approvvigionamenti / exec automatizzati all'avvio del sistema, non solo quando un utente avvia una sessione accedendo, anche se questa è una preoccupazione di minore importanza per me in questo momento.

Risposte:


53

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-terminalad 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/profilee ~/.profilenon 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/environmentdove 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/motde 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/motdfile e assicurarsi che non sia stato generato nulla /etc/init.d/motdse presente.


Ad ogni modo, in base all'output che mostri, sembra sshche 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):

  1. Il demone SSH, tramite il pam_motdmodulo della libreria PAM, visualizza il contenuto di /etc/motd. Tramite il pam_envmodulo, imposta le variabili di ambiente da /etc/environmente ~/.pam_environment.
  2. Viene avviata una shell di accesso e vengono letti i seguenti file in ordine:
    1. /etc/profile
    2. /etc/bash.bashrc(le /etc/profilefonti predefinite di Ubuntu /etc/bash.bashrc).
    3. ~/.bash_profile. Gli altri file che avrebbero potuto essere letti qui ( ~/.profilee ~/.bash_login) vengono ignorati perché ~/.bash_profileesistono.

5
Un bel trucco per scoprire queste cose è mettere in giro le variabili sentinella. Voglio dire, ho messo export SET_IN_ETC_PROFILE=yesa /etc/profile, export SET_IN_HOME_ZSHRC=yesa ~/.zhshrc(io sono un utente zsh), ecc ... Poi riavvio e bellissimo env|grep SET_INvi 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
Rmano

1
quindi quando ssh, sarebbe una shell interattiva, giusto?
anfibio,

@amphibient una shell di login interattiva, sì. Quando apri un terminale sul computer locale del tour, è una shell interattiva, senza accesso.
terdon

@Rmano Ho votato i tuoi commenti. Ma alcuni istanti dopo envho scoperto che l'ordine non ha alcuna relazione con l'ordine di esecuzione.
Penghe Geng

2
@xiaobai ovviamente no, il punto è che SET_INti mostrerà quali file sono stati letti, non in quale ordine sono stati letti. L'ordine è standard, è ciò che è mostrato negli estratti della pagina man che ho nella mia risposta.
terdon

1

Le informazioni che vedi quando accedi tramite ssh vengono create prima ancora che il / etc / profile venga mai visto. Dai un'occhiata alla sequenza di file in /etc/update-motd.d. Questo ti mostrerà dove i messaggi che vedi sono generati da vari script.


1
Questo è già trattato nella risposta in alto, ma apprezzo la tua brevità. +1 :)
wjandrea,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.