第二章:基础用法¶
本章介绍 rsync 的基本用法,包括本地同步、远程同步和常用选项组合。
本地文件同步¶
基本复制¶
# 复制单个文件
rsync file.txt /backup/
# 复制整个目录
rsync -r source/ destination/
# 归档模式(推荐)
rsync -av source/ destination/
归档模式详解¶
-a 选项是 -rlptgoD 的组合:
含义:
- -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. 日志收集¶
常用选项组合¶
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. 模拟运行¶
2. 验证同步¶
# 比较源和目标
diff -r source/ destination/
# 使用 rsync 验证
rsync -av --dry-run --itemize-changes source/ destination/
3. 性能测试¶
小结¶
本章介绍了: - 本地和远程文件同步 - 常用选项组合 - 实用脚本示例 - 常见问题解决
下一章¶
下一章将介绍 rsync 的高级选项,包括排除规则、过滤模式、守护进程模式等。