Unterschied zwischen einer Anmelde-Shell und einer Nicht-Anmelde-Shell

Fumbani Banda 22 März 2022
  1. Was ist eine Shell in UNIX-basierten Systemen?
  2. Was ist eine Login-Shell in UNIX-basierten Systemen?
  3. Was ist eine Non-Login-Shell in UNIX-basierten Systemen?
Unterschied zwischen einer Anmelde-Shell und einer Nicht-Anmelde-Shell

Dieses Tutorial erklärt den Unterschied zwischen einer Login-Shell und einer Nicht-Login-Shell in UNIX-basierten Systemen.

Was ist eine Shell in UNIX-basierten Systemen?

Eine Shell in UNIX-basierten Systemen ist eine Schnittstelle zwischen dem Benutzer und dem Kernel des Betriebssystems. Es nimmt Eingaben vom Benutzer entgegen und sendet sie an den Kernel, und es bringt auch das Ergebnis vom Kernel zum Benutzer.

Es gibt zwei Arten von Shells, die Login-Shell und die Nicht-Login-Shell.

Jede Shell führt nach dem Start eine Reihe von Startskripten aus, um die Umgebung einzurichten. Die Skripte haben unterschiedliche Verwendungszwecke und wirken sich alle auf die Umgebung aus.

Nachfolgende Skripts können die Werte überschreiben, die die vorherigen Skripts eingerichtet haben.

Was ist eine Login-Shell in UNIX-basierten Systemen?

Eine Login-Shell ist der erste Prozess, der nach erfolgreicher Anmeldung mit /bin/login durch Auslesen der /etc/passwd-Datei gestartet wird. Die Login-Shell wird unter Ihrer Benutzer-ID ausgeführt.

Eine Login-Shell wird ausgeführt, wenn Sie sich über das Terminal anmelden, zu einem anderen Benutzer wechseln oder SSH verwenden.

Sobald eine Login-Shell gestartet wird, führt sie eine Sammlung von Startskripten aus, um die Shell-Umgebung einzurichten. Die folgenden Skripte werden ausgeführt.

  1. Der Anmeldevorgang führt /etc/profile aus.
  2. /etc/profile führt die Skripte in /etc/profile.d aus
  3. Der Anmeldeprozess führt ~/.bash_profile aus.
  4. ~/.bash_profile führt ~/.bashrc aus
  5. ~/.bashrc führt /etc/bashrc aus

Der folgende Befehl wird verwendet, um anzuzeigen, ob die Shell eine Login-Shell ist oder nicht.

echo  $0

Das Erhalten von -bash oder -su als Ausgabe zeigt an, dass die Shell eine Login-Shell ist. Beachten Sie das - Symbol vor der Ausgabe.

In der Abbildung unten hat die Ausgabe des Befehls echo $0 ein - vor dem bash. Es zeigt, dass die Shell eine Login-Shell ist.

Login-Shell

Was ist eine Non-Login-Shell in UNIX-basierten Systemen?

Die Login-Shell startet eine Nicht-Login-Shell. Es kann eine Shell sein, die mit einem Prozess ohne Anmeldung oder von einer anderen Shell startet. Ein Prozess verwendet den Namen der ausführbaren Shell-Datei, um eine Nicht-Login-Shell zu starten.

Wenn Sie die Bash-Shell als Nicht-Login-Shell ausführen, werden die folgenden Skripts ausgeführt.

  1. Nicht-Login-Prozess führt ~/.bashrc aus
  2. ~/.bashrc führt /etc/bashrc aus
  3. /etc/bashrc führt /etc/profile.d/ aus

Führen Sie den folgenden Befehl aus, um festzustellen, ob eine Shell eine Nicht-Login-Shell ist oder nicht.

echo $0

Wenn die Ausgabe bash oder su ohne ein vorangestelltes --Symbol ist, ist die Shell eine Non-Login-Shell.

Wir führen den Befehl echo $0 im Bild unten aus, und die Ausgabe zeigt ein - vor dem bash. Das bedeutet, dass wir eine Login-Shell verwenden.

Um eine Nicht-Login-Shell zu starten, geben wir den Namen der ausführbaren Shell-Datei ein, in unserem Fall bash. Wir führen den Befehl echo $0 erneut aus, um zu sehen, um welchen Shell-Typ es sich bei der neu gestarteten Shell handelt; die Ausgabe des echo-Befehls ist bash ohne -. Das bedeutet, dass die neue Shell eine Non-Login-Shell ist.

Nonlogin-Shell

Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Verwandter Artikel - Linux Shell