-a参数已内置-p(权限)、-t(时间戳)、-o(属主)、-g(属组)等行为,等效于-rlptgod,普通用户同步时-o/-g静默忽略但-p仍生效,配合路径斜杠规范即可可靠保留权限。

用 rsync 同步文件并保持权限,关键在于使用 -a(archive)参数——它默认包含递归、权限、时间戳、属主、属组、软链接等全部元数据保留能力,无需额外拼凑一堆单字母选项。
为什么 -a 就够了
很多人误以为要手动加 -p(权限)、-t(时间)、-o(属主)、-g(属组)才能保权限,其实 -a 已内置这些行为。它的等效组合是 -rlptgoD,其中:
- -p 确实负责保留文件权限(如 644、755)
- -o 和 -g 在非 root 用户运行时会静默忽略(因普通用户无权改属主/属组),但不会报错
- 只要源文件权限可读,目标端普通目录下同步出的文件权限就和源一致
实际命令怎么写
本地同步示例(保留所有属性):
rsync -av /data/config/ /backup/config/
远程同步示例(走 SSH,自动加密且默认保留权限):
rsync -avz user@192.168.5.20:/var/www/html/ /local/site/
注意路径末尾的斜杠:/html/ 表示同步目录内容;/html(无斜杠)则把整个 html 目录复制进去,多一层嵌套。
权限没保住?先检查这几点
- 目标目录本身要有写入权限(比如
chmod 755 /backup) - 若从 root 同步到普通用户目录,-o/-g 会失效,但 -p(权限位)仍生效
- SELinux 或 AppArmor 启用时可能拦截权限设置,临时测试可执行
setenforce 0 - 确认源文件权限确实存在:用
ls -l查看,避免源端已是默认 umask 覆盖后的结果
进阶:需要强制更新权限时
如果目标文件已存在且权限被意外修改,仅靠 -a 不会重置——它只同步内容与元数据变更。此时可加 --chmod 显式设定:
rsync -av --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r /src/ /dst/
含义:目录(D)对属主赋 rwx、其他用户 rx;文件(F)对属主赋 rw、其他用户 r。











