--reference参数使chown将目标文件/目录的所有者和所属组设为与指定参考文件完全一致,仅复制归属关系而非权限,常配合-R递归使用以快速同步部署环境。

用 chown --reference 可以快速把新目录的归属关系(所有者和所属组)设成跟已有目录完全一致,省去查用户、查组、再手动指定的步骤,特别适合部署多个结构相似的服务环境。
什么是 --reference 参数
这个参数让 chown 不直接写死用户和组名,而是“照抄”参考文件(或目录)当前的属主和属组。它不复制权限(那是 chmod 的事),只复制归属关系。
关键点:
- 参考目标可以是任意一个已正确配置归属的文件或目录
- 目标文件/目录的当前归属会被覆盖,变成和参考对象一模一样
- 对符号链接默认操作其指向的目标;加
-h才改链接本身
典型使用场景
比如你刚解压了一个新 Web 应用到 /var/www/myapp,而同服务器上已有一个运行正常的 /var/www/oldapp,它的归属已经是 www-data:www-data:
- 确认参考目录归属:
ls -ld /var/www/oldapp - 一键同步归属:
sudo chown -R --reference=/var/www/oldapp /var/www/myapp - 验证结果:
ls -ld /var/www/myapp和ls -l /var/www/myapp/* | head -3
配合递归与条件限制更安全
实际部署中常需兼顾准确性和安全性:
- 加
-R处理整个目录树,但避免误触系统路径(如不要对/或/etc直接用) - 加
--from=olduser:oldgroup可限定只改原本属于某人某组的项,防止覆盖已调整过的归属 - 加
-c或-v查看哪些项被修改,便于审计:sudo chown -Rc --reference=template_dir new_dir
注意事项与常见问题
这个方法高效,但要注意边界:
- 不改变文件权限(rwx),如果新目录需要不同权限,得额外跑
chmod - 参考对象必须存在且可读取其元数据(普通用户也能读
ls -l,所以通常没问题) - 若参考目录属主是 root,而新目录里有普通用户创建的文件,可能因权限不足跳过——此时需
sudo或切换为 root 执行 - 不能跨文件系统“复制”归属(例如从 ext4 挂载点参考 btrfs 上的目录),但绝大多数本地部署不涉及此限制


















