Perché quando cambio utente su <username>
e poi eseguo who am i
viene emesso l'utente precedente con il quale sono stato registrato e non quello a cui sono passato?
Perché quando cambio utente su <username>
e poi eseguo who am i
viene emesso l'utente precedente con il quale sono stato registrato e non quello a cui sono passato?
Risposte:
Probabilmente stai eseguendo il comando sbagliato.
who
ha lo scopo di mostrare chi ha effettuato l'accesso, ovvero quale utente possiede il terminale. Restituisce una riga come questa:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
significa mostrarti qual è l'ID utente effettivo della persona che lo esegue. Restituisce un solo nome, come questo (ed equivale a correre id -un
):
ckhan
Penso che potresti aver letteralmente digitato who am i
sul terminale, che correva who
con due argomenti ignorati ( am
, i
).
Vedi man who
e man whoami
per maggiori dettagli.
Secondo la mia pagina man Ubuntu 12.04.2 per il comando 'who', 'who am i' (o who with any any qualunque argomento) è lo stesso di 'who -m' e dovrebbe darti il nome host e l'utente associato a STDIN. Tuttavia, non ottengo alcun output con 'who am I'. La pagina man è sbagliata o il comando ha un bug. Indipendentemente, come precedentemente risposto da ckhan, il comando 'whoami' ti darà il nome utente per il tuo ID utente effettivo. Almeno in Ubuntu 12.04.2, nessuno di id, 'who am i' o 'whoami' ti fornirà solo il nome utente della persona che ha effettuato l'accesso sul terminale corrente. Come soluzione alternativa potresti ottenerlo con:
who | sed 's/ .*//'
Soluzione alternativa :
ls -l `tty` | awk '{print $3}'
che funziona come sostituto di who am i | awk '{print $1}'
. Spiegazione di seguito:
Su molti sistemi " who am i
" equivale a " who -m
". Il problema qui è che con alcuni terminali " who -m
" non restituisce nulla!
L'esempio n. 1 viene eseguito da un terminale 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 ~ #
ma Esempio n. 2 da un terminale gnome (stesso computer, stessi comandi)
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 ~ #
Questa sembra essere una conseguenza del fatto che gnome-terminal non ha aggiunto voci utmp ...
stat
invece: stat -c '%U' "$(tty)"
probabilmente non dovresti nemmeno analizzare who am i
, poiché i nomi utente possono contenere spazi in alcuni rari casi.
am
ei
non vengono ignorati, vengono persino specificati da POSIX: "Nella locale POSIX, limitare l'output alla descrizione dell'utente che invoca, equivalente-m
all'opzione".