用 who、w、users、whoami 和 id 查看登录用户、终端、空闲时间和当前身份。
用 who 查看登录明细
who 读取 /var/run/utmp 输出当前登录用户、终端、时间和远程地址[1]。
who
输出示例:
huyuanwen pts/1 2026-11-03 04:51
加 -q 只列出用户名和总人数;加 -uH 显示列头和 idle 时间;who am i 等价于 who -m,仅看当前终端关联的登录[1]。
用 w 看用户在做什么
w 显示登录用户及其正在运行的进程,头部包含系统运行时间、负载和用户数[2]。
w
每行还有 JCPU、PCPU 和 WHAT(当前命令)。
用 users 快速列出用户名
users 只打印登录用户名列表,适合脚本取值[3]。
users
当前用户身份:whoami 和 id
whoami 打印当前有效用户名,等价于 id -un[4]。
whoami
id 输出当前用户的 UID、GID 和补充组[5]。
id
回滚与排错
这些都是只读查询,不会修改系统状态,无需回滚。
排错速查:
| 现象 | 原因 | 处理 |
|---|---|---|
who 无输出 |
无人登录或 utmp 损坏 | 检查 /var/run/utmp |
w 显示 load 很高 |
系统负载高 | 用 top 或 ps 查进程 |
id 和 whoami 不一致 |
有效 UID 被 setuid 改变 | 检查程序权限 |
实测与局限性
- 实测环境:WSL2 Ubuntu 24.04,procps-ng 4.0.4,coreutils 9.4。
- 已验证:who、w、users、whoami、id 在 WSL2 下输出正常。
- 局限性:WSL2 无完整 systemd-logind;
w和who的 idle 时间计算与实体机有差异;SSH 多跳登录的 FROM 字段可能为空。
参考资料
- [1] who(1) – Linux manual page (man7.org)(man7-who)
- [2] w(1) – Linux manual page (man7.org)(man7-w)
- [3] users(1) – Linux manual page (man7.org)(man7-users)
- [4] whoami(1) – Linux manual page (man7.org)(man7-whoami)
- [5] id(1p) – POSIX Programmer's Manual (man7.org)(man7-id)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。