在 Linux 中,用户组是一组用户的集合,用于统一管理文件权限和资源共享。通过命令行管理组既直接又高效,三个核心命令涵盖了创建、修改和删除组的全部工作。
1. groupadd — 创建新组
基本语法:groupadd [选项] 组名
常用的场景与选项:
- 创建一个普通组,系统会自动分配一个可用的 GID(组 ID):
groupadd developers
- 手动指定 GID:
groupadd -g 1500 testers
- 创建系统组(通常 GID 范围较小,用于系统服务):
groupadd -r sysgroup
执行后,新组的记录会被写入 /etc/group 和 /etc/gshadow。成功创建不会有任何输出,仅当出错时才会报错(如组名已存在或 GID 冲突)。
2. groupmod — 修改已有组
基本语法:groupmod [选项] 组名
该命令用于调整现有组的属性,最实用的两个选项是:
- 修改组名(不会更改 GID,文件归属保持不变):
groupmod -n newname oldname
- 修改 GID(注意:这不会自动更新文件系统中的组所有权,已属于原 GID 的文件需要手动或通过脚本调整):
groupmod -g 1600 developers
修改后,/etc/group 中的记录会即时更新。正在运行的进程依然使用旧的 GID,因此对关键服务组进行修改时需谨慎。
3. groupdel — 删除组
基本语法:groupdel 组名
使用很简单:
groupdel testers
但有两个重要限制需要牢记:
- 不能删除任何用户的主属组(primary group)。例如,如果某个用户的
/etc/passwd条目中写明了 GID 为 testers 的 GID,则该组无法被删除,需要先将相应用户修改到其他主组。 - 如果组是某个用户的附属组(supplementary group),删除组会自动将该用户从该组的成员列表中移除,不会阻止删除。
删除操作不可逆,执行前建议确认组内已无必要关联:
grep 'testers' /etc/group # 确认组是否存在
getent group testers # 或使用更通用的命令
实用技巧总结
- 系统管理员可以通过
-r选项创建系统组,以便与普通用户组(GID≥1000)区分开来。 - 修改组名或 GID 后,建议同步检查相关文件权限(
find / -gid <旧GID>可快速定位)。 - 删除组前,先用
getent passwd | grep :<GID>:确认没有用户以该组为主组。
这三个命令覆盖了日常组管理的大部分需求,结合 /etc/group 文件的直接查看(cat /etc/group),就能完全掌控 Linux 系统的组结构。