/etc/passwd
文件:cat /etc/passwd
或 cut -d: -f1 /etc/passwd
,2. 使用 getent
命令:getent passwd
,3. 列出登录用户:users
或 who
,这些命令显示系统账户和普通用户,需注意部分为服务账户。在Linux系统中,查询所有用户是系统管理的基础操作,常用于账户管理、权限审计或安全排查,以下是几种高效可靠的方法,均基于Linux官方文档和行业标准实践(参考man passwd
及man getent
):
核心方法详解
直接解析用户数据库文件
Linux本地用户信息存储在 /etc/passwd
文件中,每行代表一个用户,格式为:用户名:密码占位符(x):UID:GID:描述信息:主目录:登录Shell
操作命令:
cat /etc/passwd # 查看完整信息 cut -d: -f1 /etc/passwd # 仅提取用户名列表
输出示例:
root
daemon
bin
...
your_username
使用 getent
命令(推荐)
此命令兼容本地账户及网络账户服务(如LDAP/NIS),确保查询完整性:
getent passwd # 查询所有用户完整信息 getent passwd | cut -d: -f1 # 仅输出用户名
优势: 自动识别系统配置的用户源,避免遗漏网络账户。
利用 awk
过滤输出
提取用户名并排序(适合脚本处理):
awk -F: '{print $1}' /etc/passwd | sort
参数说明:
-F:
指定冒号为字段分隔符{print $1}
输出第一字段(用户名)
快速查询登录用户(非系统账户)
区分可登录用户与系统服务账户:
grep -v "/nologin|/false" /etc/passwd | cut -d: -f1
原理: 排除Shell为/sbin/nologin
或/usr/sbin/false
的系统账户。
关键注意事项
-
权限要求
普通用户可执行查询,但/etc/passwd
默认全局可读(权限-rw-r--r--
)。 -
UID范围识别
- 系统账户: UID范围 0~999(CentOS/RHEL)或 0~499(Debian/Ubuntu)
- 普通用户: UID ≥1000
查看命令:awk -F: '$3 >= 1000 {print $1}' /etc/passwd # 仅显示普通用户
-
伪用户与无效账户
部分服务账户无主目录(如_apt
、systemd-network
),需结合业务判断是否需保留。
应用场景建议
- 基础查询 → 使用
getent passwd | cut -d: -f1
- 脚本处理 → 用
awk
按条件过滤 - 用户有效性检查 → 结合
grep
排除非登录账户 - 审计合规 → 导出到文件:
getent passwd > all_users.txt
附:用户信息字段说明
以 nginx:x:101:101:nginx user:/nonexistent:/usr/sbin/nologin
为例:
nginx
– 用户名x
– 密码占位符(实际密码在/etc/shadow
)101
– 用户ID (UID)101
– 组ID (GID)nginx user
– 描述信息/nonexistent
– 主目录路径/usr/sbin/nologin
– 登录Shell(禁止登录)
引用说明: 本文内容基于Linux核心文档(
man 5 passwd
)、Filesystem Hierarchy Standard及SysAdmin最佳实践,命令兼容主流发行版(Ubuntu/CentOS/Debian等)。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/39228.html