Por que quando troco de usuário su <username>
e, em seguida, executo, who am i
gera o usuário anterior no qual eu estava logado e não aquele para o qual mudei?
Por que quando troco de usuário su <username>
e, em seguida, executo, who am i
gera o usuário anterior no qual eu estava logado e não aquele para o qual mudei?
Respostas:
Você provavelmente está executando o comando errado.
who
serve 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)
whoami
serve 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 i
no terminal, que rodava who
com dois argumentos ignorados ( am
, i
).
Veja man who
e man whoami
para mais detalhes.
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/ .*//'
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…
stat
vez 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.
am
ei
nã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 à-m
opção".