rsync 是 Linux/Unix 下的本地/远程文件同步工具,杀手锏是增量同步——只传输文件变化部分。是日常备份、代码发布、文件迁移的标配。
核心优势
- 比 cp/scp 快 N 倍,节省带宽
- 支持断点续传、保留权限/时间戳/链接
- 支持镜像同步(双端完全一致)
安装
sudo apt install rsync -y # Debian/Ubuntu
sudo yum install rsync -y # CentOS/RHEL
brew install rsync # macOS(默认带,但 brew 版本更新)基础语法
# 本地同步
rsync [选项] 源 目标
# 远程推送(本地 → 服务器)
rsync [选项] 本地源 用户@主机:远程目标
# 远程拉取(服务器 → 本地)
rsync [选项] 用户@主机:远程源 本地目标90% 新手必踩的坑:源末尾的 /
| 写法 | 同步逻辑 | 例子 |
|---|---|---|
rsync /data/ /backup/ | 同步目录里的内容,不包含目录本身 | /data/* → /backup/ |
rsync /data /backup/ | 同步整个目录 | 在 /backup/ 中创建 data/ |
不确定时,先加 -n 干跑看效果。
必用参数
| 参数 | 含义 | 必用场景 |
|---|---|---|
-a | 归档模式(=-rlptgoD),保留所有属性 + 递归 | 几乎所有场景 |
-v | 详细输出 | 调试/确认范围 |
-h | 人类可读单位(KB/MB/GB) | 必加 |
-z | 传输时压缩 | 远程同步 |
-P | --partial --progress 断点续传 + 进度 | 大文件、网络不稳 |
-n | 干跑,不实际执行 | --delete 前必加测试 |
--delete | 删除目标目录中源没有的文件(镜像同步) | 备份、发布需双端一致时 |
--exclude=PAT | 排除模式 | 跳过 .git、*.log 等 |
高频实战命令
# 本地全量备份
rsync -avh /data/project/ /backup/project/
# 远程推送(代码发布)
rsync -azvhP ./ root@192.168.1.100:/var/www/html/
# 自定义 SSH 端口
rsync -azvhP -e 'ssh -p 2222' ./ root@host:/var/www/html/
# 远程拉取
rsync -azvhP root@host:/backup/mysql/ /local/backup/
# 镜像同步(先 -n 测试再执行!)
rsync -azvhP --delete -n ./ root@host:/var/www/html/ # 测试
rsync -azvhP --delete ./ root@host:/var/www/html/ # 执行
# 排除规则
rsync -azvhP --exclude='.git/' --exclude='*.log' --exclude='runtime/' \
./ root@host:/var/www/html/
# 排除文件清单
rsync -azvhP --exclude-from=exclude.list ./ root@host:/var/www/html/免密同步(推荐配置)
ssh-keygen # 一路回车
ssh-copy-id root@192.168.1.100 # 默认 22
ssh-copy-id -p 2222 root@192.168.1.100 # 自定义端口避坑
- 源目录末尾
/与否决定行为,不确定就加-n --delete高危,必须先-n测试-a不会跟随软链接源文件;如需跟随用-aL- 路径含空格须用双引号:
rsync -avh "/data/my project/" "/backup/my project/" - 远程用户必须对目标目录有写权限
万能模板
# 本地
rsync -avh 源/ 目标/
# 远程
rsync -azvhP 源/ user@host:目标/
# 镜像(先 -n 测试)
rsync -azvhP --delete -n 源/ user@host:目标/