- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
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出现在附加组列表中。
注意事项
groups等价于id -Gn,输出均为真实组归属,不区分有效组与真实组。- 每个用户属于
/etc/passwd中指定的一个主组,以及在/etc/group中指定的其他附加组;groups输出即二者的并集。 - 该命令是
GNU coreutils包中的命令,跨发行版行为一致;相关的帮助信息请查看man -s 1 groups与info coreutils 'groups invocation'。 groups只接受用户名(或默认当前用户),不接受组名、UID 数字等参数;若需按数字 ID 查询,请改用id命令并参考其-G、-n、-r选项。- 输出中冒号后的第一个组是主组,其余为附加组,判断用户默认属组时以第一个为准。
相关命令与延伸阅读
- 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
相关推荐
Pokerogue-App命令行帮助:查看所有可用命令的方法
Pokerogue App命令行帮助:查看所有可用命令的方法 你是否在使用Pokerogue App时,想要快速了解有哪些命令可以使用?本文将详细介绍如何查看P
Linux `arch` 命令详解:一条命令快速识别主机硬件架构(linux-command 命令手册)
Linux arch 命令详解:一条命令快速识别主机硬件架构(linux command 命令手册) arch 是 GNU coreutils 包提供的极简系统
文档教程Linux command 命令详解:绕过 Shell 函数与别名、稳定调用内部命令
Linux command 命令详解:绕过 Shell 函数与别名、稳定调用内部命令 本篇技术指南围绕 Linux 命令大全搜索工具(linux command
文档教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考