Warum wird beim Wechseln des Benutzers su <username>
und anschließenden Ausführen who am i
der vorherige Benutzer ausgegeben, als den ich angemeldet war, und nicht der Benutzer, zu dem ich gewechselt habe?
Warum wird beim Wechseln des Benutzers su <username>
und anschließenden Ausführen who am i
der vorherige Benutzer ausgegeben, als den ich angemeldet war, und nicht der Benutzer, zu dem ich gewechselt habe?
Antworten:
Sie führen wahrscheinlich den falschen Befehl aus.
who
soll zeigen, wer angemeldet ist, dh welchem Benutzer das Terminal gehört. Es gibt eine Zeile wie folgt zurück:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
soll Ihnen zeigen, wie die effektive Benutzer-ID der Person lautet, die sie ausführt. Es gibt nur einen einzigen Namen wie diesen zurück (und entspricht dem Ausführen id -un
):
ckhan
Ich denke, Sie haben möglicherweise buchstäblich who am i
am Terminal getippt , das who
mit zwei ignorierten Argumenten ( am
, i
) lief.
Siehe man who
und man whoami
für weitere Details.
Gemäß meiner Ubuntu 12.04.2-Manpage für den Befehl 'who' ist 'who am i' (oder who mit zwei beliebigen Argumenten) identisch mit 'who -m' und sollte Ihnen den mit STDIN verknüpften Hostnamen und Benutzer geben. Ich bekomme jedoch keine Ausgabe mit 'wer bin ich'. Entweder ist die Manpage falsch oder der Befehl hat einen Fehler. Unabhängig davon, wie zuvor von ckhan beantwortet, gibt Ihnen der Befehl 'whoami' den Benutzernamen für Ihre effektive Benutzer-ID. Zumindest in Ubuntu 12.04.2 gibt Ihnen weder ID noch "Wer bin ich" oder "Whoami" nur den Benutzernamen der Person, die am aktuellen Terminal angemeldet ist. Als Workaround können Sie dies erreichen mit:
who | sed 's/ .*//'
Problemumgehung :
ls -l `tty` | awk '{print $3}'
das funktioniert als ersatz von who am i | awk '{print $1}'
. Erklärung unten:
Auf vielen Systemen who am i
entspricht " who -m
" " ". Das Problem hierbei ist, dass bei einigen Terminals " who -m
" nichts zurückgibt!
Beispiel 1 läuft von einem xfce4-Terminal aus
Pegasus ~ # whoami
root
Pegasus ~ # who am i
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who -m
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ # who am i | awk '{print $1}'
thomas
Pegasus ~ #
aber Beispiel # 2 von einem Gnom-Terminal (gleicher Computer, gleiche Befehle)
Pegasus ~ # whoami
root
Pegasus ~ # who am i
Pegasus ~ # who -m
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ #
Dies scheint eine Folge davon zu sein, dass das Gnome-Terminal keine utmp-Einträge hinzufügt…
stat
stattdessen: stat -c '%U' "$(tty)"
Sie sollten wahrscheinlich auch nicht analysieren who am i
, da Benutzernamen in einigen seltenen Fällen Leerzeichen enthalten können.
am
undi
werden nicht ignoriert, werden sie sogar von POSIX angegeben: „In der POSIX locale, begrenzen die Ausgabe zu der Beschreibung des rufenden Benutzer, das entspricht der-m
Option.“