首页 > Sysadmin > 正文

Linux 修改文件所有者与所属组

huyuanwen 2026-11-03 Sysadmin

修改文件属主和属组,核心靠 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 上下文未测。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。