Rsync 命令详解Linux 文件同步与备份的艺术一、认识 rsync二、安装与基本语法2.1 安装2.2 语法与斜杠陷阱三、常用选项速查表3.1 选项列表3.2 归档模式与常用组合四、本地同步实战五、远程同步推与拉5.1 推送本地 → 远程5.2 拉取远程 → 本地5.3 使用非标准 SSH 端口六、镜像同步与 --delete6.1 实现严格镜像6.2 安全变体七、增量备份与快照 (--link-dest)7.1 硬链接快照原理7.2 自动化快照脚本八、过滤与排除规则8.1 简单排除8.2 使用排除规则文件8.3 复杂包含与排除九、传输优化限速与断点续传9.1 带宽限制9.2 断点续传十、rsync 守护进程模式十一、调试、日志与统计十二、自动化备份脚本示例十三、常见陷阱与最佳实践13.1 斜杠陷阱13.2 --delete 双刃剑13.3 文件时间导致重复传输13.4 超大目录处理13.5 rsync 与 SCP 的选择十四、结语一、认识 rsync在 Linux 世界里rsync是一个几乎无法绕过的命令。无论是运维工程师的日常备份还是开发者同步代码到服务器它都能以最小的网络开销、最灵活的方式完成文件传输。rsyncremote sync是一款开源的、快速的、多功能的文件同步工具最核心的能力是增量传输——只传输源和目标之间的差异部分从而大幅节省时间和带宽。同时它还能保持文件的权限、时间戳、软硬链接等元信息常用于备份、镜像、部署等场景。二、安装与基本语法2.1 安装大多数发行版已经预装了rsync如果没有# Debian/Ubuntusudoaptinstallrsync# RHEL/CentOS/Fedorasudodnfinstallrsync2.2 语法与斜杠陷阱基本语法非常简单rsync[选项]源路径 目标路径源路径可以是本地目录/文件也可以是远程地址如userhost:/path目标路径同理如果源路径末尾带有/表示同步该目录的内容不带则同步目录本身。这是最常见的坑务必将这一点刻在脑子里。三、常用选项速查表3.1 选项列表下表列出最实用的选项后续会逐一展开示例。选项长选项作用-a--archive归档模式等于-rlptgoD保留几乎一切属性并递归-v--verbose显示详细输出-z--compress传输时压缩数据-P--partial --progress显示进度支持断点续传-n--dry-run模拟运行不实际同步测试必备--delete删除目标端比源端多出的文件实现镜像同步--exclude排除匹配的文件/目录--include包含匹配的文件/目录-e--rsh指定远程 shell如-e ssh -p 2222--bwlimit限速单位 KB/s如--bwlimit5000--link-dest硬链接增量备份的关键指向一个参考目录--checksum-c基于文件校验和决定是否跳过更准确但更慢3.2 归档模式与常用组合-a是基石选项它等价于-rlptgoD即递归、保留符号链接、权限、时间戳、组、所有者以及设备文件等。日常使用中-avzP已经能覆盖 80% 的场景但务必先用-avn即 dry-run确认行为尤其是涉及--delete时。四、本地同步实战将project/目录完整同步到/backup/project/使备份成为源目录的精确副本rsync-av--delete/home/user/project/ /backup/project/注意源路径末尾的/它表示把project/里面的所有内容复制到/backup/project/中。如果你写的是/home/user/project没有斜杠那么会在/backup/project/下再创建一个project子目录。五、远程同步推与拉rsync 原生支持通过 SSH 进行远程传输数据全程加密。5.1 推送本地 → 远程rsync-avzP/local/data/ user192.168.1.100:/remote/backup/5.2 拉取远程 → 本地rsync-avzPuser192.168.1.100:/remote/logs/ /local/logs/5.3 使用非标准 SSH 端口rsync-avzP-essh -p 2222/local/data/ userremote:/backup/六、镜像同步与 --delete6.1 实现严格镜像如果你希望目标目录是源目录的严格镜像即删除目标中源没有的文件必须加上--deletersync-av--delete/www/live/ /www/deploy/非常危险务必先用-n测试rsync-avn--delete/www/live/ /www/deploy/6.2 安全变体--delete-before传输前删除--delete-after传输后删除默认行为--delete-excluded同时删除被排除的文件--delete-delay延迟删除减少 IO 开销根据业务场景选择但任何带有删除行为的操作都必须先在 dry-run 下验证。七、增量备份与快照 (–link-dest)7.1 硬链接快照原理--link-dest是 rsync 的“杀手级”功能。它可以创建一个类似 Time Machine 的硬链接快照每次备份时对未变化的文件只创建硬链接而不复制数据从而在保留多份历史快照的同时只占用极少量的额外空间。7.2 自动化快照脚本假设你想每天在/backup/下保留日期命名的快照#!/bin/bashBACKUP_DIR/backupDATE$(date%Y-%m-%d)LATEST_LINK$BACKUP_DIR/latest# 如果存在前一天的备份则用它作为参考否则不参考if[-d$LATEST_LINK];thenLINK_DEST--link-dest$LATEST_LINKfirsync-av--delete\$LINK_DEST\/home/user/important/\$BACKUP_DIR/$DATE/# 更新 latest 符号链接为最新备份rm-f$LATEST_LINKln-sf$BACKUP_DIR/$DATE$LATEST_LINK即使备份了 30 天未变化的文件也只占用一份磁盘空间latest总是指向最近一次成功备份。八、过滤与排除规则8.1 简单排除排除特定文件或目录rsync-av--exclude*.log--exclude.git/--excludetemp//src/ /dst/8.2 使用排除规则文件对于复杂的排除需求可以编写规则文件rsync-av--exclude-from/etc/rsync-exclude.txt/src/ /dst/rsync-exclude.txt示例*.tmp .git/ node_modules/ .DS_Store8.3 复杂包含与排除rsync 采用先匹配先生效的原则。如果需要在整体排除的前提下包含某个子目录可以这样rsync-av--includesubdir/***--exclude*/src/ /dst/这里***会匹配subdir/下所有层级的内容。九、传输优化限速与断点续传9.1 带宽限制避免 rsync 吃满带宽尤其在业务运行时段rsync-avzP--bwlimit1000/large/data/ userremote:/backup/限速单位为 KB/s。9.2 断点续传-P选项等同于--partial --progress会保留未传完的临时文件通常以.partial结尾。对于已经中断的传输直接重跑同样的命令rsync 会利用这些文件自动续传非常适合大文件场景。十、rsync 守护进程模式除了 SSH 通道rsync 还可以通过自己的守护进程通信适合提供公共镜像或简化权限管理。服务端配置/etc/rsyncd.conf[backup] path /data/backup read only no auth users backupuser secrets file /etc/rsyncd.secrets客户端连接rsync-av/local/files/ rsync://backupuserserver/backup/必须将密码文件权限设为 600生产环境下推荐配合防火墙和 chroot 限制路径。十一、调试、日志与统计模拟运行-n或--dry-run永远是你最好的朋友。查看更详细的信息可叠加多个-v如-vvv查看哪些文件被跳过以及原因。记录日志使用--log-file/var/log/rsync.log将输出保存到文件。统计摘要--stats会在结尾输出文件数、传输量等汇总信息。十二、自动化备份脚本示例一个完整的、带错误通知的每日备份脚本#!/bin/bashset-eSOURCE/home/userDESTbackupnas::dailyLOG/var/log/rsync-daily.logrsync-avzP--delete\--exclude.cache/\--excludeDownloads/\--log-file$LOG\$SOURCE/$DESTif[$?-eq0];thenechoBackup success|mail-sBackup OKadminexample.comelseechoBackup failed|mail-sBackup FAILEDadminexample.comfi将此脚本加入 cron0 2 * * * /usr/local/bin/backup.sh十三、常见陷阱与最佳实践13.1 斜杠陷阱源路径末尾的/会改变行为src/同步内容src同步目录本身。每次使用前先用-n确认效果。13.2 --delete 双刃剑永远不要在未经 dry-run 验证的情况下对重要目标使用--delete建议与快照机制搭配。13.3 文件时间导致重复传输如果发现 rsync 每次都传输某些未变化的文件可能是时间戳丢失或文件系统不支持。可尝试添加--size-only仅比较大小或-c比较校验和。13.4 超大目录处理递归扫描海量文件时rsync 会消耗大量内存。可考虑拆分任务或使用--delete-delay减少 IO 压力。13.5 rsync 与 SCP 的选择scp适合一次性快速拷贝完整文件。rsync适合增量同步、定时任务和需要保留属性的场景。对海量小文件rsync 的增量算法优势极为明显。十四、结语rsync 是“一次学习终身受用”的命令行工具。从简单的本地备份到跨公网的镜像分发它都表现得可靠而高效。掌握本文中的选项和思维模型你已经可以解决绝大部分文件同步难题。最后再强调一次先 dry-run再执行。如果你还有更深层的需求比如 rsync 算法的工作原理、与 inotify 结合实现实时同步等也欢迎深入探索。希望这篇重构后的指南能成为你手边最清晰的参考。