Dlaczego kiedy przełączam użytkownika, su <username>
a następnie wykonuję dane who am i
wyjściowe, poprzedni użytkownik, do którego mnie zalogowano, a nie ten, do którego się przełączyłem?
Dlaczego kiedy przełączam użytkownika, su <username>
a następnie wykonuję dane who am i
wyjściowe, poprzedni użytkownik, do którego mnie zalogowano, a nie ten, do którego się przełączyłem?
Odpowiedzi:
Prawdopodobnie używasz niewłaściwego polecenia.
who
służy do pokazania, kto jest zalogowany, tj. który użytkownik jest właścicielem terminala. Zwraca taką linię:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
oznacza pokazanie, jaki jest efektywny identyfikator użytkownika osoby, która go obsługuje. Zwraca tylko jedną nazwę, taką jak ta (i jest równoważna z uruchomieniem id -un
):
ckhan
Myślę, że dosłownie napisałeś who am i
na terminalu, który działał who
z dwoma ignorowanymi argumentami ( am
, i
).
Zobacz man who
i man whoami
po więcej szczegółów.
Na mojej stronie podręcznika systemu Ubuntu 12.04.2 dla polecenia „kto”, „kim jestem” (lub kto z dwoma argumentami) jest taki sam jak „kto -m” i powinien dać ci nazwę hosta i użytkownika powiązanego ze STDIN. Jednak nie otrzymuję danych wyjściowych z „kim jestem”. Albo strona podręcznika jest nieprawidłowa, albo polecenie zawiera błąd. Niezależnie od tego, jak wcześniej odpowiedział ckhan, polecenie „whoami” poda nazwę użytkownika dla efektywnego identyfikatora użytkownika. Przynajmniej w Ubuntu 12.04.2 żaden identyfikator, „kim jestem” ani „whoami” nie podadzą tylko nazwy użytkownika zalogowanego na bieżącym terminalu. Aby obejść ten problem, możesz:
who | sed 's/ .*//'
Obejście :
ls -l `tty` | awk '{print $3}'
który działa jako zamiennik z who am i | awk '{print $1}'
. Objaśnienie poniżej:
W wielu systemach „ who am i
” jest równoważne z „ who -m
”. Problem polega na tym, że w przypadku niektórych terminali „ who -m
” nic nie zwraca!
Przykład nr 1 jest uruchamiany z terminala xfce4
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 ~ #
ale przykład # 2 z terminala gnome (ten sam komputer, te same polecenia)
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 ~ #
Wydaje się, że jest to konsekwencja braku dodawania wpisów utmp przez terminal gnome…
stat
zamiast tego: stat -c '%U' "$(tty)"
Prawdopodobnie nie powinieneś również parsować who am i
, ponieważ nazwy użytkowników mogą zawierać spacje w rzadkich przypadkach.
am
ii
nie są ignorowane, są nawet określone przez POSIX: „W ustawieniach regionalnych POSIX ogranicz wynik do opisu wywołującego użytkownika, równoważnego-m
opcji”.