`kim jestem` po tym, jak` su` nie pokazuje nowego identyfikatora użytkownika?


9

Dlaczego kiedy przełączam użytkownika, su <username>a następnie wykonuję dane who am iwyjściowe, poprzedni użytkownik, do którego mnie zalogowano, a nie ten, do którego się przełączyłem?

Odpowiedzi:


13

Prawdopodobnie używasz niewłaściwego polecenia.

  • whosł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)
    
  • whoamioznacza 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 ina terminalu, który działał whoz dwoma ignorowanymi argumentami ( am, i).

Zobacz man whoi man whoamipo więcej szczegółów.


2
Dwa argumenty ami inie są ignorowane, są nawet określone przez POSIX: „W ustawieniach regionalnych POSIX ogranicz wynik do opisu wywołującego użytkownika, równoważnego -mopcji”.
xhienne,

3

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/ .*//'

Pamiętaj, że jest to specyficzne dla systemu Linux. Zwraca oryginalną nazwę użytkownika w systemie Unix / SunOS.
Podważ

3

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 terminaliwho -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…


Nie analizuj ls! Użyj statzamiast 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.
wjandrea
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.