Ich weiß nicht, ob dies in macOS der Fall ist, aber unter Linux sehe ich normalerweise nur einen Benutzer, wenn ich den Befehl who
and ausführe.w
Ist es normal, dass sich derselbe Benutzer zweimal angemeldet hat, aber von einem anderen TTY?
Ich weiß nicht, woher das zweite Konto mit demselben Benutzernamen stammt.
jen-air:~ jen$ who
jen console Aug 22 20:56
jen ttys000 Aug 23 08:39
jen-air:~ jen$ w
8:43 up 11:47, 2 users, load averages: 1.51 1.60 1.70
USER TTY FROM LOGIN@ IDLE WHAT
jen console - Wed20 11:46 -
jen s000 - 8:39 - w
Hier sind ein paar weitere Informationen darüber, was passiert, aus einer Unix-Perspektive auf niedrigerer Ebene. Es ist lang und geht über das hinaus, was Sie gefragt haben, könnte aber für Sie oder jemand anderen, der diese Seite weitergibt, interessant sein.
w
Wenn Sie sich das Handbuch des Befehls ( ) ansehen man w
, heißt es: "Das Dienstprogramm w druckt eine Zusammenfassung der aktuellen Aktivität auf dem System, einschließlich der Aktivitäten der einzelnen Benutzer." Das ist ein wenig vage und ein wenig irreführend. Insbesondere w
werden Sie über aktuelle Anmeldungen informiert . Anmeldungen werden in einer Datei namens /var/run/utmpx
. Es gibt gängige Bibliotheksmethoden zum Aktualisieren von utmpx
Einträgen, sodass jedes Programm, das eine Anmeldung aufzeichnen oder entfernen muss, dasselbe Verfahren verwendet.
w
liest die utmpx
Datei unter Verwendung dieser allgemeinen Bibliotheksroutinen und zeigt Informationen über aktuelle Anmeldesitzungen zusammen mit dem Vordergrundprozess an . Eine Anmeldesitzung kann viele Dinge gleichzeitig tun, aber nur ein Programm steht im Vordergrund. Alle anderen sind Hintergrund, was passiert, wenn Sie ein &
auf Ihren Befehl setzen oder drücken, control-Z
während ein Programm in einem Terminal läuft.
Eine Anmeldesitzung wird erstellt, wenn Sie sich über das integrierte Display bei Ihrem Computer anmelden. Wenn Sie die Benutzerumschaltung aktiviert haben, wird für jeden Benutzer eine Anmeldung aufgezeichnet, die bis zur Abmeldung aktiv bleibt. Und wenn Sie sich remote anmelden (z. B. mit ssh
), wird dafür ein Login aufgezeichnet. Jedes davon sollte in w
der Ausgabe von erscheinen.
Die meisten Terminalanwendungen, einschließlich Terminal.app und iTerm sowie xterm
X11.app, können Anmelde-Shells in einem Fenster oder einer Registerkarte erstellen. Wenn Sie in einer dieser Anwendungen ein neues Fenster erstellen, können Sie eine weitere Anmeldesitzung erhalten, die als weitere Zeile in angezeigt wird w
. Aber diese Anwendungen erstellen nicht unbedingt Login-Shells! Ob ein neues Fenster/Tab eine Login-Shell ist, wird normalerweise in den Einstellungen gesteuert. In iTerm2 können Sie beispielsweise unter Einstellungen > Profile > Allgemein > Befehl auswählen, ob eine Login-Shell oder ein anderes Programm gestartet werden soll. Wenn Sie dort einfach "bash" eingeben, erhalten Sie eine Shell, aber es wird keine Login -Shell sein.
Was ist also der Unterschied? Es ist subtil, aber nützlich, darüber Bescheid zu wissen.
Hier finden Sie eine gute Diskussion über Login-Shells im Vergleich zu regulären Shells: https://unix.stackexchange.com/questions/38175/difference-between-login-shell-and-non-login-shell . Aber wir können Folgendes zusammenfassen: Eine Login-Shell wird als erster Prozess gestartet, nachdem etwas ein Login in eingerichtet hat utmpx
. Eine Nicht-Login-Shell kann jederzeit von jedem Programm ausgeführt werden, ist aber nicht der erste Prozess nach einem Eintrag in utmpx
. (Technisch gesehen ist eine Login-Shell der führende Prozess in einer Prozessgruppe. Die Tatsache, dass sie normalerweise einen utmpx
Eintrag hat, ist beschreibend und nicht notwendig.)
Wenn Ihre Shell bash
wie die meisten ist, liest jede Instanz davon die .bashrc
Datei und führt sie aus. Wenn bash
es als Login-Shell ausgeführt wird, liest und führt es auch die Dateien .bash_profile
und aus. .profile
Diese Dateien können Anweisungen enthalten, die nur für alle neuen Sitzungen gelten sollten. Das ist die wichtigste praktische Sache, die man über Login-Shells wissen sollte. Das und Login-Shells erscheinen in w
.
Hier ist ein Experiment zur Veranschaulichung. Öffnen Sie ein neues Terminalfenster und führen Sie w
. Sie sollten so etwas sehen wie:
11:57 up 7 days, 59 mins, 5 users, load averages: 3.58 3.53 3.91
USER TTY FROM LOGIN@ IDLE WHAT
dgc console - 16Aug18 7days -
dgc s000 - 11:57 - w
s000
ist der Name des Terminals, das Sie ausführen w
. Es existiert im Dateisystem unter /dev/ttys000
. Normalerweise gibt es eine Eins-zu-Eins-Beziehung zwischen Login-Shells und Terminals, aber nicht immer.
Öffnen Sie nun ein neues Terminalfenster. Wechseln Sie zurück zum ersten und führen Sie w
erneut aus.
12:09 up 7 days, 1:11, 5 users, load averages: 5.35 4.35 4.05
USER TTY FROM LOGIN@ IDLE WHAT
dgc console - 16Aug18 7days -
dgc s000 - 11:38 - w
dgc s001 - 11:57 - -bash
Sie sehen eine neue Anmeldung auf s001
— /dev/ttys001
— das läuft -bash
. Dieser Bindestrich am Anfang ist eine Konvention, die Ihnen sagt, dass bash als Login-Shell läuft. Es gibt kein Vordergrundprogramm in diesem Terminal, also w
zeigt Ihnen die Shell selbst.
Wechseln Sie nun zurück zu Ihrem zweiten Fenster und führen Sie bash
. Was erwartest du?
12:13 up 7 days, 1:14, 5 users, load averages: 5.61 5.07 4.41
USER TTY FROM LOGIN@ IDLE WHAT
dgc console - 16Aug18 7days -
dgc s000 - 11:38 - w
dgc s001 - 11:57 - bash
Der Bindestrich ist weg. Das liegt daran, dass dieselbe Login-Session (Terminal) jetzt im Vordergrund eine Shell ausführt, die keine Login-Shell ist. Es ist ein Kind des Originals -bash
. Wenn Sie zurückblättern und tippen exit
, um die untergeordnete Bash zu beenden, sehen Sie das -bash
erneut.
Notieren Sie abschließend den console
Login. Das wird sich im normalen Gebrauch nie ändern. Es läuft normalerweise das Desktop-/Fenstersystem. Wenn Sie Ihren Mac einschalten und sich nicht anmelden, sich dann aber ssh
von einem anderen Computer aus anmelden, wird diese Zeile überhaupt nicht angezeigt. Es scheint immer im Leerlauf zu sein und es scheint immer nichts zu laufen – außer mit dem Bindestrich, weil es sich um eine Anmeldesitzung handelt.
Wenn ein Programm, das eine Anmeldesitzung erstellt hat, diese Anmeldung beendet, geht es zurück und entfernt den Eintrag aus utmpx
der Verwendung der allgemeinen Bibliotheksmethoden dafür. Und da es utmpx
sich im /var/run
Verzeichnis befindet, wird es automatisch entfernt, wenn Ihr Computer neu startet. Wenn Sie also Ihren Mac plötzlich ausschalten, während Sie angemeldet sind, sehen Sie nicht für immer gefälschte Anmeldungen.
Die standardmäßige Terminal-App in macOS öffnet ein zweites Login, wenn also ein who
Befehl w
in der Terminal-App ausgeführt wird, gibt es ein zweites Login.
Abhängig von Ihrer Umgebung und der Terminal-App zeigen einige Terminal-Emulations-Apps wie iTerm2 nur eine Anmeldung an.
Ja , es ist normal.
Die Konsole ist Ihr Desktop-Login und das zweite Login erscheint, nachdem Sie ein Terminal-Fenster geöffnet haben. Wenn Sie mehr als ein Terminalfenster/Tab geöffnet haben, wird für jedes ein entsprechender Eintrag angezeigt.
Ja, es ist normal. Wenn Sie einen Terminal-Multiplexer wie tmux oder screen verwenden, ist jeder „Tab“ eine separate Benutzersitzung.
Barmar