最准确可靠的方式是直接读取/etc/passwd和/etc/group文件;前者按行列出本地用户(含uid判断普通/系统用户),后者按行列出本地组(第四字段仅含附加成员);id或groups显示当前生效组,getent用于多源环境但不包含主组用户。

直接读取 /etc/passwd 和 /etc/group 是最准确、最可靠的方式。这两个文件是 Linux 系统本地用户与组的唯一权威来源,不依赖服务、不缓存、也不受网络目录(如 LDAP)干扰。
查看所有用户:cat /etc/passwd
每行代表一个用户,格式为:用户名:密码占位符:UID:GID:备注:家目录:登录Shell。其中:
- 第一字段(用户名)就是系统所有本地用户的名称
- UID ≥ 1000 通常是普通用户,0 是 root,1–999 多为系统用户
- 只显示本地用户;LDAP/NIS 用户不会出现在此文件中
- 想提取纯用户名列表?用:
cut -d: -f1 /etc/passwd
查看所有用户组:cat /etc/group
每行代表一个组,格式为:组名:密码占位符:GID:附加成员列表。注意:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 第四字段(逗号分隔的用户名)仅包含“附加成员”,不包含主组用户
- 例如用户 alice 主组是 users,她在
users:x:100:这行里不会出现 - 组是否存在,以该文件中是否有一行匹配组名为准,而非靠
getent或groups - 提取全部组名:
cut -d: -f1 /etc/group
查指定用户属于哪些组:id 或 groups
这两个命令反映的是“当前生效的组权限”,不是系统定义的全部组:
-
id -Gn显示当前用户所属的所有组(主组 + 所有附加组) -
id -Gn username查指定用户(需有读取 /etc/passwd 权限) -
groups效果类似,但不显示 GID,且对非 ASCII 组名支持较差 - 刚用
usermod -aG加组后,需重新登录才生效
跨源环境(如 LDAP/SSSD)要查完整视图:getent
当系统配置了 /etc/nsswitch.conf 中的 group: files sss 等多源时:
-
getent group列出所有可解析的组(本地 + 网络),比cat /etc/group更全 -
getent group 组名可安全确认某组是否存在,避免grep匹配到注释或子串 - 但它仍不包含主组用户——只返回附加成员(和 /etc/group 第四列一致)
- 要得完整成员名单?必须合并:
/etc/passwd中 GID 匹配者 +getent group的附加成员










