GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi přihlašovacím prostředím a nepřihlašovacím prostředím?

Rozumím základnímu rozdílu mezi interaktivním a neinteraktivním shellem. Ale co přesně odlišuje přihlašovací shell od nepřihlašovacího shellu?

Můžete uvést příklady použití interaktivity bez přihlášení shell?

Přijatá odpověď:

Přihlašovací shell je první proces, který se spustí pod vaším ID uživatele, když se přihlásíte do interaktivní relace. Proces přihlášení říká shellu, aby se choval jako přihlašovací shell s konvencí:předáním argumentu 0, což je normálně název spustitelného souboru shellu, s - znak předřazený (např. -bash zatímco normálně by to byl bash . Přihlašovací shelly obvykle čtou soubor, který dělá věci, jako je nastavení proměnných prostředí:/etc/profile a ~/.profile pro tradiční Bourne shell, ~/.bash_profile navíc pro bash, /etc/zprofile a ~/.zprofile pro zsh, /etc/csh.login a ~/.login pro csh atd.

Když se přihlásíte na textové konzoli nebo přes SSH nebo pomocí su - , získáte interaktivní přihlášení skořápka. Když se přihlásíte v grafickém režimu (ve správci zobrazení X), nezískáte přihlašovací shell, místo toho získáte správce relace nebo správce oken.

Je vzácné spustit neinteraktivní přihlášení shell, ale některá nastavení X to dělají, když se přihlásíte pomocí správce zobrazení, aby bylo možné zařídit čtení souborů profilu. Další nastavení (závisí na distribuci a správci zobrazení) si přečtěte /etc/profile a ~/.profile výslovně, nebo je nečtěte. Dalším způsobem, jak získat neinteraktivní přihlašovací shell, je vzdálené přihlášení pomocí příkazu procházejícího přes standardní vstup, který není terminálem, např. ssh example.com <my-script-which-is-stored-locally (na rozdíl od ssh example.com my-script-which-is-on-the-remote-machine , který spouští neinteraktivní shell bez přihlášení).

Když spustíte shell v terminálu v existující relaci (obrazovka, X terminál, vyrovnávací paměť terminálu Emacs, shell uvnitř jiného atd.), získáte interaktivní, nepřihlašovací skořápka. Tento shell může číst konfigurační soubor shellu (~/.bashrc pro bash vyvolaný jako bash , /etc/zshrc a ~/.zshrc pro zsh, /etc/csh.cshrc a ~/.cshrc pro csh, soubor označený ENV proměnná pro shelly kompatibilní s POSIX/XSI, jako je dash, ksh a bash, když je vyvolána jako sh , $ENV pokud je nastaveno a ~/.mkshrc pro mksh atd.).

Když shell spustí skript nebo příkaz předaný na jeho příkazovém řádku, je to neinteraktivní, bez přihlášení skořápka. Takové shelly běží neustále:je velmi běžné, že když program volá jiný program, skutečně spustí malý skript v shellu, aby vyvolal tento jiný program. Některé shelly v tomto případě čtou spouštěcí soubor (bash spustí soubor označený BASH_ENV proměnnou, zsh spustí /etc/zshenv a ~/.zshenv ), ale to je riskantní:shell lze vyvolat v nejrůznějších kontextech a sotva můžete udělat něco, co by něco nerozbilo.

Související:Rozumíte tc qdisc a iperf?

Trochu zjednodušuji, krvavé podrobnosti naleznete v příručce.


Linux
  1. Rozdíl mezi vestavěným příkazem a příkazem, který není?

  2. Rozdíl mezi uvozovkami „…“, „…“, $“…“ a $“…“ ve skořápce?

  3. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  1. Rozdíl mezi 2>&-, 2>/dev/null, |&, &>/dev/null A>/dev/null 2>&1?

  2. Rozdíl v použití mezi proměnnými shellu a proměnnými prostředí?

  3. Rozdíl mezi Eot a Eof?

  1. Rozdíl mezi [0-9], [[:digit:]] a D?

  2. Rozdíl mezi Snat a Masquerade?

  3. Rozdíl mezi $HOME a '~' (tilda)?