在Linux中who系列命令存在who/whoami/who am i。

    首先我以普通用户guixian001登陆系统。然后执行命令分别执行命令whoami/who am i/who。截图如下:

    wKioL1VRZYrjh8jCAACd9ikK2sU994.jpg

    然后我们使用su命令切换到root用户再执行以上三个命令。

    wKioL1VRZjujNeOxAACn1pFaJTU347.jpg

    看出区别了吗?使用whoami命令显示的是当前“操作用户”的用户名。而who am i显示的是“登录用户”的用户名。要解释这个现象需要引入linux中的两个概念——实际用户(UID,即user id)和有效用户(EUID,即effective user id)。

    实际用户是指用户登录时所使用的用户,所以在整个登录会话中,实际用户是不会变化的。有效用户是指当前执行操作的用户,这个是能够利用su和sudo命令进行任意切换的。一般情况下,实际用户和有效用户是一样的,只有发生用户身份切换的时候,会发生差异。所以who am i显示的是实际用户的用户名,即用户登陆时候的用户ID,相当于who -m,而whoami显示的是有效用户的ID即EUID。

    References:

    《Linux就是这个范儿》

    《who am i》-linux命令五分钟系列之十六