在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 管理员 群组名
指定),并正确输入群组密码。