su后未显示新用户ID的我是谁?


9

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

Answers:


13

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

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

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoami旨在向您显示运行它的人的有效用户ID。它仅返回一个名称,如下所示(并等同于运行id -un):

    ckhan
    

我想你可能已经从字面上类型who am i的终端,跑who两个忽略的参数(ami)。

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


2
这两个参数ami不会被忽略,它们甚至由POSIX指定:“在POSIX语言环境中,将输出限制为描述调用用户,等效于该-m选项。”
xhienne

3

根据我的Ubuntu 12.04.2手册页中的“谁”命令,“我是谁”(或有两个参数的人)与“谁-m”相同,并应为您提供与STDIN关联的主机名和用户。但是我没有输出“我是谁”。手册页错误或命令有错误。无论如何,正如ckhan先前回答的那样,“ whoami”命令将为您提供有效用户ID的用户名。至少在Ubuntu 12.04.2中,id,“我是谁”或“ whoami”中的任何一个都不会只给您在当前终端上登录的人的用户名。作为解决方法,您可以使用以下方法:

who | sed 's/ .*//'

请注意,这是特定于Linux的。这将返回Unix / SunOS中的原始用户名。
2015年

3

解决方法

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

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

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

Example#1从xfce4-terminal运行

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

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

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条目的结果。


不要解析ls!使用stat来代替:stat -c '%U' "$(tty)"你可能不应该解析who am i,因为相关的用户名可以包含在某些罕见的情况下空格。
wjandrea
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.