为什么当我切换用户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 是什么。它只返回一个名称,如下所示(相当于 runningid -un
):ckhan
who am i
我认为您可能已经在终端上逐字输入,该终端运行时who
带有两个被忽略的参数(am
, i
)。
请参阅man who
和man 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
可以按预期工作。