☰
linux-command 命令详解:groups——一行命令查看用户所属的全部组
2026/10/1 2:06:23 网站建设 项目流程
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

groups是 GNU coreutils 工具集中的一条小型命令,用于打印指定用户(或当前用户)所属的全部用户组名称。在 Linux 运维、权限排查和容器镜像调试场景中,它是快速确认"某账号能访问哪些资源、处于哪些权限域"的最直接手段。读完本文你将掌握groups的完整语法、输出格式解读、与id -Gn的等价关系,以及其背后/etc/passwd主组与/etc/group附加组的数据模型,并能借助本仓库中 useradd、usermod、gpasswd 等配套文档完成组管理的闭环操作。

命令是什么

groups命令的核心能力只有一个:打印指定用户所在组的名称。它不需要任何特权即可查询当前用户,查询其他用户时也只需要该用户信息可读即可。作为GNU coreutils包中的成员,它与 id、users 等命令一样,是几乎所有 Linux 发行版默认自带的基础工具,相关的权威帮助信息可通过man -s 1 groups或info coreutils 'groups invocation'查看。

命令语法(概要)

groups [OPTION]... [username]...

语法非常简单:

  • [OPTION]...:可选选项,目前仅支持帮助与版本信息两类。
  • [username]...:可选的一个或多个用户名;不提供时默认为当前用户。

主要用途

  • 打印指定用户所在组的名称,便于快速确认用户所属的主组与所有附加组。
  • 不提供任何参数时,输出当前登录用户所属的全部组。
  • 一次可传入多个用户名,批量查看多个账号的组归属,适合脚本化巡检。

选项详解

groups的命令行选项极少,只有两个:

--help 显示帮助信息并退出。 --version 显示版本信息并退出。

这两个选项在 GNU coreutils 系列命令(如 id、users)中行为完全一致:--help输出命令的简要用法后正常退出,--version输出版本号后正常退出,二者均不需要额外参数。

参数说明

参数是否必选说明
username可选可以是一到多个用户名;不提供时默认为当前用户

需要注意的是,参数是用户名(如linux、root),而不是组名或数字 UID;如果需要基于 UID 查询,可配合id命令使用。

返回值

返回0表示成功,返回非0值表示失败。在 Shell 脚本中可据此判断查询是否成功,例如参数中指定的用户不存在时,命令会返回非零值并输出错误信息。

实战示例

查看指定用户所属的组

原文档给出的经典示例:

[root@localhost ~]# groups linux linux : linux adm dialout cdrom plugdev lpadmin admin sambashare

输出格式解读:主组与附加组

从上面的输出可以观察到固定的格式:用户名 : 组列表,冒号后以空格分隔的组列表中,第一个组是该用户的主组(初始组),其余为附加组(补充组)。例如linux用户的主组是linux,同时附加于adm、dialout、cdrom、plugdev、lpadmin、admin、sambashare等组。这也印证了groups输出的是"组名称"而非组 ID,与id -G输出数字 GID 形成互补。

同时查询多个用户

一次传入多个用户名即可批量输出,每行一个用户:

[root@localhost ~]# groups root linux root : root linux : linux adm dialout cdrom plugdev lpadmin admin sambashare

不指定参数:查询当前用户

[root@localhost ~]# groups root : root

不传参数时默认输出当前登录用户所属的全部组,适合在日常登录后快速自检身份上下文。

groups 与 id -Gn:完全等价

原文档明确说明:该命令等价于id -Gn。拆解这条等价关系有助于理解二者的适用场景,参见本仓库 id 命令文档:

  • -G, --groups:打印全部组 ID(有效组与附加组)。
  • -n, --name:打印名称而不是数字。
  • -r, --real:打印真实 ID 而不是有效 ID(groups输出的是真实组归属)。

也就是说:

groups <user> # 等价于 id -Gn <user>

