GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unterschied zwischen Login-Shell und Nicht-Login-Shell?

Ich verstehe den grundlegenden Unterschied zwischen einer interaktiven Shell und einer nicht interaktiven Shell. Aber was genau unterscheidet eine Login-Shell von einer Nicht-Login-Shell?

Können Sie Beispiele für die Verwendung einer Nicht-Login-Interaktion geben Schale?

Akzeptierte Antwort:

Eine Anmelde-Shell ist der erste Prozess, der unter Ihrer Benutzer-ID ausgeführt wird, wenn Sie sich für eine interaktive Sitzung anmelden. Der Login-Prozess weist die Shell an, sich wie eine Login-Shell mit einer Konvention zu verhalten:Übergabe des Arguments 0, das normalerweise der Name der ausführbaren Shell-Datei ist, mit einem - Zeichen vorangestellt (z. B. -bash während es normalerweise bash wäre . Login-Shells lesen normalerweise eine Datei, die Dinge wie das Setzen von Umgebungsvariablen tut:/etc/profile und ~/.profile für die traditionelle Bourne-Shell ~/.bash_profile zusätzlich für bash /etc/zprofile und ~/.zprofile für zsh, /etc/csh.login und ~/.login für csh usw.

Wenn Sie sich an einer Textkonsole oder über SSH oder mit su - anmelden erhalten Sie ein interaktives Login Hülse. Wenn Sie sich im grafischen Modus (auf einem X-Display-Manager) anmelden, erhalten Sie keine Login-Shell, sondern einen Sitzungs- oder Fenstermanager.

Es kommt selten vor, dass eine nicht interaktive Anmeldung ausgeführt wird Shell, aber einige X-Einstellungen tun dies, wenn Sie sich mit einem Display-Manager anmelden, um das Lesen der Profildateien zu veranlassen. Andere Einstellungen (dies hängt von der Distribution und vom Displaymanager ab) lauten /etc/profile und ~/.profile explizit, oder lesen Sie sie nicht. Eine andere Möglichkeit, eine nicht interaktive Login-Shell zu erhalten, besteht darin, sich remote mit einem Befehl anzumelden, der über die Standardeingabe übergeben wird, die kein Terminal ist, z. ssh example.com <my-script-which-is-stored-locally (im Gegensatz zu ssh example.com my-script-which-is-on-the-remote-machine , die eine nicht interaktive Shell ohne Anmeldung ausführt).

Wenn Sie eine Shell in einem Terminal in einer bestehenden Sitzung starten (Bildschirm, X-Terminal, Emacs-Terminalpuffer, eine Shell in einer anderen usw.), erhalten Sie eine interaktive Nicht-Anmeldung Hülse. Diese Shell liest möglicherweise eine Shell-Konfigurationsdatei (~/.bashrc für bash aufgerufen als bash , /etc/zshrc und ~/.zshrc für zsh /etc/csh.cshrc und ~/.cshrc für csh die durch ENV angegebene Datei Variable für POSIX/XSI-kompatible Shells wie dash, ksh und bash, wenn sie als sh aufgerufen wird , $ENV falls gesetzt und ~/.mkshrc für mksh usw.).

Wenn eine Shell ein Skript oder einen Befehl ausführt, der auf ihrer Befehlszeile übergeben wird, handelt es sich um eine nicht interaktive Anmeldung Hülse. Solche Shells laufen ständig:Wenn ein Programm ein anderes Programm aufruft, führt es häufig ein kleines Skript in einer Shell aus, um dieses andere Programm aufzurufen. Einige Shells lesen in diesem Fall eine Startdatei (bash führt die durch BASH_ENV angegebene Datei aus Variable führt zsh /etc/zshenv aus und ~/.zshenv ), aber das ist riskant:Die Shell kann in allen möglichen Kontexten aufgerufen werden, und es gibt kaum etwas, was Sie tun können, was nicht etwas kaputt machen könnte.

Verwandte:Verständnis von tc qdisc und iperf?

Ich vereinfache ein wenig, siehe das Handbuch für die blutigen Details.


Linux
  1. Unterschied zwischen $HOME und '~' (Tilde)?

  2. Unterschied zwischen Cgroups und Namespaces

  3. Was ist der Unterschied zwischen &> und >&in bash?

  4. Unterschied zwischen '{}' und {} im Find-Befehl?

  5. Unterschied zwischen Befehlen im Bash-Skript und Befehlen im Terminal

Unterschied zwischen apt und apt-get erklärt

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Der Unterschied in der Verwendung zwischen Shell-Variablen und Umgebungsvariablen?

Unterschied zwischen Eot und Eof?

Unterschied zwischen [0-9], [[:digit:]] und D?

Was ist der Unterschied zwischen einer Konsole, einem Terminal und einer Shell?