为什么当我切换用户su <username>
然后执行时who am i
输出的是我之前登录的用户而不是我切换到的用户?
ckh*_*han 14
您可能运行了错误的命令。
who
用于显示谁登录,即哪个用户拥有终端。它返回这样一行:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
Run Code Online (Sandbox Code Playgroud)whoami
是为了向您展示运行它的人的有效用户 ID。它只返回一个名称,如下所示(相当于 running id -un
):
ckhan
Run Code Online (Sandbox Code Playgroud)我想您可能已经who am i
在终端上按字面键入了,它运行时who
带有两个被忽略的参数 ( am
, i
)。
查看man who
和man whoami
了解更多详情。
解决方法:
\n\nls -l `tty` | awk \'{print $3}\'\n
Run Code Online (Sandbox Code Playgroud)\n\n可以作为 的替代品who am i | awk \'{print $1}\'
。解释如下:
在许多系统上“ who am i
”等同于“ who -m
”。\n这里的问题是,对于某些终端,“ who -m
”不返回任何内容!
示例 #1 从 xfce4 终端运行
\n\nPegasus ~ # whoami\nroot\nPegasus ~ # who am i\nthomas pts/1 2017-08-19 11:15 (:0.0)\nPegasus ~ # who -m\nthomas pts/1 2017-08-19 11:15 (:0.0)\nPegasus ~ # who\nthomas tty8 2017-08-19 10:18 (:0)\nthomas pts/1 2017-08-19 11:15 (:0.0)\nthomas pts/5 2017-08-19 16:16 (:0.0)\nPegasus ~ # who am i | awk \'{print $1}\'\nthomas\nPegasus ~ # \n
Run Code Online (Sandbox Code Playgroud)\n\n但是\n来自 gnome 终端的示例#2(同一台计算机,相同的命令)
\n\nPegasus ~ # whoami\nroot\nPegasus ~ # who am i\nPegasus ~ # who -m\nPegasus ~ # who\nthomas tty8 2017-08-19 10:18 (:0)\nthomas pts/1 2017-08-19 11:15 (:0.0)\nthomas pts/5 2017-08-19 16:16 (:0.0)\nPegasus ~ # \n
Run Code Online (Sandbox Code Playgroud)\n\n这似乎是 gnome-terminal 未添加 utmp 条目\xe2\x80\xa6 的结果
\n根据我的 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/ .*//'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20599 次 |
最近记录: |