Linux 命令之who、who am i、whoami 的区别

在 Linux 中,我们知道通常查询用户信息的命令有 id、who、who am i、whoami。

那么,这几个用户信息的查询命令有什么区别?

我们用 man 命令查询一下四个命令,看一下帮助手册对他们的描述。

$ man id

NAME
            id - print real and effective user and groups
$ man who

NAME
            who - show who is logged on
            
# 同时,在 who 的帮助手册中,我们发现一下信息

DESCRIPTION
            (省略)
            -m      only hostname and user associated with stdin
            (省略)
            If  ARG1  ARG2  given, -m presumed: 'am i' or 'mom likes' are usual.

说明,who am i 仅显示请求执行该命令的登录用户的信息

$ man whoami

NAME
            whoami - print effective userid

在帮助手册的描述中,我们可以总结:

  • id 可以查询有效用户的 UID 和 GID、groups 信息
  • who 可以查询当前登录在系统上的登录用户的信息
  • who am i 等同于 who -m,只打印执行该命令的登录用户的信息
  • whoami 可以查询当前有效用户的名字

我们来看一下具体例子。

假设我以 root 用户身份登录,分别执行上述四个命令,则有:

$ id
uid=0(root) gid=0(root) groups=0(root)

$ who
root        tty1        2020-02-04 16:00
root        pts/0       2020-02-06 17:30

$ who am i
root        pts/0       2020-02-06 17:30

$ whoami
root

我们先不着急发现和总结它们之间的差别,再继续做另一个实验。

我们用 su 命令切换到另一个用户 test,并重复上述命令

$ su - test

$ id
uid=1001(test) gid=1002(test) groups=1002(test)

$ who
root        tty1        2020-02-04 16:00
root        pts/0       2020-02-06 17:30

$ who am i
root        pts/0       2020-02-06 17:30

$ whoami
test

结合前述对帮助手册的查询,以及对实验的观察,我们发现:

id 命令显示的是切换后的用户信息(有效用户信息);

who 命令仍然显示所有登录用户(所有登录用户信息);

who am i 命令仍然显示切换前的用户信息(执行命令的登录用户的信息);

whoami 命令显示的是切换后的用户信息(有效用户信息);

针对上述现象,我们需要解释几个问题:

1、为什么切换到 test 用户后,who 命令却没有 test 用户的相关信息?

答:在 Linux 中,以 su 命令切换用户后,并没有登录切换后的用户,而是在原来用户的进程中创建了子进程执行命令,所以 test 用户并没有登录

2、切换到 test 用户后,who am i 命令为什么仍然显示 root 的信息,而 whoami 却显示 test 用户的信息?

答:who am i 命令显示的是登录用户的信息,在这个案例中,登录用户仍然是 root,test 用户并没有登录;而切换身份后,有效用户变为 test,whoami 显示的也是有效用户的信息。这两个命令是有区别的。

总结

  • id 可以查询有效用户的 UID 和 GID、groups 信息
  • who 可以查询当前登录在系统上的登录用户的信息
  • who am i 等同于 who -m,只打印执行该命令的登录用户的信息
  • whoami 可以查询当前有效用户的名字

(完)

本文为原创文章,若要转载请原链转载,并告知作者

欢迎关注我的微信公众号、知乎:多面手程序员

若您觉得该文还不错,随手点赞,手有余香,嘻嘻 : )

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Linux 目录 /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。...
    miniminiming阅读 1,048评论 0赞 4
  • 转载: blog.csdn.net/qq1603013767/article/details/8192221 如何...
    一掠而过阅读 3,814评论 0赞 2
  • 一.帮助命令 1.man 获得帮助信息 基本语法:man [命令或配置文件] (功能描述:获得帮助信息) (1)...
    爱飞的疯子阅读 328评论 0赞 0
  • 命令:pwd 查看当前目录 命令:cd 用户相关 用户列表文件:/etc/passwd 用户组列表文件:/etc/...
    古佛青灯度流年阅读 689评论 0赞 2
  • 周六上晚班,7点左右如往常一样在店里准备打烊工作。 进来一位客人,先问有没有馒头,我说馒头卖完了,还有包子,...
    念的雪阅读 323评论 0赞 0

友情链接更多精彩内容