`quem sou eu depois de` su` não mostrar o novo ID do usuário?

9

Por que quando troco de usuário su <username>e, em seguida, executo, who am igera o usuário anterior no qual eu estava logado e não aquele para o qual mudei?

user1091856
fonte

Respostas:

13

Você provavelmente está executando o comando errado.

  • whoserve para mostrar quem está logado, ou seja, qual usuário é o proprietário do terminal. Retorna uma linha como esta:

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoamiserve para mostrar qual é o ID do usuário efetivo da pessoa que o executa. Ele retorna apenas um único nome, como este (e é equivalente à execução id -un):

    ckhan
    

Eu acho que você pode ter digitado literalmente who am ino terminal, que rodava whocom dois argumentos ignorados ( am, i).

Veja man whoe man whoamipara mais detalhes.

ckhan
fonte
2
Os dois argumentos ame inão são ignorados, eles são especificados até pelo POSIX: "No código do idioma POSIX, limite a saída para descrever o usuário que está chamando, equivalente à -mopção".
precisa saber é
3

De acordo com minha página de manual do Ubuntu 12.04.2, o comando 'who', quem sou eu (ou quem com dois argumentos) é o mesmo que 'who -m' e deve fornecer o nome do host e o usuário associado ao STDIN. No entanto, não recebo saída com 'quem sou eu'. A página de manual está incorreta ou o comando possui um erro. Independentemente disso, conforme respondido anteriormente por ckhan, o comando 'whoami' fornecerá o nome de usuário para seu ID de usuário efetivo. Pelo menos no Ubuntu 12.04.2, nenhum dos id, 'quem sou eu' ou 'whoami' fornecerá apenas o nome de usuário da pessoa logada no terminal atual. Como solução alternativa, você pode obter isso com:

who | sed 's/ .*//'
Marnix A. van Ammers
fonte
Observe que isso é específico do Linux. Isso retorna o nome de usuário original no Unix / SunOS.
Underverse
3

Solução alternativa :

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

que funciona como substituto de who am i | awk '{print $1}'. Explicação abaixo:

Em muitos sistemas " who am i" é equivalente a " who -m". O problema aqui é que, com alguns terminais , " who -m" não retorna nada!

Exemplo # 1 executado a partir de um 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 ~ # 

mas o exemplo 2 de um terminal gnome (o mesmo computador, os mesmos 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 ~ # 

Isso parece ser uma conseqüência do gnome-terminal não adicionar entradas utmp…

Thomas Baeckeroot
fonte
Não analise sl! Em statvez disso, use : stat -c '%U' "$(tty)"você provavelmente também não deve analisar who am i, pois os nomes de usuário podem conter espaços em alguns casos raros.
Wjandrea