在Linux系统中,群组(Group)是管理用户权限和资源访问的重要机制,通过群组可以将多个用户归类,统一分配文件或目录的访问权限,Linux群组命令主要用于创建、修改、删除群组以及管理群组成员,这些命令通常需要root权限或具有sudo权限的用户才能执行,以下是常用的Linux群组命令及其详细使用方法。

群组相关文件
在深入命令操作前,需了解Linux中与群组相关的核心配置文件:
- /etc/group:存储群组基本信息,包括群组名、群组ID(GID)、群组成员列表,每行格式为“群组名:密码占位符:GID:成员列表”,其中密码占位符通常为x,因为密码信息存储在/etc/gshadow文件中。
- /etc/gshadow:存储群组密码和群组管理员信息,格式为“群组名:加密密码:管理员列表:成员列表”,只有设置了群组密码的用户才能通过
newgrp命令切换到该群组,管理员列表中的用户可管理群组成员。
群组管理命令
创建群组:groupadd
功能:用于创建新的群组。
基本语法:sudo groupadd [选项] 群组名
常用选项:
-g, --gid GID:指定群组的GID,若不指定则系统自动分配。-r, --system:创建系统群组,GID默认小于999,通常用于系统服务。-f, --force:如果群组已存在则不报错,且不重复创建。
示例:
- 创建普通群组
developers:sudo groupadd developers - 指定GID为2000创建群组
test:sudo groupadd -g 2000 test - 创建系统群组
system_group:sudo groupadd -r system_group
修改群组信息:groupmod
功能:修改已存在群组的属性,如群组名、GID等。
基本语法:sudo groupmod [选项] 群组名
常用选项:

-n, --new-name 新群组名:修改群组名称。-g, --gid GID:修改群组的GID。-o, --non-unique:允许与已存在的GID重复(不推荐使用)。
示例:
- 将群组
developers重命名为dev_team:sudo groupmod -n dev_team developers - 修改群组
test的GID为3000:sudo groupmod -g 3000 test
删除群组:groupdel
功能:删除指定的群组,注意:若群组中仍有成员,需先移除成员或删除用户后再操作。
基本语法:sudo groupdel 群组名
示例:删除群组test:sudo groupdel test
查看群组信息:groups、id、getent
- groups命令:查看当前用户所属的群组。
示例:groups(输出当前用户的所有群组) - id命令:查看用户的UID、GID及所属群组。
示例:id -Gn 用户名(显示指定用户的所有群组名称) - getent命令:查询系统数据库中的群组信息(如/etc/group)。
示例:getent group 群组名(显示指定群组的详细信息)
管理群组成员:gpasswd
功能:用于设置群组密码、添加/删除成员、指定群组管理员。
基本语法:sudo gpasswd [选项] 群组名
常用选项:
-a, --add 用户名:将用户添加到群组。-d, --delete 用户名:从群组中删除用户。-M, --members 用户列表:批量设置群组成员(覆盖原有成员)。-A, --administrators 用户列表:指定群组管理员。-r, --delete-password:删除群组密码。-R, --restrict:限制用户加入群组(需root权限)。
示例:

- 将用户
alice添加到群组dev_team:sudo gpasswd -a alice dev_team - 从群组
dev_team中删除用户bob:sudo gpasswd -d bob dev_team - 设置群组
dev_team的密码:sudo gpasswd dev_team(按提示输入密码) - 指定用户
charlie为群组dev_team的管理员:sudo gpasswd -A charlie dev_team
切换群组:newgrp
功能:临时切换用户的当前群组,新会话下创建的文件将属于新群组。
基本语法:newgrp [群组名]
注意:需输入群组密码(若群组设置了密码),否则切换失败。
示例:切换到群组dev_team:newgrp dev_team
群组操作注意事项
- 权限要求:大部分群组管理命令需root权限或sudo权限,普通用户只能通过
newgrp切换群组(需密码)。 - GID唯一性:普通群组建议使用唯一的GID,避免与系统群组冲突;系统群组(
-r选项创建)的GID通常小于1000。 - 成员管理:删除群组前需确保群组中没有成员,否则可能导致用户权限异常。
- 密码安全:群组密码仅用于
newgrp切换,非必需,建议仅在需要时设置并定期更新。
群组命令操作示例表
| 命令 | 功能描述 | 示例命令 |
|---|---|---|
sudo groupadd dev |
创建群组dev |
sudo groupadd dev |
sudo groupmod -n new_dev dev |
重命名群组dev为new_dev |
sudo groupmod -n new_dev dev |
sudo groupdel dev |
删除群组dev |
sudo groupdel dev |
sudo gpasswd -a user dev |
添加用户user到群组dev |
sudo gpasswd -a user dev |
sudo gpasswd -d user dev |
从群组dev删除用户user |
sudo gpasswd -d user dev |
groups user |
查看用户user的群组 |
groups user |
getent group dev |
查看群组dev的详细信息 |
getent group dev |
相关问答FAQs
问题1:如何批量将多个用户添加到同一群组?
解答:使用gpasswd命令的-M选项可批量设置群组成员,例如将用户user1、user2、user3添加到群组dev,命令为:sudo gpasswd -M "user1 user2 user3" dev,注意此操作会覆盖群组中原有的所有成员,若需保留原有成员并新增,需先通过getent group dev查看原成员列表,再合并到新成员列表中执行。
问题2:为什么使用newgrp切换群组时提示“Permission denied”?
解答:可能的原因有两个:一是群组未设置密码,而当前用户不是群组成员或管理员;二是群组设置了密码,但用户输入错误,解决方法:若群组无需密码,可通过sudo gpasswd -r 群组名删除密码;若需密码,确保用户是群组成员(通过gpasswd -a 用户名 群组名添加)或管理员(通过gpasswd -A 管理员 群组名指定),并正确输入群组密码。
