“su”之后的“我是谁”不显示新用户 ID?

“su”之后的“我是谁”不显示新用户 ID?

为什么当我切换用户su <username>然后执行时who am i输出的是我登录的前一个用户而不是我切换到的用户?

答案1

您可能运行了错误的命令。

  • who旨在显示谁登录,即哪个用户拥有该终端。它返回这样的一行:

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoami是为了向您显示运行它的人的有效用户 ID 是什么。它只返回一个名称,如下所示(相当于 running id -un):

    ckhan
    

who am i我认为您可能已经在终端上逐字输入,该终端运行时who带有两个被忽略的参数(am, i)。

请参阅man whoman whoami了解更多详细信息。

答案2

解决方法:

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

可以作为 的替代品who am i | awk '{print $1}'。解释如下:

在许多系统上“ who am i”等同于“ who -m”。这里的问题是,对于一些终端, " who -m" 什么也不返回!

示例 #1 从 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 ~ # 

但来自 gnome 终端的示例#2(同一台计算机,相同的命令)

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

这似乎是 gnome-terminal 未添加 utmp 条目的结果......

答案3

根据我的 Ubuntu 12.04.2 手册页中的“who”命令,“who am i”(或带有任意两个参数的 who)与“who -m”相同,并且应该为您提供与 STDIN 关联的主机名和用户。但是我没有得到“我是谁”的输出。手册页错误或命令有错误。无论如何,正如 ckhan 之前回答的那样,“whoami”命令将为您提供有效用户 ID 的用户名。至少在 Ubuntu 12.04.2 中,id、'who am i' 或 'whoami' 都不会只提供当前终端登录者的用户名。作为解决方法,您可以通过以下方式获得:

who | sed 's/ .*//'

答案4

就我而言,用户 shell 位于/bin/false/etc/passwd 中,这就是 su 没有返回错误的原因。换句话说,su somebody失败了,没有错误,我仍然是 root,而不是某个人。

解决方案是su somebody -s /bin/bash或者任何你想要的 shell。然后显然whoami可以按预期工作。

相关内容