`chi sono io` dopo che` su` non mostra il nuovo ID utente?


9

Perché quando cambio utente su <username>e poi eseguo who am iviene emesso l'utente precedente con il quale sono stato registrato e non quello a cui sono passato?

Risposte:


13

Probabilmente stai eseguendo il comando sbagliato.

  • whoha 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)
    
  • whoamisignifica 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 isul terminale, che correva whocon due argomenti ignorati ( am, i).

Vedi man whoe man whoamiper maggiori dettagli.


2
I due argomenti ame inon vengono ignorati, vengono persino specificati da POSIX: "Nella locale POSIX, limitare l'output alla descrizione dell'utente che invoca, equivalente -mall'opzione".
Xhienne,

3

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

Nota che questo è specifico di Linux. Ciò restituisce il nome utente originale in Unix / SunOS.
Underverse

3

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 ...


Non analizzare ls! Usa statinvece: stat -c '%U' "$(tty)"probabilmente non dovresti nemmeno analizzare who am i, poiché i nomi utente possono contenere spazi in alcuni rari casi.
wjandrea,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.