rsync 文件同步实战:从一次手动同步到自动备份
日常工作中,文件同步几乎无处不在:把本地代码推到测试服务器、把网站静态资源部署到线上、定期给重要数据做一份异地备份。如果每次都靠 cp 全量复制、靠 scp 一股脑传完,不仅慢,还容易传错。rsync 正是为解决这个问题而生的工具:只传变化的部分,支持断点续传,还能方便地通过 SSH 走加密通道。
一、rsync 是什么
rsync 是 Linux 系统上经典的文件同步工具,名字来自 remote sync。它的核心思路是增量传输:第一次同步时传走全部文件,之后每次只比较源和目标的差异,把新增和改动过的文件传过去,没变的文件直接跳过。对于大目录、频繁改动的场景,这个特性可以把同步时间从几分钟压到几秒。
它最大的优点有三个:增量传输省带宽、支持断点续传、用法简单,一条命令就能完成本地和远程之间的同步。
二、安装与第一次同步
大多数 Linux 发行版都自带 rsync,没有的话用包管理器安装:
# Debian / Ubuntu
sudo apt install rsync
# RHEL / CentOS
sudo yum install rsync
# macOS
brew install rsync
安装完成后,先做一次最简单的本地同步,把 ~/site 同步到备份目录:
rsync -av ~/site/ /data/backup/site/
命令末尾的斜杠很有讲究:~/site/ 表示同步目录里的内容;如果写成 ~/site(没有斜杠),则会把 site 这个目录本身也复制过去。新手第一次用 rsync,十有八九会在这个斜杠上踩坑。
三、最常用的几个选项
记住一组常用参数组合,能覆盖八成场景:
- -a:归档模式,递归同步并保留权限、时间戳、属主等属性;
- -v:输出详细过程,方便确认传了哪些文件;
- -z:传输时压缩,适合带宽紧张的远程同步;
- -n:演练模式,只列出会同步哪些文件,不真正传输,正式执行前先跑一遍很安心;
- –delete:删除目标端多余的文件,让两端保持完全一致;
- –exclude:排除不需要同步的文件或目录。
日常最常用的一条命令就是 rsync -avz。
四、排除文件与增量同步
实际同步时总有些东西不需要传,比如日志、缓存和依赖目录。可以用 --exclude 逐个排除:
rsync -avz --exclude 'node_modules' --exclude '*.log' ~/project/ /data/backup/project/
多个排除规则写起来麻烦时,可以把规则写进一个文件,用 --exclude-from 统一管理。需要注意的是,排除规则是按路径模式匹配的,*.log 会匹配所有层级的日志文件;如果只想排除顶层目录,规则前要加上斜杠。
五、通过 SSH 同步到远程服务器
rsync 真正发光的场合是远程同步。配合 SSH,它可以直接把文件推到服务器上:
rsync -avz ~/site/ user@192.168.1.10:/var/www/site/
加上 SSH 免密登录后,这条命令连密码都不用输。部署静态网站的流程就变成:本地构建、一条 rsync 推上去,全程只传改动的文件。也可以反过来从服务器拉取文件做备份:
rsync -avz user@192.168.1.10:/var/log/nginx/ ~/backup/nginx-logs/
六、配合 Cron 做每日自动备份
把同步命令写进一个脚本,再用 Cron 每天凌晨执行,自动备份就搭好了:
#!/bin/bash
# backup.sh
rsync -avz --delete ~/docs/ /data/backup/docs/ >> /var/log/backup.log 2>&1
把脚本加进 Crontab,每天凌晨 2 点自动跑:
0 2 * * * /home/user/backup.sh
第一周可以每天检查一下日志,确认备份确实在跑、文件确实在变。等流程稳定后,偶尔抽查一次即可。
七、几个常见坑
第一,源路径末尾斜杠的含义不同,正式同步前务必用 -n 演练一遍。第二,–delete 是危险操作,目标目录写错会删掉不该删的文件,养成先演练、再加 --delete 的习惯。第三,目标端磁盘满了,rsync 会报错中断,备份脚本里最好加上磁盘空间检查。第四,文件权限和属主信息依赖 -a 保留,跨用户同步时要确认目标端账号有写入权限。
结语
rsync 的命令看起来简单,但理解了增量传输、斜杠语义和 --delete 的风险之后,它就能从一个“会用的工具”变成“敢用在生产备份里的工具”。从一次手动同步开始,再到定时自动备份,文件同步这件事,其实只需要这一条命令打底。
- 点赞
- 收藏
- 关注作者
评论(0)