whoami 是什么
whoami 打印当前有效用户名,等价于 id -un,属于 GNU coreutils。它最简单也最直白:用 sudo -u 切换身份之后想知道自己是谁、脚本里要记录运行身份,都用它。要注意它显示的是有效用户,而不是登录名,后者需要用 logname 查看。
基本信息
| 所属 | GNU coreutils |
|---|---|
| 语法 | whoami |
| 等价写法 | id -un |
| 容易混淆 | logname 显示登录名,whoami 显示有效用户 |
典型使用场景
- 用 sudo -u 切换身份后确认当前身份
- 脚本在日志里记录运行身份与主机名
- 排查服务实际运行用户与预期不一致
- 演示权限上下文:同一脚本在不同身份下行为不同
- 结合 hostname 与 date 输出部署留痕
- 在容器里确认默认运行用户是谁
常用示例
常用示例
whoami # 当前有效用户名
sudo whoami # 切到 root 后验证身份
sudo -u postgres whoami # 以指定用户执行并确认
id -un # 等价写法
id # 完整身份:UID、GID 与附加组
logname # 登录名,可能与 whoami 不同
echo "run as $(whoami)@$(hostname) at $(date -Is)" >> /var/log/deploy.log相关命令对照
| 命令 | 显示内容 | 典型用途 |
|---|---|---|
| whoami | 当前有效用户名 | 脚本与 sudo 之后确认身份 |
| id -un | 当前有效用户名 | 与 whoami 等价 |
| id | UID、GID 与全部组 | 排查权限与组归属 |
| logname | 登录名 | 追溯最初登录的账号 |
| who | 当前登录会话列表 | 查看谁正在使用系统 |
whoami 只反映有效用户,不展示组信息;要判断某项权限是否具备,通常还得看 id 的输出与文件属主关系。
用 whoami 判断是否 root 并不可靠:经过多层 sudo 或 su 之后结果取决于具体上下文,判断特权应看 id -u 是否为 0。
容器里 whoami 输出的用户由镜像的 USER 指令或运行时参数决定,与宿主机登录用户无关;排查容器内权限问题前先确认这一点。
脚本记录运行身份时,建议同时写下 id -u 的数值与主机名:只看用户名,在多主机环境里不足以定位问题。
它不区分登录身份与提权后的身份:要追溯「谁执行了这次操作」,应查登录记录与审计日志,而不是依赖这个命令。