技术咨询:sudo whoami与sudo who am i的区别及结果差异原因
「sudo whoami」和「sudo who am i」的区别及结果差异原因
这两个命令看似长得像,实则在作用逻辑和sudo执行后的行为上有本质区别,我给你一步步拆解清楚:
1. 命令本身的定位差异
whoami:是一个极简的独立命令,唯一作用就是返回当前进程的有效用户ID(EUID)对应的用户名。它完全不关心会话的来源,只盯着运行它的进程是以哪个用户身份在干活。who am i:这是who命令的特殊参数玩法。who本身是用来列出系统里所有活跃登录会话的工具,而am i(甚至可以换成mom likes,算是Unix圈的小彩蛋)是专门用来查询发起当前终端会话的原始用户,它会去读系统保存的登录会话记录(比如/var/run/utmp文件)来获取信息。
2. sudo执行后结果不同的核心原因
当你敲sudo的时候,它会以root权限创建一个新的子进程来运行后续命令,但这里有个关键差异:
- 对于
sudo whoami:whoami跑在sudo创建的root权限进程里,它读取的是这个进程的EUID(已经被sudo改成root了),所以自然返回root。 - 对于
sudo who am i:who am i根本不依赖当前进程的用户权限,它直接去查系统里存的登录会话记录——这个记录里存的是你最初打开终端时登录的用户,和sudo临时切换的权限半毛钱关系都没有,所以会返回你原本的登录用户名。
举个实际例子,假设你以alice用户登录系统:
- 执行
whoami→ 返回alice - 执行
sudo whoami→ 返回root - 执行
who am i→ 返回alice(或者完整格式alice pts/0 2024-05-20 10:30) - 执行
sudo who am i→ 还是返回alice(会话的原始用户没变)
内容的提问来源于stack exchange,提问作者Macdonald
相关产品推荐
相关产品推荐

