跳转至

第二章:基础用法

本章介绍 rsync 的基本用法,包括本地同步、远程同步和常用选项组合。

本地文件同步

基本复制

# 复制单个文件
rsync file.txt /backup/

# 复制整个目录
rsync -r source/ destination/

# 归档模式(推荐)
rsync -av source/ destination/

归档模式详解

-a 选项是 -rlptgoD 的组合:

-a = -r -l -p -t -g -o -D

含义: - -r:递归目录 - -l:复制符号链接 - -p:保留权限 - -t:保留时间戳 - -g:保留组 - -o:保留所有者 - -D:保留设备文件

查看同步详情

# 显示详细信息
rsync -av source/ destination/

# 显示更多信息
rsync -avv source/ destination/

# 显示统计信息
rsync -av --stats source/ destination/

远程文件同步

SSH 同步

# 推送到远程服务器
rsync -av /local/path/ user@remote:/remote/path/

# 从远程服务器拉取
rsync -av user@remote:/remote/path/ /local/path/

# 指定 SSH 端口
rsync -av -e "ssh -p 2222" source/ user@remote:/dest/

# 使用 SSH 密钥
rsync -av -e "ssh -i ~/.ssh/id_rsa" source/ user@remote:/dest/

常用远程同步场景

1. 网站部署

# 部署静态网站
rsync -av --delete public_html/ user@webserver:/var/www/html/

# 排除 .git 目录
rsync -av --exclude=".git" site/ user@server:/var/www/

2. 数据库备份

# 备份 MySQL 数据库
mysqldump -u root -p database > backup.sql
rsync -av backup.sql user@backup:/backups/

3. 日志收集

# 同步日志文件
rsync -av /var/log/nginx/ user@logserver:/backups/logs/

常用选项组合

1. 显示进度

# 显示传输进度
rsync -avP source/ destination/

# P 选项等价于 --partial --progress
# --partial:保留部分传输的文件
# --progress:显示传输进度

2. 压缩传输

# 压缩传输(适合慢速网络)
rsync -avz source/ user@remote:/dest/

# 压缩级别 1-9(默认 6)
rsync -avz --compress-level=9 source/ destination/

3. 删除目标多余文件

# 保持源和目标完全一致
rsync -av --delete source/ destination/

# 先模拟运行
rsync -av --delete --dry-run source/ destination/

4. 文件大小限制

# 只同步小于 100MB 的文件
rsync -av --max-size=100M source/ destination/

# 只同步大于 1MB 的文件
rsync -av --min-size=1M source/ destination/

5. 时间过滤

# 只同步过去 24 小时内修改的文件
rsync -av --files-from=<(find source/ -mtime -1) source/ destination/

# 使用 --time-window
rsync -av --time-window=1440 source/ destination/  # 1440 分钟 = 24 小时

实用示例

示例 1:备份重要文件

#!/bin/bash
# backup.sh

SOURCE_DIR="/home/user/important/"
BACKUP_DIR="/backup/important/"
LOG_FILE="/var/log/backup.log"

echo "开始备份 $(date)" >> $LOG_FILE

rsync -av --delete \
  --exclude="*.tmp" \
  --exclude="cache/" \
  $SOURCE_DIR $BACKUP_DIR >> $LOG_FILE 2>&1

echo "备份完成 $(date)" >> $LOG_FILE

示例 2:同步两个目录

#!/bin/bash
# sync.sh

DIR1="/data/dir1/"
DIR2="/data/dir2/"

# 双向同步(简单实现)
rsync -av $DIR1 $DIR2
rsync -av $DIR2 $DIR1

# 或者使用 unison 工具
# unison $DIR1 $DIR2

示例 3:远程备份脚本

#!/bin/bash
# remote-backup.sh

LOCAL_DIR="/data/"
REMOTE_USER="backup"
REMOTE_HOST="backup.example.com"
REMOTE_DIR="/backup/data/"

# 检查网络连接
ping -c 1 $REMOTE_HOST > /dev/null 2>&1
if [ $? -eq 0 ]; then
    rsync -avz \
      --delete \
      --exclude="*.log" \
      --exclude="tmp/" \
      $LOCAL_DIR $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
else
    echo "无法连接到 $REMOTE_HOST"
fi

常见问题

1. 权限问题

# 使用 sudo 同步
sudo rsync -av source/ destination/

# 同步后修复权限
rsync -av source/ destination/
sudo chown -R user:group destination/

2. 连接超时

# 增加超时时间
rsync -av --timeout=60 source/ user@remote:/dest/

# 重试次数
rsync -av --retries=5 source/ user@remote:/dest/

3. 大文件传输

# 分块传输
rsync -av --partial source/ destination/

# 限制带宽(KB/s)
rsync -av --bwlimit=1000 source/ user@remote:/dest/

4. 符号链接处理

# 复制链接本身
rsync -av source/ destination/

# 复制链接指向的内容
rsync -avL source/ destination/

# 安全模式(不跟随外部链接)
rsync -av --safe-links source/ destination/

测试命令

1. 模拟运行

# 不实际执行,只显示会做什么
rsync -av --dry-run source/ destination/

2. 验证同步

# 比较源和目标
diff -r source/ destination/

# 使用 rsync 验证
rsync -av --dry-run --itemize-changes source/ destination/

3. 性能测试

# 测试传输速度
time rsync -av largefile.tar.gz user@remote:/tmp/

小结

本章介绍了: - 本地和远程文件同步 - 常用选项组合 - 实用脚本示例 - 常见问题解决

下一章

下一章将介绍 rsync 的高级选项,包括排除规则、过滤模式、守护进程模式等。