告别 scp 的慢和不可靠,用 rsync 一行命令搞定安全备份
前置要求:一台有基本 Linux 使用经验的机器,知道命令行基本操作。
场景与目标
以前用 scp,每次都要等传输完成,断了还得重来,还没进度反馈目标:用 rsync 实现可靠的远程文件同步,要求支持断点续传、只同步变更部分,并且命令简单易用。
环境准备
检查是否安装了 rsync:
如果没装,CentOS 执行 yum install rsync,Ubuntu 执行 apt install rsync,搞定。
实操步骤
第一步:本地目录同步
先从一个最简单的场景开始——把 A 目录的文件同步到 B 目录。
rsync -av /home/user/source/ /home/user/backup/几个关键点:
-a 是归档模式,保留权限、时间戳、软链接等信息,等价于 -rlptgoD源目录末尾的斜杠 / 很重要:有斜杠表示同步目录内容,没有斜杠表示同步目录本身# 有斜杠:同步 source 目录里的内容到 backuprsync -av /home/user/source/ /home/user/backup/# 无斜杠:在 backup 下创建一个 source 子目录rsync -av /home/user/source /home/user/backup/# 结果是 /home/user/backup/source/file1 ...第二步:远程拉取——把服务器文件拉到本地
这是最常用的场景。把远程服务器的文件拉取到本地:
rsync -avz -e ssh user@remote-server:/home/user/logs/ /home/local/backup/logs/参数说明:
-z 是压缩传输,在网络传输时开启压缩,带宽低的时候效果明显-e ssh 指定使用 SSH 协议连接,也可以不写,默认就是 SSH执行后会提示你输入远程用户的密码。如果配置了 SSH 密钥认证,就可以免密操作。
免密配置(在本地机器执行):
ssh-copy-id user@remote-server配好之后,后面的同步命令就不再需要输入密码了。
第三步:远程推送——把本地文件推到服务器
方向反过来,把本地文件推到远程服务器:
rsync -avz -e ssh /home/local/data/ user@remote-server:/home/user/backup/data/注意对比第二步,命令几乎一样,只是源和目标的位置调换了。
第四步:增量同步——只传变化的文件
这是 rsync 的核心优势。第一次同步会全量传输,之后只同步变更过的文件:
rsync -avz --delete -e ssh /home/local/data/ user@remote-server:/home/user/backup/data/--delete 参数保证目标目录和源目录完全一致——源里删了的文件,目标也会跟着删
提示
--delete 比较激进,用之前想清楚。如果你只想同步新增和修改的文件,不做删除操作,去掉这个参数就行。
第五步:只同步特定类型的文件
配合 --include 和 --exclude 做精细控制:
# 只同步 .log 文件rsync -avz --include="*.log" --exclude="*" -e ssh /home/user/logs/ user@remote-server:/backup/logs/效果验证
同步完成后,检查一下:
# 对比两个目录的差异diff -rq /home/local/data/ /home/remote/backup/data/# 查看同步文件的数量ls /home/remote/backup/data/ | wc -l如果 diff 没有输出,说明两个目录内容一致,同步成功。
总结与进阶
这篇文章覆盖的五个步骤就是 rsync 日常最常用的功能:本地同步、远程拉取、远程推送、增量同步、过滤特定文件。掌握了这些,80% 的文件同步需求都能搞定。
进阶方向可以考虑:
结合 cron 设置定时同步(crontab -e 添加定时任务)使用 rsync 守护模式,不需要 SSH,适合批量服务器同步