rsync 是 Linux 下最常用、最可靠的文件同步工具,通过差量传输和压缩机制减少开销,适用于本地备份、远程同步、镜像部署等场景,支持 -a(归档)、-v(详细)、-z(压缩)、--delete(删除多余文件)等核心参数,并可通过 SSH 实现安全远程同步。

rsync 是 Linux 下最常用、最可靠的文件同步工具,它通过差量传输(只传变化部分)和压缩机制,大幅减少网络和磁盘开销,适合本地备份、远程同步、镜像部署等多种场景。
基础用法:理解核心参数
rsync 命令格式简洁但参数含义关键。最常用组合是:
- -a(archive 模式):保留权限、时间戳、软硬链接、所有者/组等元信息,等价于 -rlptgoD
- -v(verbose):显示详细传输过程,便于调试
- -z(compress):传输中启用压缩,适合慢速网络
- --delete:删除目标端存在但源端已不存在的文件(慎用!建议先加 --dry-run 测试)
- --exclude 和 --include:按模式过滤文件,如 --exclude='*.tmp' --exclude='/logs/'
本地同步与远程同步写法差异
本地路径直接写绝对或相对路径;远程路径需指定用户+主机+路径,支持 SSH 协议:
- 本地 → 本地:
rsync -av /src/ /dst/(注意 src 后的斜杠影响行为:/src/ 表示同步目录内容,/src 表示同步 src 目录本身) - 本地 → 远程:
rsync -avz /data/ user@host:/backup/data/(自动走 SSH,无需额外配置 rsync daemon) - 远程 → 本地:
rsync -avz user@host:/var/www/ ./www/ - 远程 → 远程(经本地中转):
rsync -avz user1@host1:/a/ user2@host2:/b/
实用技巧:提升效率与安全性
生产环境使用 rsync 需兼顾稳定性与可维护性:
- 用 --dry-run 先模拟执行,确认将要删除或覆盖哪些文件
- 对重要同步任务,加上 --log-file=/var/log/rsync-backup.log 记录操作痕迹
- 避免密码交互:配置 SSH 免密登录(ssh-copy-id),禁用密码认证更安全
- 限制带宽防卡顿:--bwlimit=1000(单位 KB/s)
- 跳过已存在且大小/时间一致的文件:--size-only 或 --ignore-times(按大小判断,不依赖 mtime)
定时同步:配合 cron 自动化
将 rsync 命令写入脚本并加入 crontab,例如每日凌晨 2 点同步网站数据:
0 2 * * * /usr/bin/rsync -avz --delete --exclude='cache/' /var/www/ user@backup-server:/backup/www/ >> /var/log/rsync-daily.log 2>&1
注意点:
- 脚本中尽量用绝对路径(如 /usr/bin/rsync),避免 cron 环境变量缺失导致命令找不到
- 重定向输出(>>)和错误(2>&1)便于排查失败原因
- 首次运行前手动执行一次,确认免密登录、路径权限、磁盘空间均正常










