usermod -g 修改主组(影响文件默认属组),usermod -G 全量覆盖附加组(非追加),混用或漏写会导致附加组丢失;修改后需重新登录生效。

直接改用户主组用 usermod -g,加附加组用 usermod -G,二者行为完全不同,混用会清空原有附加组——这是最常踩的坑。
usermod -g 修改用户的主组(primary group)
主组决定用户创建文件时的默认所属组,也影响 groups 命令输出的第一个组名。执行后,用户原主组不会自动保留在附加组列表中。
-
usermod -g developers alice:把用户alice的主组设为developers - 若
alice原主组是users,且未显式加入users作为附加组,则此后alice就不再属于users - 该操作不改变附加组(
-G列表),但主组变更后,新创建的文件gid会变成developers
usermod -G 添加或覆盖附加组(supplementary groups)
-G 是「全量覆盖」,不是「追加」。漏写已有附加组,就会被踢出——这点和直觉相反,务必注意。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
usermod -G docker,adm,sudo alice:把alice的附加组设为这三者,原附加组(如staff)会被清除 - 要保留原有附加组,得先查出来:
groups alice或id -Gn alice,再拼接新旧组名 - 常见错误:
usermod -G docker alice—— 表面加了docker,实则把用户从sudo、adm等组全部移除
同时改主组 + 保留/更新附加组的稳妥做法
没有单条命令能「只加一个附加组而不动别的」,必须显式列出全部目标附加组。建议分步确认,避免掉组失权。
- 查当前状态:
id alice(看uid、gid和groups全量) - 若只想新增
docker组,且当前附加组是sudo adm,则运行:usermod -g developers -G sudo,adm,docker alice - 改完立刻验证:
su - alice -c 'id'(用su -模拟全新登录,避免缓存干扰) - 注意:修改主组或附加组后,用户已开启的 shell 不会自动生效,需重新登录或
newgrp切换(仅对当前 shell 临时生效)
主组和附加组的语义差异、-G 的覆盖逻辑、以及登录态不自动刷新这三点,合起来才是实际运维中最容易导致权限异常的根本原因。

















