rsync 命令 #

rsync(remote sync)是一个功能强大的文件同步工具,用于在本地和远程系统之间高效地复制和同步文件。它通过仅传输文件的变化部分来节省带宽和时间,是备份、镜像和文件分发的理想选择。

基本语法 #

bash
rsync [选项] 源路径 目标路径

本地同步 #

bash
rsync [选项] /本地/源/路径 /本地/目标/路径

远程同步(使用SSH) #

bash
# 从本地同步到远程
rsync [选项] /本地/源/路径 用户@远程服务器:/远程/目标/路径

# 从远程同步到本地
rsync [选项] 用户@远程服务器:/远程/源/路径 /本地/目标/路径

常用选项 #

基本选项 #

  • -v:详细输出模式
  • -q:安静模式,只显示错误信息
  • -a:归档模式,递归同步并保留文件属性(权限、时间戳等)
  • -r:递归同步目录
  • -l:保留符号链接
  • -p:保留文件权限
  • -t:保留文件时间戳
  • -g:保留文件所属组
  • -o:保留文件所有者
  • -D:保留设备文件和特殊文件

传输选项 #

  • -z:压缩传输数据
  • -P:显示进度条并保留部分传输的文件
  • --progress:显示传输进度
  • --partial:保留部分传输的文件
  • --bwlimit=KBPS:限制带宽(KB/秒)
  • -e:指定远程shell程序(如SSH)

同步策略选项 #

  • -u:仅更新目标中不存在或较旧的文件
  • --delete:删除目标中存在但源中不存在的文件
  • --exclude=PATTERN:排除匹配模式的文件或目录
  • --include=PATTERN:包含匹配模式的文件或目录
  • --filter=RULE:使用规则文件进行复杂的包含/排除

安全选项 #

  • -i:显示文件传输的详细列表
  • --dry-run:模拟同步操作,不实际执行
  • --checksum:基于文件内容而非时间戳和大小来决定是否同步

示例用法 #

1. 本地目录同步 #

bash
# 基本同步
rsync -av /home/user/documents/ /backup/documents/

# 同步并显示进度
rsync -avP /home/user/documents/ /backup/documents/

2. 远程同步到本地 #

bash
# 从远程服务器下载文档到本地
rsync -avP user@example.com:/home/user/documents/ /local/documents/

3. 本地同步到远程 #

bash
# 上传本地照片到远程服务器
rsync -avP /local/photos/ user@example.com:/remote/photos/

4. 使用SSH端口和密钥 #

bash
# 使用特定SSH端口
rsync -avP -e "ssh -p 2222" /local/data/ user@example.com:/remote/data/

# 使用SSH密钥文件
rsync -avP -e "ssh -i ~/.ssh/mykey" /local/data/ user@example.com:/remote/data/

5. 增量备份与删除 #

bash
# 同步并删除目标中不存在的文件(镜像模式)
rsync -av --delete /local/source/ /local/backup/

# 仅同步较新的文件
rsync -avu /local/source/ /local/backup/

6. 排除文件和目录 #

bash
# 排除特定文件类型
rsync -av --exclude="*.tmp" /local/source/ /local/backup/

# 排除多个文件和目录
rsync -av --exclude="*.tmp" --exclude="/logs/" --exclude="/tmp/" /local/source/ /local/backup/

# 使用排除文件
rsync -av --exclude-from="exclude.txt" /local/source/ /local/backup/

7. 压缩传输 #

bash
# 在低带宽连接上使用压缩
rsync -avz /local/source/ user@example.com:/remote/destination/

高级技巧 #

1. 备份整个系统 #

bash
# 备份根目录(排除不需要的目录)
rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /backup/

2. 实时同步 #

bash
# 使用watch命令实现准实时同步
watch -n 60 rsync -av --delete /local/source/ /local/backup/

3. 同步大文件 #

bash
# 使用--partial选项确保大文件传输中断后可以继续
rsync -avP --partial /local/largefile.iso user@example.com:/remote/

4. 检查同步差异 #

bash
# 模拟同步并显示将执行的操作
rsync -av --delete --dry-run /local/source/ /local/backup/

常见问题与解决方案 #

1. 权限错误 #

问题:同步时遇到权限被拒绝的错误 解决方案:确保源文件有读取权限,目标路径有写入权限,或使用sudo提升权限

2. SSH连接问题 #

问题:无法建立SSH连接 解决方案:检查SSH服务是否运行,端口是否正确,密钥或密码是否有效

3. 符号链接问题 #

问题:符号链接没有正确同步 解决方案:使用-l选项保留符号链接,或使用-L选项将符号链接解析为实际文件

4. 大文件传输中断 #

问题:大文件传输经常中断 解决方案:使用–partial选项和-P选项,结合–bwlimit限制带宽

性能优化 #

  1. 使用增量传输:rsync默认只传输文件的变化部分,无需额外选项
  2. 禁用压缩:对于已压缩的文件(如zip、jpg),使用–no-compress选项
  3. 增加SSH缓冲区:使用-e "ssh -o Compression=no -o TCPKeepAlive=yes"
  4. 使用快速校验:对于大文件,使用–checksum选项可能更慢,建议仅在必要时使用

rsync是一个功能丰富的工具,本文仅介绍了最常用的功能和选项。要了解完整的选项列表,请运行man rsync查看详细手册。

最后更新:2026-02-07