Unterschied zwischen einer Anmelde-Shell und einer Nicht-Anmelde-Shell
- Was ist eine Shell in UNIX-basierten Systemen?
- Was ist eine Login-Shell in UNIX-basierten Systemen?
- Was ist eine Non-Login-Shell in UNIX-basierten Systemen?
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.
- Der Anmeldevorgang führt
/etc/profile
aus. /etc/profile
führt die Skripte in/etc/profile.d
aus- Der Anmeldeprozess führt
~/.bash_profile
aus. ~/.bash_profile
führt~/.bashrc
aus~/.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.
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.
- Nicht-Login-Prozess führt
~/.bashrc
aus ~/.bashrc
führt/etc/bashrc
aus/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.