rsync -a 能同时保留修改时间、所有者和特殊权限,但“完美”取决于执行身份和目标环境是否支持;-a 等效于 -rlptgoD,其中 -t 保修改时间,-o/-g 在 root 下生效,-p 保包括 setuid/setgid/sticky 的权限位,-D 保设备文件等特殊文件元数据。

用 rsync -a 就能同时保留修改时间、所有者和特殊权限,但“完美”取决于执行身份和目标环境是否支持。
核心:-a 参数已覆盖全部基础属性
-a(archive 模式)等效于 -rlptgoD,其中:
-
-t确保文件修改时间(mtime)原样保留 -
-o和-g尝试保留属主与属组信息 -
-p保留权限位,包括 setuid(4000)、setgid(2000)、sticky bit(1000)等特殊权限 -
-D支持设备文件和特殊文件(如 FIFO、socket),间接保障其元数据完整
所有者保留的现实限制
普通用户运行 rsync 时,-o 和 -g 会静默忽略——系统不允许非 root 用户随意更改文件属主。这不是 rsync 的缺陷,而是 Linux 权限机制本身的要求。
- 若需强制设定属主/属组,必须以 root 身份运行,或在目标端用
--chown=user:group显式映射 - 跨系统同步时(如源有 user1,目标无该用户),建议配合
--chown避免属主变成数字 ID
特殊权限生效的前提条件
setuid/setgid/sticky bit 能否真正写入目标文件,取决于两点:
- 源文件本身设置了这些位(可用
ls -l查看,如-rwsr-xr-x中的s或drwxrwxrwt中的t) - 目标文件系统必须支持这些权限(ext4、xfs 等主流文件系统均支持;某些网络挂载或容器卷可能禁用)
验证与补救方法
同步后发现时间或权限异常,可按顺序排查:
- 用
ls -l --time=modify对比源/目标文件的权限、时间、属主字段 - 确认目标目录有写权限,且未受 SELinux/AppArmor 限制(临时测试可
setenforce 0) - 若仅需重置权限(不改内容),加
--chmod显式指定,例如:rsync -av --chmod=Fu=rwxs,go=rx,Du=rwx,go=rx src/ dst/

















