修改文件属主和属组,核心靠 chown / chgrp 两个命令完成。
改属主:chown
chown 把文件的所有者改成指定用户,也可同时改组[1][2]。
chown 用户名:组名 文件路径
常见写法:
chown alice data.txt— 只改属主,组不变chown alice:developers data.txt— 同时改属主和属组chown :developers data.txt— 只改属组(省略用户名)chown -R alice:developers /srv/app— 递归改目录内所有文件
--reference=ref_file 让目标文件和参考文件保持相同属主/属组,批量同步时很实用。
注意:普通用户只能改自己拥有的文件,且属组只能改成自己所在的组;改别人文件需要 root。
改属组:chgrp
chgrp 只改组不改用户,适合已有属主只换组的场景[3][4]。
chgrp developers data.txt
加 -R 递归处理目录。--from=旧属主 可限定只在当前属主匹配时才改。
前置条件:用户与组要存在
chown / chgrp 改成的用户和组必须先在系统里存在,否则报 invalid user/group。
# 查看系统已有用户和组
id 用户名
getent group 组名
# 新建用户(带家目录和 shell)
useradd -m -s /bin/bash newuser
# 新建组
groupadd newgroup
# 把用户加入补充组
usermod -aG newgroup newuser
useradd 只更新 /etc/passwd、/etc/shadow、/etc/group 等文件,不设密码,passwd newuser 补密码[5][6]。
回滚
- 改错了:重新执行一次
chown/chgrp回原值即可 - 删用户后悔:
userdel -r 用户名连同家目录一起删掉 - 误把用户加错组:
gpasswd -d 用户名 组名或usermod -G 新组列表 用户名
排错速查
| 现象 | 原因 | 处理 |
|---|---|---|
invalid user |
用户名不存在 | id 用户名 确认 |
invalid group |
组名不存在 | getent group 组名 确认 |
Operation not permitted |
非 root 且改他人文件 | 加 sudo 或改自己的文件 |
| 递归后权限混乱 | 含系统目录或挂载点 | 限定范围,避开 /、/home 等 |
实测与局限性
- 实测环境:WSL2 Ubuntu 24.04,coreutils 9.1。
- 已验证:
chown改单文件/递归目录、--reference同步、chgrp改组、useradd/groupadd/usermod建用户组、id/getent回读。 - 局限性:WSL2 无法完整验证 NFS/挂载点的跨机属主映射;SELinux 上下文未测。
参考资料
- [1] chown(1) – Linux manual page (man7.org)(man7-chown)
- [2] chown(1) — coreutils — Debian trixie(debian-chown)
- [3] chgrp(1) – Linux manual page (man7.org)(man7-chgrp)
- [4] chgrp invocation (GNU Coreutils 9.11)(gnu-chgrp)
- [5] useradd(8) – Linux manual page (man7.org)(man7-useradd)
- [6] useradd(8) — passwd — Debian trixie(debian-useradd)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。