Linux中可通过
cat /etc/passwd | wc -l
或grep -c "." /etc/passwd
直接统计系统总用户数,若需包含注释用户,可加grep -v "^#"
过滤统计系统总用户数
直接统计 /etc/passwd
文件行数
- 命令:
cat /etc/passwd | wc -l
- 原理:
/etc/passwd
文件存储了所有用户的账号信息(包括系统用户和普通用户),每一行代表一个用户。wc -l
用于统计行数。 - 示例输出:
150 # 表示系统中共有150个用户
- 注意:此方法包含系统用户(如
root
、daemon
等)和普通用户。
过滤系统用户,仅统计普通用户
- 命令:
awk -F: '$3 >= 1000 {count++} END {print count}' /etc/passwd
- 原理:
/etc/passwd
中第三个字段($3
)是用户UID,普通用户UID通常从1000开始,系统用户UID低于1000,通过筛选UID >= 1000的行并计数,可得到普通用户数量。 - 示例输出:
42 # 表示有42个普通用户
- 替代方法:
grep -E '^[^:]+:[^:]+:[0-9]{3,}:' /etc/passwd | wc -l
通过正则表达式匹配UID >= 1000的用户。
使用 getent
查询数据库
- 命令:
getent passwd | wc -l
- 原理:
getent passwd
从系统账户数据库中获取用户信息,适用于支持LDAP或NIS的环境。 - 优势:比直接读取
/etc/passwd
更通用,尤其在分布式环境中。
统计当前登录用户数
使用 who
命令
- 命令:
who
- 原理:
who
命令列出当前登录的用户及其终端信息。 - 示例输出:
user1 tty7 2025-07-24 08:30 (:0) user2 pts/0 2025-07-24 09:15 (192.168.1.100)
- 统计方法:
who | wc -l
输出行数即为当前登录用户数。
使用 w
命令
- 命令:
w
- 原理:
w
命令不仅显示登录用户,还提供负载、进程等信息。 - 示例输出:
HEADER user1 tty7 2025-07-24 08:30 (:0) idle 0.00s 0.00s user2 pts/0 2025-07-24 09:15 (192.168.1.100) 0.5h 0.10s 0.10s
- 统计方法:
w | grep -v "HEADER" | wc -l
行后统计登录用户数。
其他场景与工具
统计特定用户组的用户数
- 命令:
grep "/home" /etc/passwd | wc -l
- 原理:部分系统的普通用户家目录位于
/home
下,通过匹配家目录路径可筛选用户。 - 注意:不适用于自定义家目录的场景。
图形化界面查看(如Ubuntu)
- 路径:
系统设置 -> 用户管理
,手动勾选用户后统计数量。 - 适用场景:桌面环境快速查看,不适合服务器。
方法对比与归纳
场景 | 命令 | 优点 | 缺点 |
---|---|---|---|
总用户数(含系统用户) | cat /etc/passwd | wc -l |
简单直接 | 包含系统用户 |
总用户数(仅普通用户) | awk '/^[^:]+:[^:]+:[0-9]{3,}:/' /etc/passwd | wc -l |
精准过滤系统用户 | 需理解UID规则 |
当前登录用户数 | who | wc -l |
实时性强 | 依赖用户登录状态 |
兼容LDAP/NIS环境 | getent passwd | wc -l |
支持跨平台用户数据库 | 需安装 libnss-wrapper 等工具 |
FAQs
如何排除系统用户,仅统计普通用户?
- 命令:
awk -F: '$3 >= 1000' /etc/passwd | wc -l
- 说明:通过UID筛选,仅统计普通用户。
如何查看某个用户是否在线?
- 命令:
who | grep "username"
- 说明:若返回结果包含该用户,则表示在线,也可用
ping username
测试(需用户已登录)。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/74915.html