在Linux系统中,groups指的是用户组,也就是将多个用户归并到一起进行统一权限管理的机制。每一个用户必然属于至少一个组,通常叫做主组,同时还可以加入若干个附加组。系统内核并不关心用户名本身,而是通过数字形式的组标识gid来判定进程对文件、设备或者其他资源的访问能力。

一、groups命令的基本含义与用法
当我们直接在终端输入groups这个命令时,系统会输出当前登录用户所属的所有组名称。如果后面跟上具体的用户名,例如groups tom,则会显示该用户tom所隶属的组列表。这个命令本质是对/etc/group和/etc/passwd文件关系的查询工具,不需要特殊权限即可执行。
从实现原理上看,groups命令会读取目标用户的主组信息,以及/etc/group中该用户出现在成员列表里的所有行,最后把组名按顺序打印出来。主组一般与用户名相同,也可以在创建用户时通过-g参数指定。附加组则用于让一个用户拥有多种资源的访问资格,而不必反复切换账号。
# 查看当前用户所属组 groups # 查看指定用户 alice 的组 groups alice # 输出示例: # alice : alice sudo docker
二、用户组在权限管理中的核心作用
Linux的文件权限模型分为属主、属组、其他人三类。当一个进程尝试打开某文件时,系统先比对进程有效用户id与文件属主,若不匹配则查看进程的有效组id及附加组id是否包含文件属组,命中后便按照组权限位进行读、写或执行控制。借助组,可以把需要同样权限的一批人集中管理,而不必为每个人单独配置文件acl。
例如开发团队共享/var/www/project目录,只需新建一个组dev,把相关成员加入该组,再将目录属组设为dev并赋予组写权限,团队成员就能互不干扰地修改代码。相比把目录开放给所有人,这种方式既满足协作又控制了风险。下面的例子展示了相关操作:
# 创建 dev 组 sudo groupadd dev # 将用户 bob 加入 dev 组 sudo usermod -aG dev bob # 修改项目目录属组并赋予组写权限 sudo chown -R root:dev /var/www/project sudo chmod -R 2775 /var/www/project
其中权限位中的2表示设置组继承位,保证新建文件自动属于dev组,避免组内成员创建的文件别人无法编辑。这种基于组的规划在服务器多用户场景下非常实用。
三、主组与附加组的区别及查看方式
主组是用户登录时默认生效的组,记录在/etc/passwd的第四字段;附加组记录在/etc/group的最后一个字段,一个组可以包含多个用户。一个用户只能有一个主组,但可以有零到多个附加组。文件创建时默认继承进程的主组,除非目录设置了组继承位。
通过id命令可以看清数字gid和附加组id的对应关系,比groups输出更底层。理解二者差异有助于排查权限问题,比如某用户明明执行了groups看到自己在docker组,却仍无法运行docker,往往是因为没有重新登录导致附加组未生效。
# 查看用户 UID 和所有 GID id bob # 输出示例: # uid=1001(bob) gid=1001(bob) groups=1001(bob),1002(dev),1003(docker)
四、常见误区与排查建议
不少人以为把用户加入组后立刻就能用新权限,实际上许多服务会缓存启动时的组信息,且shell会话不会自动刷新组列表,需要完全注销再登录或者执行newgrp切换。另一个误区是混淆groups命令与groupadd,前者只用于查看,后者才创建组。
当遇到权限拒绝时,建议依次确认:文件属组是否为目标组、组权限位是否开启、用户是否真的在组内、当前会话组缓存是否更新。把这些环节理清,Linux下基于组的权限管理就会变得简单可控。
| 命令 | 作用 | 是否修改系统 |
|---|---|---|
| groups | 查看用户所属组 | 否 |
| groupadd | 新建用户组 | 是 |
| usermod -aG | 将用户加入附加组 | 是 |
| id | 显示 uid 与 gid 明细 | 否 |
总结来说,linux groups既指用户组这一概念,也指查看组成员关系的命令。它是Linux权限体系的骨架,用好了可以大幅降低多用户系统的管理成本。
linux_groups用户组权限管理修改时间:2026-08-08 22:45:32