两者的差别仅在细节:groups输出带用户名 :前缀并以冒号分隔,id -Gn默认只输出以空格分隔的组名列表(不带前缀),更适合在脚本中直接赋值给变量,例如groups=$(id -Gn)。在只关心"组名列表"时优先用id -Gn,在希望输出带用户标注、便于人读时用groups。另外 id 命令文档 还指出id -Gn组合需要配合-n才会显示名称,而groups原生就输出名称,这也是它更直观的原因。

深入原理:/etc/passwd 主组与 /etc/group 附加组的数据模型

原文档指出:"每个用户属于/etc/passwd中指定的一个组和在/etc/group中指定的其他组。"这句话概括了 Linux 组的完整数据模型,结合本仓库的配套文档可以展开如下。

主组(初始组)从哪来

主组是用户在系统数据库中记录的默认组,定义在/etc/passwd文件中(第 4 个字段,即 GID),它决定用户创建文件时的默认属组。创建用户时由useradd的-g, --gid GROUP选项指定,见 useradd 命令文档;若未指定,多数发行版默认创建一个与用户名同名的组并作为主组(对应-U, --user-group行为)。这也是示例中linux用户第一个组恰好为linux的原因。

附加组(补充组)从哪来

附加组定义在/etc/group文件中(每行最后一个字段以逗号分隔的用户列表),常见来源有三种:

  • 创建用户时通过useradd -G GROUP1[,GROUP2,...]一次性指定多个附加组,见 useradd 命令文档;
  • 已有用户通过usermod -aG group user追加到组(-a表示追加,必须与-G配合使用,否则-G会覆盖原有附加组),见 usermod 命令文档;
  • 通过gpasswd -a user_name group_name添加,gpasswd的优势是"只增不减"、不会清空既有附加组,见 gpasswd 命令文档。

因此groups输出的组列表中,除第一个主组外,其余全部来自/etc/group中记录的附加组条目。

组的完整生命周期

groups只能"看",组的增删改由以下命令负责,它们都直接操作/etc/group与/etc/gshadow两个系统文件:

  • groupadd:创建新工作组,可用-g指定 GID、-r创建系统组;
  • groupmod:修改组定义,包括-n改名、-g改 GID、-U/-a -U调整成员列表;
  • groupdel:删除工作组,注意若该组是某些用户的主组,必须先删除这些用户或改变其主组后才能删除;若仅为附加组则可以直接删除,这些用户中对应的组信息也会一并清除。

理解这一闭环后,groups的输出变化就能与上述命令的每次执行一一对应,例如gpasswd -a mary users之后,再次运行groups mary即可看到users出现在附加组列表中。

注意事项

  1. groups等价于id -Gn,输出均为真实组归属,不区分有效组与真实组。
  2. 每个用户属于/etc/passwd中指定的一个主组,以及在/etc/group中指定的其他附加组;groups输出即二者的并集。
  3. 该命令是GNU coreutils包中的命令,跨发行版行为一致;相关的帮助信息请查看man -s 1 groups与info coreutils 'groups invocation'。
  4. groups只接受用户名(或默认当前用户),不接受组名、UID 数字等参数;若需按数字 ID 查询,请改用id命令并参考其-G、-n、-r选项。
  5. 输出中冒号后的第一个组是主组,其余为附加组,判断用户默认属组时以第一个为准。

相关命令与延伸阅读

  • id:打印真实及有效 UID/GID 信息,id -Gn与groups等价;
  • useradd:创建新用户并指定主组/附加组,groups输出的源头之一;
  • usermod:修改用户基本信息,-aG追加附加组;
  • groupadd / groupmod / groupdel:组的创建、修改与删除;
  • gpasswd:工作组文件/etc/group与/etc/gshadow的管理工具,追加成员不覆盖既有附加组;
  • users:打印当前主机所有登录用户名称,注意与groups区分(前者管登录会话,后者管组归属)。
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载
上一篇:JXADF安全架构解析:基于Spring Security的企业级权限控制实现
下一篇:GHelper终极指南:如何用轻量级工具彻底解放华硕笔记本性能

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询