最可靠方式是查看 /etc/group 文件,它权威记录全部本地用户组,格式为“组名:密码占位符:gid:成员列表”,其中成员仅含附加用户;getent group 则按 nss 配置查询本地与网络组混合源。

看全量本地组:cat /etc/group
执行 cat /etc/group 即可列出所有组,每行格式为:
组名:密码占位符:GID:成员列表
- 密码字段几乎总是
x,真实密码(如有)在/etc/gshadow - 成员列表是逗号分隔的用户名,只包含该组的附加成员,不包含主组用户(例如用户 alice 的主组是 users,但 users 行里不会出现 alice)
- GID 为 0 的组(通常是 root)属于系统关键组,修改需格外谨慎
查网络+本地混合环境:getent group
如果系统启用了 LDAP、SSSD 或 NIS,/etc/group 只反映本地组;而 getent group 会按 /etc/nsswitch.conf 中 group: 行的配置顺序查询所有源。
- 例如
getent group sudo可能返回本地或远程的 sudo 组信息 - 只想查本地?加前缀:
getent files group - 验证某组是否存在(避免 grep 匹配到注释或子串)?用
getent group 组名更准确
提取组名或过滤查看
若只需组名列表,可用 cut 或 awk 提取:
-
cut -d: -f1 /etc/group—— 输出所有组名,一行一个 -
grep '^sudo:' /etc/group—— 快速定位特定组 -
getent group | cut -d: -f1—— 获取完整(含网络)组名列表
注意:groups 和 id 不等于“所有组”
groups 和 id -Gn 显示的是当前用户(或指定用户)实际拥有的组权限,即主组 + 所有附加组。
- 它们不列出空组(没分配给任何用户的组),也不列系统中存在但无人加入的组(如 ftp、adm 等)
- 例如
id -Gn alice输出users docker,不代表系统里只有这两个组 - 刚用
usermod -aG docker alice添加组后,groups alice可能仍不显示 docker——需用户重新登录才生效











