Linux rsync 命令
什么是 rsync 命令
rsync (Remote Sync) 是 Linux 系统中一个功能强大的文件同步工具,它能够高效地在本地或远程系统之间同步文件和目录。rsync 以其"增量传输"算法著称,只传输源文件和目标文件之间的差异部分,大大提高了文件传输效率。
rsync 的核心特点
- 增量同步:仅传输变化的文件部分,节省带宽和时间
- 保留属性:可以保持文件权限、时间戳等元数据
- 压缩传输:支持数据传输时压缩,减少网络负载
- 灵活排除:可以排除特定文件或目录
- 远程支持:通过 SSH 安全地同步远程服务器文件
rsync 基本语法
rsync [选项] 源文件 目标文件
常用命令形式
本地同步:
rsync -av /path/to/source/ /path/to/destination/
从本地同步到远程:
rsync -avz /local/path/ username@remote_host:/remote/path/
从远程同步到本地:
rsync -avz username@remote_host:/remote/path/ /local/path/
rsync 常用选项详解
选项 | 全称 | 说明 |
---|---|---|
-a | --archive | 归档模式,保留所有文件属性(相当于 -rlptgoD) |
-v | --verbose | 显示详细传输信息 |
-z | --compress | 传输时压缩数据 |
-r | --recursive | 递归复制目录 |
-l | --links | 保留符号链接 |
-p | --perms | 保留文件权限 |
-t | --times | 保留文件修改时间 |
-g | --group | 保留文件所属组 |
-o | --owner | 保留文件所有者 |
-D | --devices | 保留设备文件(仅限超级用户) |
-h | --human-readable | 以人类可读格式输出数字 |
--progress | 显示传输进度 | |
--delete | 删除目标中源没有的文件 | |
--exclude=PATTERN | 排除匹配 PATTERN 的文件 | |
--include=PATTERN | 包含匹配 PATTERN 的文件 |
rsync 实际应用示例
示例 1:本地目录同步
实例
# 将 /home/user/docs 同步到 /backup/docs,保留所有属性
rsync -av /home/user/docs/ /backup/docs/
rsync -av /home/user/docs/ /backup/docs/
注意:源目录后的斜杠 /
很重要:
- 有斜杠:同步目录内容
- 无斜杠:同步目录本身
示例 2:远程服务器备份
实例
# 将本地目录同步到远程服务器,使用压缩
rsync -avz /data/backups/ user@example.com:/remote/backups/
rsync -avz /data/backups/ user@example.com:/remote/backups/
示例 3:带排除选项的同步
实例
# 同步但排除 .tmp 文件和 log 目录
rsync -av --exclude='*.tmp' --exclude='log/' /source/ /destination/
rsync -av --exclude='*.tmp' --exclude='log/' /source/ /destination/
示例 4:保持两端完全一致(删除目标端多余文件)
实例
rsync -av --delete /source/ /destination/
rsync 高级用法
1. 使用 SSH 自定义端口
实例
rsync -avz -e 'ssh -p 2222' /local/path/ user@host:/remote/path/
2. 带宽限制(限制为 500KB/s)
实例
rsync -avz --bwlimit=500 /source/ /destination/
3. 部分传输(只传输大于100KB的文件)
实例
rsync -av --min-size=100K /source/ /destination/
4. 定时备份脚本
实例
#!/bin/bash
rsync -avz --delete /important/data/ backup@server:/backups/data/
echo "Backup completed at $(date)" >> /var/log/backup.log
rsync -avz --delete /important/data/ backup@server:/backups/data/
echo "Backup completed at $(date)" >> /var/log/backup.log
rsync 常见问题解答
Q1: rsync 和 scp 有什么区别?
- rsync:增量同步,只传输差异部分,适合定期备份
- scp:每次全量传输,适合一次性文件传输
Q2: 如何恢复中断的 rsync 传输?
使用 --partial
选项保留部分传输的文件:
实例
rsync -av --partial /source/ /destination/
Q3: 如何查看 rsync 将做什么而不实际执行?
使用 -n
(dry-run) 选项:
实例
rsync -avn /source/ /destination/
Q4: 如何提高 rsync 传输速度?
- 使用
-z
选项启用压缩 - 使用
--compress-level=N
调整压缩级别(1-9) - 禁用校验和计算(仅限可信网络):
--no-checksum
最佳实践建议
- 测试先行:使用
-n
选项先进行模拟运行 - 日志记录:添加
--log-file=rsync.log
记录操作 - 权限管理:考虑使用
--chmod
统一文件权限 - 定时任务:结合 crontab 实现自动备份
- 安全传输:始终通过 SSH 进行远程传输
总结
rsync 是 Linux 系统管理员和开发者的必备工具,掌握它可以:
- 高效完成本地和远程文件同步
- 实现自动化备份方案
- 优化网络数据传输
- 保持文件系统的一致性
通过本文的学习,您应该已经掌握了 rsync 的基本用法和高级技巧。建议在实际工作中多加练习,逐步探索更多 rsync 的强大功能。
点我分享笔记