Linux 文件同步工具 rsync 详解
本文档详细介绍了 Linux 系统中常用的文件同步工具 rsync,以及与之相关的文件传输工具 scp。适用于服务器迁移、数据备份、远程同步等场景。
工具对比
| 特性 |
scp |
rsync |
| 适用网络 |
内网复制、迁移 |
内网和外网同步、迁移 |
| 传输方式 |
基于 SSH |
基于 SSH 或独立守护进程 |
| 增量同步 |
❌ 不支持 |
✅ 支持 |
| 压缩传输 |
❌ 不支持 |
✅ 支持 |
| 断点续传 |
❌ 不支持 |
✅ 支持 |
| 带宽控制 |
❌ 不支持 |
✅ 支持 |
| 备份功能 |
❌ 不支持 |
✅ 支持 |
scp 命令详解
scp(secure copy)是基于 SSH 的安全文件复制命令,适用于内网环境下的文件迁移。
命令语法
常用选项
| 选项 |
说明 |
-a |
归档模式,保留文件属性、权限、软链接(等同于 -rlpgoD) |
-r |
递归复制,用于复制目录 |
-P |
指定 SSH 端口号(注意是大写 P) |
-i |
指定身份文件(私钥文件) |
-v |
详细模式,显示详细的调试信息 |
-z |
压缩传输,通过压缩减少传输数据量 |
-p |
保持文件的权限不变 |
-e |
指定 SSH 远程连接程序 |
使用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 从本地复制到远程 scp localfile.txt user@remote:/path/to/destination/
# 从远程复制到本地 scp user@remote:/path/to/file.txt /local/destination/
# 从远程复制到远程 scp user1@remote1:/path/to/sourcefile.txt user2@remote2:/path/to/destination/
# 使用端口和指定私钥 scp -P2222 -i /path/to/private_key.pem localfile.txt user@remote:/path/to/destination/
# 递归复制目录 scp -r sourcedir user@remote:/path/to/destination/
# 使用端口并显示详细信息 scp -v -P 10022 xxxx.tar.gz root@1.11.222.233:/data/wwwroot/
|
rsync 命令详解
rsync(remote sync)是 Linux 系统中强大的文件同步工具,支持本地和远程同步,具有增量同步、压缩传输、带宽控制等高级功能。
安装方法
1 2 3 4 5
| # CentOS/RHEL 系统 yum install rsync -y
# Ubuntu/Debian 系统 apt-get install rsync -y
|
命令语法
1
| rsync [OPTION]... [SRC] [DEST]
|
其中,SRC 和 DEST 可以是本地路径或远程路径,取决于工作模式。
六种工作模式
1. 本地到远程(使用远程 shell 程序)
1 2
| rsync [OPTION]... SRC [USER@]HOST:DEST rsync [OPTION]... SRC [USER@]HOST::DEST
|
2. 远程到本地(使用远程 shell 程序)
1 2
| rsync [OPTION]... [USER@]HOST:SRC DEST rsync [OPTION]... [USER@]HOST::SRC DEST
|
3. 列远程机的文件列表
1
| rsync -avz [USER@]HOST::SRC /local/directory
|
4. 拷贝本地文件到远程 rsync 服务器
1
| rsync -avz /local/path [USER@]HOST::DEST
|
5. 拷贝远程文件到本地的 rsync 服务器
1
| rsync -avz [USER@]HOST:remote/path /local/directory
|
6. 增量备份(只备份不同的文件)
1 2 3 4 5
| # 方式一:使用后缀备份 rsync -av --backup --suffix=.bak --delete SOURCE_DIR destination_dir
# 方式二:使用独立备份目录 rsync -av --backup-dir=/path/to/backup/dir --delete SOURCE_DIR destination_dir
|
常用选项
| 选项 |
说明 |
-a |
归档模式,递归传输并保持文件属性(等同于 -rlpgoD) |
-v |
详细模式,显示传输过程中的信息 |
-z |
压缩模式,通过压缩减少传输数据量 |
--backup |
创建备份文件 |
--suffix |
指定备份文件的扩展名(默认为 ~) |
--delete |
删除目标目录中存在而源目录中不存在的文件 |
-r |
递归模式,用于处理子目录 |
-R |
相对路径模式,用于处理相对于某个目录的文件路径 |
--progress |
显示传输进度信息 |
--info=progress2 |
显示更详细的进度信息(整体传输进度) |
--bwlimit=RATE |
限制带宽使用(单位:KB/s) |
--partial |
保留未完成的传输文件(支持断点续传) |
--inplace |
直接修改目标文件而不是创建备份文件 |
-b |
备份模式,创建备份文件 |
--backup-dir |
指定备份文件的存放目录 |
组合命令示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 完整功能示例:保留各种属性,递归处理,压缩传输,详细输出,SSH 连接 rsync -arzhvtopg -e 'ssh -p 16156' --delete root@1.2.632.4:/data/docker/wwwroot /data/backup/ > /data/log/rsync/datacenter.log
# 基础同步:保持文件属性、递归处理、压缩传输和详细输出 rsync -avz /data/docker/wwwroot root@36.133.206.63:/data/backup/
# 增量备份示例 rsync -avz --backup --backup-dir=/backup/$(date +%Y%m%d) --delete /source/ /destination/
# 带宽限制同步 rsync -avz --bwlimit=1000 /source/ /destination/
# 显示详细进度 rsync -avz --progress /source/ /destination/
# 断点续传 rsync -avz --partial /source/ /destination/
|
常见使用场景
1. 服务器迁移
1 2 3 4 5
| # 迁移整个目录 rsync -avz --delete -e 'ssh -p 22' /data/ user@newserver:/data/
# 仅同步差异文件 rsync -avz --update /source/ /destination/
|
2. 数据备份
1 2 3
| # 每日备份到独立目录 BACKUP_DIR="/backup/$(date +%Y%m%d)" rsync -avz --delete /data/ ${BACKUP_DIR}/
|
3. 远程同步
1 2 3 4 5
| # 同步到远程服务器 rsync -avz --delete /local/path/ user@remote:/remote/path/
# 从远程服务器同步 rsync -avz --delete user@remote:/remote/path/ /local/path/
|
4. 局域网同步
1 2
| # 使用 SSH 端口转发 rsync -avz -e 'ssh -p 2222' /source/ user@host:/destination/
|
注意事项
- 路径末尾斜杠:
/source/ 表示同步目录内容,/source 表示同步整个目录
- SSH 端口:
scp 使用大写 -P,rsync 使用 -e 'ssh -p 端口'
- 权限问题:确保源目录和目标目录的读写权限
- 网络稳定性:大文件传输建议使用
--partial 支持断点续传
- 带宽控制:生产环境建议使用
--bwlimit 限制带宽
- 备份策略:重要数据同步建议使用
--backup 或 --backup-dir 参数
总结
- scp:简单快速,适合内网环境下的文件复制
- rsync:功能强大,支持增量同步、压缩传输、带宽控制等高级功能,适合各种复杂场景
选择合适的工具可以显著提高文件同步的效率和可靠性。