首页/系统/Linux 运维命令速查/chown 修改文件属主与属组

chown 修改文件属主与属组

chown 改变文件所有者(用户与组);-R 递归、-h 处理符号链接本身,属主属组用 用户:组 语法。

Linux 运维命令速查系统更新于 2026-10-13

chown 是什么

chown 修改文件与目录的属主与属组。权限模型上它是比 chmod 更根本的一层:属主拥有对这个文件的处置权(包括修改权限位),属组决定同组用户能拿到哪些组权限。普通用户不能把文件送给别人,只有 root 能任意 chown,这条限制是权限体系的基础。另外 chown 会清掉文件上的 setuid 与 setgid 位,这是防止「换个属主就继承特权」的安全设计。

基本信息

适用平台Linux、macOS、BSD(coreutils / BSD chown)
命令语法chown [选项] 用户[:组] 文件...
常用写法用户:组 同时改、用户: 只改属主、:组 只改属组、用户 只改属主、UID:GID 用数字指定(迁移场景)
常用选项-R 递归、-h 只改符号链接本身而不改目标、--reference=参考文件 复制其属主属组、-v 输出所有处理、-c 仅变化时输出、--preserve-root 拒绝对 / 递归
权限要求修改属主需要 root(或 CAP_CHOWN);只改属组时属主可以把文件改到自己所在的组

典型使用场景

  • 部署纠偏:把应用目录交还给服务账号,修复因手工上传导致的属主错乱
  • 共享目录协作:把属组改为团队组,配合 SGID 与组权限实现协作写
  • 迁移后修复:跨主机恢复的数据属主是数字 UID,需要按新环境的账号重新映射
  • 网站目录:Web 运行账号需要写权限时,把上传目录的属组交给它而不是放宽其他人权限
  • 私有文件保护:把敏感文件的属主设为专用账号,配合 600 权限收紧
  • 批量校正:用 --reference 把基准文件的属主属组套用到一批文件

常用示例

常用示例
chown -R deploy:developers /opt/app
chown :www-data /srv/www              # 只改属组
chown -h root:root /etc/ssl/app.pem   # 只改链接本身,不动目标
chown --reference=/etc/hosts /tmp/hosts.tpl
chown 1500:1500 /data/home/deploy     # 迁移场景用数字 UID:GID
chown -c -R appuser:appgroup /var/log/myapp
stat -c '%U:%G %a %n' /opt/app /opt/app/bin/start
find /srv/app -user 1001 -maxdepth 2 | head   # 找出仍属旧 UID 的文件

写法对照

写法效果注意
user:group同时改属主与属组冒号是规范写法,脚本里统一使用
user:只改属主,属组保持不变等价于只写 user,但更明确
:group只改属组属主可以把文件改到自己所属的组
UID:GID按数字指定账号不存在于本机时使用
-h只作用于符号链接自身递归时不跟随链接
--reference复制参考文件的属主属组批量对齐时比逐条指定更少出错
递归与符号链接的关系要分清:chown -R 默认不跟随符号链接(等价 -P),只改链接自身;-H 会跟随命令行上给出的链接,-L 跟随所有链接。误用 -L 可能把某批文件的属主改到链接指向的目录里,范围远超预期。
chown 会清除文件的 setuid 与 setgid 位,且会更新 ctime。前者意味着给 sudo、passwd 这类程序重新 chown 之后必须重新设置特殊位,否则功能异常;后者意味着基于 ctime 的增量备份工具会把这些文件当成新变更重新备份。
递归 chown 前先确认目标路径与挂载边界:/srv 下如果有挂载进来的其他文件系统,chown -R 会一路改过去,影响范围可能超出预期。执行前用 findmnt -T 路径 确认挂载情况,并考虑用 -x 语义的 find 配合 chown 逐个处理。
大批量操作前先空跑:用 find 路径 -user 旧属主 -maxdepth 3 列出将要命中的文件清单,确认数量级与范围符合预期,再决定是否递归执行。

易错点

  • 属主与属组的分隔符虽然有历史变体,但脚本里应统一写冒号,避免在老版本或跨平台环境中被解释成用户名的一部分
  • 对符号链接递归 chown 时不清楚跟随策略,-R 改的是链接自身,要改目标需显式处理或换用 -L
  • chown 会清掉 setuid 与 setgid 位,重新属主后忘记恢复特殊位会让 sudo 之类程序失效
  • 递归操作跨越了挂载点,把其他文件系统的数据一并改属主,影响范围远超预期
  • 普通用户试图把文件交给别人会失败,需要 sudo;反过来在生产里用 root 随意 chown 也可能造成应用越权

数据来源与参考

  • man 1 chown(coreutils)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