linux rsync 是 Linux 非常核心的远程 / 本地文件同步备份工具,最大特点是增量同步,只会传输发生变化的文件块,不是每次全量复制,相比 scp cp 大幅节省带宽和时间,支持本地同步、SSH 远程同步、rsync daemon 守护进程三种模式,广泛用于服务器数据备份、网站代码发布、多机数据一致性同步,它可以保留文件权限、属主、属组、软链接、时间戳等属性,还支持排除指定文件,断点续传,很多运维自动化备份脚本都会使用 rsync,重点要掌握基础语法、常用参数、三种同步模式、源路径末尾斜杠这个经典坑点,这是新手最容易出错的地方。
基础语法
通用格式
rsync [参数] 源路径 目标路径
重点坑点:源路径末尾有没有斜杠含义完全不一样
rsync -av /data//backup/ 只同步 data 里面的内容到 backup
rsync -av /data/backup/ 把 data 整个目录同步到 backup,backup 里面会生成 data 文件夹
常用核心参数对照表
| 参数 | 功能说明 |
|---|---|
| -a | 归档模式,最常用,等价 -rlptgoD,递归 + 保留权限属主时间戳软链接等属性 |
| -v | verbose,输出详细同步过程 |
| -z | 传输时压缩数据,跨网络同步节省带宽 |
| -P | 等于 --partial --progress,断点续传 + 显示传输进度 |
| -r | 递归同步子目录 |
| -t | 保留修改时间 |
| -p | 保留文件权限 |
| -o | 保留属主,一般需要 root |
| -g | 保留属组 |
| -l | 保留软链接 |
| --delete | 删除目标端源端已经不存在的文件,实现镜像同步 |
| --exclude | 排除不需要同步的文件或者目录 |
| --bwlimit | 限制传输带宽,单位 KB/s,防止同步占满带宽 |
| -e | 指定远程传输通道,一般搭配 ssh 使用 |
三种同步模式深度拆解
模式 1 本地同步
两台路径都在本机,类似高级 cp,但是支持增量
示例
rsync -av /source//dest/
模式 2 SSH 远程同步(最常用)
通过 ssh 通道连接远程服务器,不需要单独配置 rsync 服务
示例
rsync -avzP /localdata/root@192.168.1.10:/remotedata/
拉取远程到本地
rsync -avzP root@192.168.1.10:/remotedata//localdata/
可以自定义 ssh 端口,写法
rsync -avzP -e "ssh -p 2222" /data/root@IP:/path/
模式 3 rsync daemon 守护进程模式
远程主机启动 rsyncd 服务,配置 /etc/rsyncd.conf,使用模块名访问,不需要 ssh 账号,适合大规模备份,支持独立账号密码认证,格式
rsync -avzP /data/rsync://IP/ 模块名 /
实操经典案例
镜像同步,目标多余文件删除
rsync -av --delete /web/ root@192.168.1.20:/web/
注意 --delete 风险很高,误操作会清空目标端文件,正式执行前建议加 --dry-run 预演测试
排除文件同步
rsync -av --exclude=".log" --exclude="tmp/" /src/ /dst/
带宽限速同步
rsync -avz --bwlimit=1024 /bigfile/ root@IP:/backup/
预演测试(dry-run,不会真的修改文件)
rsync -av --dry-run /src/ /dst/
进阶要点
1 rsync 增量判断依据:文件大小 + 修改时间,也可以用 --checksum 改成校验和比对,更精准但是消耗 CPU
2 权限问题:保留属主 - o 需要 root 权限,普通用户执行会报错
3 断点续传:大文件传输中断之后,加 - P 可以接着传,不用从头再来
4 定时备份:一般搭配 crontab 定时任务,定期自动执行 rsync 备份
常见报错排错清单
1 Permission denied 源或者目标目录读写权限不足,或者 ssh 登录失败
2 No such file or directory 路径写错,重点检查源路径末尾斜杠
3 连接超时 远程 ssh 端口不通,防火墙拦截,daemon 模式 rsync 端口 873 被拦截
4 同步之后权限丢失 没有使用 - a 归档参数
5 同步之后目标多出整个源目录 源路径忘记加末尾斜杠
【常见问题】
问题 1 linuxrsync 也就是 rsync 源路径末尾斜杠有什么区别
回答 1 linuxrsync 也就是 rsync,源路径带斜杠是同步目录里面内容,不带斜杠是把整个源目录本身同步到目标,是 linuxrsync 最经典易错点。
问题 2 linuxrsync 也就是 rsync -a 参数是什么作用
回答 2 linuxrsync 也就是 rsync 的 - a 是归档模式,递归同步同时保留权限、属主、属组、时间戳、软链接,是 linuxrsync 最常用参数。
问题 3 linuxrsync 也就是 rsync --delete 参数风险是什么
回答 3 linuxrsync 也就是 rsync 的 --delete 会删除目标端源端不存在的文件,做镜像同步使用,误操作会清空目标文件,执行 linuxrsync 前建议 --dry-run 预演。
问题 4 linuxrsync 也就是 rsync 和 scp 区别是什么
回答 4 linuxrsync 也就是 rsync 支持增量同步,只传变更部分,scp 是全量复制,大文件大目录跨机同步优先选择 linuxrsync。
【免责申明】
本文 linuxrsync 也就是 rsync 命令详解基于 GNU rsync 版本编写,不同发行版版本参数细节存在差异,执行 man rsync 查看本机手册,生产环境使用 --delete 类危险参数务必提前测试,内容仅用于 linux 运维学习参考。


