¿Quién soy después de que su no muestra la nueva identificación de usuario?

9

¿Por qué cuando cambio de usuario su <username>y luego ejecuto who am isale el usuario anterior en el que estaba conectado y no al que he cambiado?

usuario1091856
fuente

Respuestas:

13

Probablemente estés ejecutando el comando incorrecto.

  • whoestá destinado a mostrar quién ha iniciado sesión, es decir, qué usuario posee el terminal. Devuelve una línea como esta:

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoamies para mostrarle cuál es la identificación de usuario efectiva de la persona que lo ejecuta. Devuelve un solo nombre, como este (y es equivalente a la ejecución id -un):

    ckhan
    

Creo que puede haber escrito literalmente who am ien la terminal, que se ejecutó whocon dos argumentos ignorados ( am, i).

Ver man whoy man whoamipara más detalles.

ckhan
fuente
2
Los dos argumentos amy ino se ignoran, incluso están especificados por POSIX: "En la configuración regional POSIX, limite la salida para describir al usuario que invoca, equivalente a la -mopción".
xhienne
3

Según mi página de manual de Ubuntu 12.04.2 para el comando 'who', 'who am i' (o who con cualquiera de los dos argumentos) es lo mismo que 'who -m' y debería darle el nombre de host y el usuario asociados con STDIN. Sin embargo, no obtengo salida con 'who am i'. O la página del manual es incorrecta o el comando tiene un error. Independientemente, como respondió previamente ckhan, el comando 'whoami' le dará el nombre de usuario para su identificación de usuario efectiva. Al menos en Ubuntu 12.04.2, ninguno de id, 'who am i' o 'whoami' le dará solo el nombre de usuario de la persona que inició sesión en el terminal actual. Como solución alternativa, puede obtener eso con:

who | sed 's/ .*//'
Marnix A. van Ammers
fuente
Tenga en cuenta que esto es específico de Linux. Esto devuelve el nombre de usuario original en Unix / SunOS.
Underverse
3

Solución alternativa :

ls -l `tty` | awk '{print $3}'

que funciona como reemplazo de who am i | awk '{print $1}'. Explicación a continuación:

En muchos sistemas " who am i" es equivalente a " who -m". ¡El problema aquí es que con algunos terminales , " who -m" no devuelve nada!

Ejemplo # 1 ejecutado desde un terminal 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 ~ # 

pero Ejemplo # 2 desde un terminal gnome (misma computadora, mismos comandos)

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 ~ # 

Esto parece ser una consecuencia de que gnome-terminal no agrega entradas utmp ...

Thomas Baeckeroot
fuente
No analizar ls! Use en su statlugar: stat -c '%U' "$(tty)"probablemente tampoco debería analizar who am i, ya que los nombres de usuario pueden contener espacios en algunos casos raros.
wjandrea