whoami 命令用于打印与当前有效用户ID关联的用户名。简单来说,它显示当前命令是以哪个用户的身份运行的。本文介绍如何使用 whoami 命令、何时使用它,以及它与 id -un 和 $USER 等替代命令的比较。

如何使用 whoami 命令

whoami 命令的语法如下:

whoami [OPTION]

要显示当前有效用户的名称,可以直接运行该命令而不带任何选项:

whoami

屏幕上会显示类似以下输出:

linuxize

当您需要确认某个命令是以哪个账户身份运行时,whoami 命令非常有用。这在通过 su 命令切换用户或使用 sudo 运行命令后尤为重要。

例如,如果您使用 sudo 运行 whoami,命令会显示 root,因为有效用户发生了变化:

sudo whoami
root

您还可以在 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
fi

id -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 通常反映原始登录会话。权限更改后,这些值可能不匹配。