Unterschiede zwischen / usr / bin / login und / usr / bin / bash

3175
kiamlaluno

Terminal.app hat die Shells mit der Einstellung mit den Optionen Standard-Login-Shell (/ usr / bin / login) und Command (vollständiger Pfad) (die standardmäßig / usr / bin / bash als Pfad enthält) geöffnet.

Die Option, die ich gefunden habe, ist standardmäßig die Standard-Login-Shell (/ usr / bin / login) .

Was ist der Unterschied zwischen / usr / bin / login und / usr / bin / bash ? Welches sollte als Standardshell gewählt werden?

1

5 Antworten auf die Frage

4
jerseyboy

Ein praktischer Unterschied besteht darin, wie die resultierende Shell-Umgebung ihre anfänglichen Konfigurationseinstellungen liest.

/ usr / bin / login gibt eine Login-Shell an. Ich denke, dass dies den Authentifizierungsprozess auslöst, aber Sie sehen möglicherweise keine sichtbaren Authentifizierungsinteraktionen, wenn Sie bereits angemeldet sind. Wenn Ihre Login-Shell nicht bash ist, wird sie beim Login natürlich anstelle von bash aufgerufen.

bash ist eine Shell, die weiß, ob sie als Login-Shell aufgerufen wurde oder nicht. Eine Bash-Login-Shell liest .bash_profile oder .bash_login oder .profile - nur eine in dieser Reihenfolge. Eine Nicht-Login-Shell liest kein .profile, sondern liest von .bashrc. Dies ist ein normales bash-Verhalten auf modernen * nix-Plattformen, aber es kann schwierig sein, seltsame Verhaltensweisen zu erkennen, wenn Sie nicht verstehen, was los ist.

Sie können beispielsweise eine "Login" -Shell über das Terminal öffnen und einen Satz Umgebungsvariablen (z. B. von Ihrem .profile) abrufen, dann "bash" eingeben und einen völlig anderen Satz von Variablen (von .bashrc plus) erhalten alle Variablen, die exportiert wurden, abzüglich der Variablen, die nicht PATH kann insbesondere bei wiederholten oder fehlenden Einträgen verstümmelt werden.

3
garyjohn

/ usr / bin / login ist keine Shell; Es ist ein Programm, das zum Anmelden an einem System verwendet wird. Es verwaltet den Prozess der Anmeldung an einem System. Als Benutzer eines ordnungsgemäß konfigurierten Systems sollten Sie sich niemals mit / usr / bin / login beschäftigen müssen. Wenn Sie trotzdem neugierig sind, lesen Sie

man login 

Eine Shell wird ausgeführt, nachdem der Anmeldeprozess abgeschlossen ist. Es gibt dem Benutzer eine textbasierte Befehlszeilenschnittstelle zu den Einrichtungen des Betriebssystems, einschließlich der Ausführung anderer Programme. / usr / bin / bash ist eine gute Wahl für eine Standard-Shell. Sie können mehr über bash lesen, indem Sie ausführen

man bash 

Beide man- Befehle können an der Shell-Eingabeaufforderung ausgeführt werden.

In Terminal.app ist standardmäßig "usr / bin / login" als Standardshell ausgewählt. Deshalb frage ich. kiamlaluno vor 13 Jahren 0
Ich kenne die Antwort nicht. Ich benutze keinen Mac, aber ich habe gerade mit den Terminaleinstellungen auf dem MacBook Pro meiner Frau experimentiert. Der einzige Unterschied, den ich zwischen diesen beiden Einstellungen mit "ps -fu username" sehen konnte, war, dass die Auswahl von "bash" dazu führte, dass "-q" zu den Argumenten für die Anmeldung hinzugefügt wurde. Ich dachte, dass die Shell eines zweiten Terminals ein Nachkomme des ersten Logins wäre, wenn / usr / bin / login nicht die Standardshell wäre, aber ich konnte nicht herausfinden, wie man ein zweites Terminal öffnet. garyjohn vor 13 Jahren 0
1
DVK

Dies sind zwei sehr unterschiedliche Dinge, und es ist nur üblich, dass beide normalerweise am Anfang des Loggens in einem Benutzer ausgeführt werden und beide eine Konfigurations-Dot-Datei (.login und .bashrc) ausführen, die im Wesentlichen Shellskripte sind. Darüber hinaus ermöglicht bash, wie viele moderne Shells, auch das Wechseln zwischen Benutzern, was einer der Hauptzwecke von istlogin

Im Detail:

login ist ein Programm zum Anmelden eines Benutzers, an dessen Ende die Shell (auch Kommandozeileninterpreter) ausgeführt wird.

login weiß nur, wie eine Sache auszuführen ist - melden Sie sich bei einem Benutzer an (authentifizieren Sie sich mit Benutzername / Passwort, legen Sie einige Umgebungsvariablen wie TERM und PATH fest und führen Sie ein paar Anmeldeaufgaben für die Anmeldung aus.) Weitere Informationen finden Sie unter dem Link.

Eine Unix-Shell (von der bash ein Beispiel ist) ist ein Befehlszeileninterpreter, der mit einem Skriptinterpreter gekoppelt ist. Seine Funktion besteht darin, Eingaben (vom Benutzer oder programmgesteuert) zu akzeptieren und angeforderte Befehle auszuführen.

Soweit mir bekannt ist, kann login nicht als Shell verwendet werden, da es keine Funktionalität eines Befehlszeileninterpreters hat.

Sehen Sie, was ich zur ursprünglichen Frage hinzugefügt habe. Terminal.app erlaubt es, das Login als Standard-Login festzulegen. Dies ist der Standardwert. kiamlaluno vor 13 Jahren 0
0
akira
% man login  login is used when signing onto a system. It can also be used to switch from one user to another at any time (most modern shells have support for this feature built into them, however).   % man bash  Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file. 

Wenn Sie also aus den beiden angegebenen Optionen eine Schale auswählen müssen, ist dies eindeutig ein Schlag.

-1
aladine

/ usr / bin / bash

Dies ist ein Linux-Kernel unter Mac OS. Dann denke ich, dass es fast das Gleiche ist, wenn Sie den Befehl in Linux bekommen. Die Standardshell sollte bash sein.

Ich verstehe nicht, was dein erster Satz bedeuten soll. Ignacio Vazquez-Abrams vor 13 Jahren 5