Che cosa sono le shell di login e non di login?

64

Si dice che le impostazioni per la shell di login non siano disponibili in .bashrc e le impostazioni della shell di login per andare in .profile file.

Che cosa si intende realmente per login e shell non di accesso?

Per favore, spiega senza usare il gergo tecnico il più lontano possibile.

    
posta DUKE 25.06.2012 - 19:00

2 risposte

71

In poche parole:

  • Se apri una shell o un terminale (o passa a uno) e ti chiede di accedere (Nome utente? Password?) prima che ti dia una richiesta, è una shell di login.
  • Se non lo fa (come gnome-terminal ), e ti permette di usarlo subito, è una shell non di login.

Se sei un utente normale di Ubuntu Desktop, la shell di accesso solo è ... il tuo desktop (devi digitare una password per entrare, giusto;)? Beh, tecnicamente è una shell di login che avvia una GUI, ma sta entrando in gergo. E sì, leggerà le impostazioni in .profile

L'unica volta che tu (un utente normale) vedrai probabilmente una shell di login che sembra come una shell di login è se hai qualche problema con il desktop e passi a un terminale virtuale con Ctrl + Alt + F1 scorciatoia.

Gli altri casi generali per avere una shell di login includono:

  • accesso remoto al computer tramite ssh (o connessione locale con ssh localhost )
  • simulazione di una shell di login iniziale con bash -l (o sh -l )
  • simulazione di una shell di login root iniziale con sudo -i
    • o sudo -u username -i per un altro non root utente
  • autenticarsi come un altro non root utente con su - username (e la loro password)
  • utilizzando il comando sudo login per cambiare utente
risposta data ish 26.06.2012 - 04:28
7

Non penso che la risposta corretta possa essere data senza "gergo tecnico". Poiché questa domanda è la prima a comparire in Google per la query "che cos'è una shell di accesso", fornisco una risposta più corretta di seguito:

La shell di accesso è semplicemente una shell che è stata detta per essere una shell di login. Fa not shell media che si apre dopo il login, anche se solitamente l'applicazione che ti fa il login sta dicendo che si avvia come una shell di login. Esistono i seguenti modi per dire a shell che dovrebbe essere uno di accesso:

  1. Esecuzione di shell con -l o --login argomento assumendo che lo conosca (non conosco alcuna shell che non conosca -l , ma --login è supportata solo da alcune shell).
  2. Esecuzione di shell con argv[0] impostato su -{some_string} (cioè con HYPHEN-MINUS anteposto al solito argv[0] o ad un'altra stringa). Questo è ciò che ssh e su fanno: su esegue solo eseguibile con -su come argv[0] (ciao a tutti che pensano argv[0] ha qualcosa a che fare con il nome eseguibile attualmente in esecuzione), ssh esegue zsh con -zsh quando l'utente ha impostato /bin/zsh come sua shell.

La logicità della shell non ha assolutamente nulla a che fare con qualcuno che ti chiede una password o sta eseguendo qualche altra procedura di autenticazione. Alcuni programmi come ssh o login (o alcuni emulatori di terminale come urxvt) eseguono shell come login usando argv[0] che inizia con HYPHEN-MINUS. Alcuni come su o sudo (o zsh: vedere - modificatore precommand descritto nella sezione PRECOMMAND MODIFIERS in man zshmisc ) non lo fanno di default, ma possono essere detti così. Alcuni hanno l'unica possibilità di dire alla shell di essere quella di login usando il suo argomento (cioè bash -l ): ssh con un argomento di comando (che dice esplicitamente a ssh cosa deve essere eseguito sul terminale remoto).

In genere è meglio consultare prima la documentazione del programma utilizzato per invocare la shell per determinare se la shell sarà la login e la seconda eseguire alcuni test per determinare se l'app avvierà una shell di login (ad esempio aggiungendo echo a .profile ).

    
risposta data ZyX 17.01.2015 - 21:33

Leggi altre domande sui tag