whoami 命令用于打印与当前有效用户ID关联的用户名。简单来说,它显示当前命令是以哪个用户的身份运行的。本文介绍如何使用 whoami 命令、何时使用它,以及它与 id -un 和 $USER 等替代命令的比较。
如何使用 whoami 命令
whoami 命令的语法如下:
whoami [OPTION]要显示当前有效用户的名称,可以直接运行该命令而不带任何选项:
whoami屏幕上会显示类似以下输出:
linuxize当您需要确认某个命令是以哪个账户身份运行时,whoami 命令非常有用。这在通过 su 命令切换用户或使用 sudo 运行命令后尤为重要。
例如,如果您使用 sudo 运行 whoami,命令会显示 root,因为有效用户发生了变化:
sudo whoamiroot您还可以在 shell 脚本中使用 whoami 来检查是哪个用户正在运行脚本。
以下是一个使用 if 语句将当前用户名与给定字符串进行比较的示例:
if [[ "$(whoami)" != "any_name" ]]; then
echo "只有用户 'any_name' 才能运行此脚本。"
exit 1
fi如果用户名与给定字符串不匹配,脚本会打印一条消息并退出。
当检查的是 root 而不是特定账户时,应比较有效用户ID而不是名称。在 Bash 中,可以使用 $EUID 变量:
if [[ $EUID -ne 0 ]]; then
echo "此脚本必须以 root 身份运行。"
exit 1
fi这比将 whoami 与 root 进行比较更可靠,因为系统中可能有多个 UID 为 0 的账户,而且读取变量不会启动新进程。
对于不提供 $EUID 的 POSIX shell,可以使用 id -u 代替:
if [ "$(id -u)" -ne 0 ]; then
echo "此脚本必须以 root 身份运行。"
exit 1
fiid -u 命令会启动一个单独的进程,但它可以在不提供 $EUID 变量的 shell 中工作。
whoami 不接受参数。如果您传入参数,命令会打印错误消息:
whoami: extra operand 'anything'
Try 'whoami --help' for more information.whoami 命令只接受两个选项:
--help- 显示帮助消息并退出。--version- 显示版本信息并退出。
替代命令
使用 -un 选项运行 id 命令产生的输出与运行 whoami 相同:
id -un当您需要有关当前用户的更多信息(如 UID、GID 和组成员身份)时,请使用 id 命令。
$USER 环境变量也包含用户名:
echo $USER在许多交互式 shell 中,echo $USER 打印原始会话的登录名,而 whoami 打印当前进程的有效用户。因此,在 sudo 或其他权限更改后,两者可能会有所不同。
如果您需要知道还有谁登录了,而不是您是谁,请使用 who 命令。运行 who am i 是一种特殊形式,它会打印您终端的登录条目,在权限更改后可能会显示与 whoami 不同的用户名。
快速参考
| 命令 | 描述 |
|---|---|
whoami | 打印当前有效用户名 |
id -un | 与 whoami 输出相同 |
id -u | 以数字形式打印有效用户 ID |
echo $USER | 通过环境变量打印用户名 |
whoami --help | 显示帮助并退出 |
whoami --version | 显示版本并退出 |
常见问题
whoami 和 id 有什么区别?whoami 只打印有效用户名。id 命令打印完整身份信息,包括 UID、GID 和组成员身份。运行 id -un 产生的输出与 whoami 相同。
使用 sudo 运行 whoami 会返回什么?
它通常返回 root,因为 sudo 以 root 作为有效用户运行命令。
whoami 可以在 shell 脚本中使用吗?
可以。它通常用于在执行特权操作之前检查脚本是否以特定用户身份运行。
为什么 whoami 和 echo $USER 可能显示不同的值?whoami 显示当前进程的有效用户,而 $USER 通常反映原始登录会话。权限更改后,这些值可能不匹配。