Antworten:
Wenn Sie ein normaler Benutzer von Ubuntu Desktop sind, ist die einzige Anmeldeshell ... Ihr Desktop (Sie geben ein Passwort ein, um hineinzukommen, oder?)? Nun, technisch gesehen ist es eine Login-Shell, die eine GUI startet, aber das bringt uns in die Fachsprache. Und ja, es werden die Einstellungen eingelesen.profile
Das einzige Mal, dass Sie (ein normaler Benutzer) wahrscheinlich eine Anmeldeshell sehen, die wie eine Anmeldeshell aussieht, ist, wenn Sie Probleme mit Ihrem Desktop haben und mit der Tastenkombination Ctrl+ Alt+ zu einem virtuellen Terminal wechseln F1.
ssh
(oder lokale Verbindung mit ssh localhost
)bash -l
(oder sh -l
) simulierenroot
Login-Shell mitsudo -i
sudo -u username -i
root
root
mit (und ihrem Passwort)su - username
sudo login
Befehl, um den Benutzer zu wechseln~/.pam_environment
(nur Variablen, keine Bash-Befehle!), Melden Sie sich ab, melden Sie sich an und beobachten Sie, wie alles auf magische Weise auf dem Desktop und im Gnome-Terminal erscheint!
/etc/profile
, /etc/profile.d
oder ~/.profile
.
Ich denke nicht, dass eine richtige Antwort ohne "Fachjargon" gegeben werden kann. Da diese Frage die erste ist, die in Google für die Abfrage "Was ist eine Anmeldeshell?" Auftaucht, gebe ich im Folgenden eine korrektere Antwort:
Die Login-Shell ist einfach eine Shell, die als Login-Shell bezeichnet wurde. Dies bedeutet nicht , dass die Shell nach der Anmeldung angezeigt wird. In der Regel teilt eine Anwendung, die Sie anmeldet, der Shell mit, dass sie als Anmeldeshell gestartet wird. Es gibt die folgenden Möglichkeiten, um der Shell mitzuteilen, dass es sich um eine Login-Shell handeln soll:
-l
oder --login
Argument, vorausgesetzt, es weiß es (ich kenne keine Shells, die nicht wissen -l
, sondern --login
nur von einigen Shells unterstützt werden).argv[0]
set to -{some_string}
(dh mit HYPHEN-MINUS, das vor einer normalen argv[0]
oder einer anderen Zeichenkette steht). Dies ist, was ssh und su tun: su läuft nur mit -su
as argv[0]
(Hallo, jeder denkt, das argv[0]
hat etwas mit dem Namen der aktuell laufenden ausführbaren Datei zu tun), ssh läuft mit zsh, -zsh
wenn der Benutzer /bin/zsh
als Shell festgelegt hat.Die Logizität der Shell hat absolut nichts damit zu tun, dass jemand Sie nach einem Passwort fragt oder ein anderes Authentifizierungsverfahren durchführt. Einige Programme wie ssh oder login (oder einige Terminalemulatoren wie urxvt) führen Shells als Login aus argv[0]
, die mit einem HYPHEN-MINUS beginnen. Einige wie su oder sudo (oder zsh: siehe -
den im Abschnitt PRECOMMAND MODIFIERS in beschriebenen Precommand Modifier man zshmisc
) tun dies nicht standardmäßig, können dies aber mitteilen . Einige haben die einzige Möglichkeit, der Shell mit ihrem Argument (dh bash -l
ssh mit einem Befehlsargument, das ssh explizit mitteilt, was auf der Remote-Seite ausgeführt werden soll) mitzuteilen, dass es sich um die Login-Shell handelt .
Im Allgemeinen ist es besser, zuerst die Dokumentation des Programms zu konsultieren, das zum Aufrufen der Shell verwendet wird, um festzustellen, ob die Shell als Anmelde-Shell fungiert, und anschließend einige Tests durchzuführen, um festzustellen, ob die App eine Anmelde-Shell startet (z. B. durch Hinzufügen echo
zu .profile
).
argv[0]
um eine der exec*
Funktionen, natürlich und unvermeidlich: Sie immer liefern beide argv[0]
und den Pfad zum Befehl ausführt tatsächlich bei der Verwendung von exec*
Funktionen, auch wenn Sie nicht wollen , jemals argv[0]
von Befehl ausgeführt , anders sein. Andere Sprachen bieten ihre eigenen Wege. Speziell bash erlaubt die Verwendung von exec -a new_argv0 bash
, aber dies ersetzt natürlich die aktuell ausgeführte Shell durch das, was Sie exec
bearbeitet haben. Möglicherweise müssen Sie subshell ( (exec -a -zsh zsh)
)
$0
, und vielleicht ist auch etwas anderes (Variable, Einstellung usw.) festgelegt, damit die Logizität der Shell in der Konfigurationsdatei erkannt wird. Aber wer stört es eigentlich, dies zu erkennen, damit es einen Unterschied macht? Das ist alles was ich weiß.