users 是 Linux 系统中的一个简单但实用的命令行工具,用于显示当前登录到系统的所有用户名。它会从 /var/run/utmp 或 /var/log/wtmp 文件中读取登录记录,并以空格分隔的形式输出所有当前登录用户的用户名。
基本语法
常用选项:
--help:显示帮助信息--version:显示版本信息
参数说明:
[文件]:指定要读取的登录记录文件,默认为/var/run/utmp
使用示例
查看当前登录用户
最简单的用法是直接运行 users 命令:
bash
$ users
alice bob charlie alice
输出显示当前有四个登录会话,其中用户 alice 登录了两次(可能从不同终端或会话登录)。
指定登录记录文件
可以指定其他登录记录文件,比如查看历史登录记录:
bash
$ users /var/log/wtmp
这会显示 /var/log/wtmp 文件中记录的所有登录用户(包括历史登录)。
与其他命令结合使用
users 命令的输出通常与其他命令结合使用,进行进一步处理:
bash
# 统计不同用户数量
$ users | tr ' ' '\n' | sort | uniq | wc -l
3
# 查看每个用户的登录次数
$ users | tr ' ' '\n' | sort | uniq -c
2 alice
1 bob
1 charlie
工作原理
users 命令的工作原理相对简单:
- 读取登录记录 :默认从
/var/run/utmp文件读取当前登录会话信息 - 解析用户信息:从每条记录中提取用户名
- 输出结果:将所有用户名以空格分隔的形式输出
相关文件说明:
/var/run/utmp:记录当前系统的登录会话信息/var/log/wtmp:记录历史登录/注销信息/var/log/btmp:记录失败的登录尝试
与其他命令的比较
users vs who
| 命令 | 输出格式 | 信息详细程度 | 主要用途 |
|---|---|---|---|
users |
用户名列表(空格分隔) | 简单,只显示用户名 | 快速查看谁在登录 |
who |
每行一个用户,包含终端、时间等 | 详细 | 查看登录会话的详细信息 |
示例对比:
bash
$ users
alice bob charlie
$ who
alice tty1 2025-05-20 08:15
bob pts/0 2025-05-20 08:20 (192.168.1.100)
charlie pts/1 2025-05-20 08:25 (192.168.1.101)
users vs w
w 命令显示的信息更加全面,包括用户正在执行的命令和系统负载:
bash
$ w
08:30:01 up 2 days, 3:15, 3 users, load average: 0.05, 0.10, 0.15
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
alice tty1 - 08:15 15:00 0.05s 0.05s -bash
bob pts/0 192.168.1.100 08:20 0.00s 0.10s 0.05s vim file.txt
charlie pts/1 192.168.1.101 08:25 5:00 0.03s 0.03s top
实际应用场景
系统监控脚本
在自动化脚本中,可以使用 users 命令快速检查是否有用户登录:
bash
#!/bin/bash
# 检查是否有用户登录
if [ -n "$(users)" ]; then
echo "有用户登录到系统"
echo "当前登录用户:$(users)"
else
echo "没有用户登录"
fi
用户活动统计
结合其他工具进行用户活动分析:
bash
# 统计最近24小时内的活跃用户
$ last -24hours | awk '{print $1}' | sort | uniq
alice
bob
charlie
david
# 与 users 命令结果对比
$ users
alice bob charlie
安全审计
检查异常登录情况:
bash
# 监控非工作时间登录
#!/bin/bash
CURRENT_HOUR=$(date +%H)
if [ $CURRENT_HOUR -lt 8 ] || [ $CURRENT_HOUR -gt 18 ]; then
LOGGED_USERS=$(users)
if [ -n "$LOGGED_USERS" ]; then
echo "非工作时间有用户登录:$LOGGED_USERS"
echo "时间:$(date)"
# 可以添加邮件或日志记录逻辑
fi
fi
注意事项
- 权限要求 :读取
/var/run/utmp文件通常需要 root 权限或相应的读取权限 - 输出格式:用户名以空格分隔,如果用户名包含空格可能会造成解析困难
- 会话计数:同一个用户从多个终端登录会多次出现在输出中
- 时间信息 :
users命令不显示登录时间,需要结合who或last命令查看 - 网络登录 :对于 SSH 等网络登录,
users会显示用户名但不显示来源 IP
总结
users 命令虽然简单,但在日常系统管理和监控中非常有用。它提供了最快捷的方式来查看当前谁登录了系统,特别适合在脚本中快速检查用户登录状态。对于需要更详细信息的场景,可以结合 who、w、last 等命令使用。
记住:简单不代表无用,users 正是 Unix/Linux 哲学"一个工具做好一件事"的完美体现。