GNU/Linux >> Linux Esercitazione >  >> Linux

Differenza tra shell di accesso e shell non di accesso?

Comprendo la differenza fondamentale tra una shell interattiva e una shell non interattiva. Ma cosa differenzia esattamente una shell di login da una shell non di login?

Puoi fornire esempi per l'uso di un interattivo senza accesso guscio?

Risposta accettata:

Una shell di accesso è il primo processo che viene eseguito con il tuo ID utente quando accedi a una sessione interattiva. Il processo di login dice alla shell di comportarsi come una shell di login con una convenzione:passando l'argomento 0, che normalmente è il nome dell'eseguibile della shell, con un - carattere anteposto (ad es. -bash mentre normalmente sarebbe bash . Le shell di accesso in genere leggono un file che esegue operazioni come l'impostazione delle variabili di ambiente:/etc/profile e ~/.profile per la tradizionale shell Bourne, ~/.bash_profile inoltre per bash, /etc/zprofile e ~/.zprofile per zsh, /etc/csh.login e ~/.login per csh, ecc.

Quando accedi da una console di testo, o tramite SSH, o con su - , ottieni un accesso interattivo guscio. Quando accedi in modalità grafica (su un display manager X), non ottieni una shell di accesso, ma ottieni un gestore di sessioni o un gestore di finestre.

È raro eseguire un accesso non interattivo shell, ma alcune impostazioni di X lo fanno quando accedi con un display manager, in modo da organizzare la lettura dei file del profilo. Altre impostazioni (questo dipende dalla distribuzione e dal display manager) leggono /etc/profile e ~/.profile esplicitamente o non leggerli. Un altro modo per ottenere una shell di accesso non interattiva è accedere in remoto con un comando passato tramite l'input standard che non è un terminale, ad es. ssh example.com <my-script-which-is-stored-locally (al contrario di ssh example.com my-script-which-is-on-the-remote-machine , che esegue una shell non interattiva e non di accesso).

Quando avvii una shell in un terminale in una sessione esistente (schermo, terminale X, buffer del terminale Emacs, una shell all'interno di un'altra, ecc.), ottieni un interattivo, senza login guscio. Quella shell potrebbe leggere un file di configurazione della shell (~/.bashrc per bash invocato come bash , /etc/zshrc e ~/.zshrc per zsh, /etc/csh.cshrc e ~/.cshrc per csh, il file indicato da ENV variabile per shell compatibili con POSIX/XSI come dash, ksh e bash quando invocate come sh , $ENV se impostato e ~/.mkshrc per mksh, ecc.).

Quando una shell esegue uno script o un comando passato sulla sua riga di comando, è un non interattivo, senza login guscio. Tali shell vengono eseguite continuamente:è molto comune che quando un programma chiama un altro programma, esegue davvero un minuscolo script in una shell per invocare quell'altro programma. Alcune shell in questo caso leggono un file di avvio (bash esegue il file indicato da BASH_ENV variabile, zsh esegue /etc/zshenv e ~/.zshenv ), ma questo è rischioso:la shell può essere invocata in ogni tipo di contesto e non c'è quasi nulla che tu possa fare che non rompa qualcosa.

Correlati:Capire tc qdisc e iperf?

Sto semplificando un po', vedi il manuale per i dettagli cruenti.


Linux
  1. Differenza tra 2>&-, 2>/dev/null, |&, &>/dev/null E>/dev/null 2>&1?

  2. La differenza di utilizzo tra variabili Shell e variabili d'ambiente?

  3. Differenza tra Eot ed Eof?

  4. Differenza tra [0-9], [[:digit:]] e D?

  5. Linux:qual è la differenza tra `su -` e `su –login`?

Differenza tra apt e apt-get spiegato

Qual è la differenza tra Login e Non-Login Shell

Differenza tra Snat e Masquerade?

Qual è la differenza tra una console, un terminale e una shell?

Qual è la differenza tra &> e >&in bash?

Differenza tra '{}' e {} nel comando find?