Ist es normal, dass sich derselbe Benutzer zweimal angemeldet hat, aber von einem anderen TTY?

Ich weiß nicht, ob dies in macOS der Fall ist, aber unter Linux sehe ich normalerweise nur einen Benutzer, wenn ich den Befehl whoand 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

Antworten (4)

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.

wWenn 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 wwerden Sie über aktuelle Anmeldungen informiert . Anmeldungen werden in einer Datei namens /var/run/utmpx. Es gibt gängige Bibliotheksmethoden zum Aktualisieren von utmpxEinträgen, sodass jedes Programm, das eine Anmeldung aufzeichnen oder entfernen muss, dasselbe Verfahren verwendet.

wliest die utmpxDatei 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-Zwä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 wder Ausgabe von erscheinen.

Die meisten Terminalanwendungen, einschließlich Terminal.app und iTerm sowie xtermX11.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 utmpxEintrag hat, ist beschreibend und nicht notwendig.)

Wenn Ihre Shell bashwie die meisten ist, liest jede Instanz davon die .bashrcDatei und führt sie aus. Wenn bashes als Login-Shell ausgeführt wird, liest und führt es auch die Dateien .bash_profileund aus. .profileDiese 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

s000ist 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 werneut 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 wzeigt 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 -basherneut.

Notieren Sie abschließend den consoleLogin. 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 sshvon 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 utmpxder Verwendung der allgemeinen Bibliotheksmethoden dafür. Und da es utmpxsich im /var/runVerzeichnis 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 whoBefehl win 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.

Es ist ein wenig überraschend, dass es in den Einstellungen keine Einstellung gibt, um zu steuern, ob das Fenster ein Login ist oder nicht.

Ja, es ist normal. Wenn Sie einen Terminal-Multiplexer wie tmux oder screen verwenden, ist jeder „Tab“ eine separate Benutzersitzung.