Appearance
who 命令:显示当前登录用户信息
who 命令是一个简单而有用的 Unix/Linux 系统工具,用于显示当前登录到系统的用户信息。它可以显示用户名、登录终端、登录时间以及(在某些情况下)远程主机名。who 命令从系统的 utmp 文件中读取信息。
2. 基本语法
bash
who [选项] [文件]
如果没有指定文件,who 默认读取 /var/run/utmp 或 /etc/utmp(取决于系统)。
3. 常用选项详解
-a
: 显示所有可用信息-b
: 显示上次系统启动的时间-d
: 显示死进程-H
: 显示列标题-l
: 显示系统登录进程-q
: 只显示用户名和登录用户数量-r
: 显示当前运行级别-s
: 显示用户名、行、时间(默认)-u
: 显示空闲时间--lookup
: 尝试通过 DNS 规范化主机名
4. 基础用法示例
显示当前登录用户
bash
who
显示带有标题的当前登录用户
bash
who -H
显示完整的信息
bash
who -a
只显示用户名和用户数
bash
who -q
5. 高级用法和技巧
显示上次系统启动时间
bash
who -b
显示运行级别
bash
who -r
显示用户和空闲时间
bash
who -u
从指定文件读取信息
bash
who /var/log/wtmp
6. 实际应用场景
检查系统当前用户负载
bash
#!/bin/bash
user_count=$(who | wc -l)
echo "当前系统登录用户数: $user_count"
if [ $user_count -gt 10 ]; then
echo "警告:系统用户数量较多,可能需要注意资源使用情况。"
fi
监控特定用户的登录
bash
#!/bin/bash
target_user="admin"
if who | grep -q "^$target_user "; then
echo "$target_user 已登录系统"
else
echo "$target_user 未登录系统"
fi
7. 性能考虑
- who 命令执行速度快,对系统性能影响极小。
- 在大型系统上,如果 utmp 文件很大,who 可能需要更多时间来处理。
- 频繁运行 who 命令(如在循环中)可能会造成不必要的系统负担。
8. 安全注意事项
- who 命令显示的信息可能包含敏感数据,如用户登录模式。
- 在共享环境中使用时,注意不要泄露敏感的用户活动信息。
- 定期检查 who 的输出可以帮助发现未授权的访问。
- 确保只有授权用户能够访问包含登录信息的系统文件(如 utmp)。
9. 与其他工具的集成
结合 Grep 过滤特定用户
bash
who | grep username
使用 Awk 提取特定信息
bash
who | awk '{print $1, $4}' # 打印用户名和登录时间
与 W 命令对比使用
bash
who; echo "---"; w
10. 故障排除
- 如果 who 命令没有显示预期的用户,检查 /var/run/utmp 文件的权限和完整性。
- 在某些系统中,可能需要使用 sudo 来运行 who 以获取完整信息。
- 如果时间显示不正确,检查系统时间设置。
- 对于远程登录,如果主机名没有显示,可能是由于 DNS 解析问题。
11. 相关命令
- w 命令:显示谁已登录以及他们在做什么
- users 命令:显示当前登录的用户名列表
- last 命令:显示最近登录的用户列表
- finger 命令:显示用户信息
- loginctl 命令:查询和控制systemd登录管理器的状态