Linux 文件同步工具 rsync 详解

本文档详细介绍了 Linux 系统中常用的文件同步工具 rsync,以及与之相关的文件传输工具 scp。适用于服务器迁移、数据备份、远程同步等场景。


工具对比

特性 scp rsync
适用网络 内网复制、迁移 内网和外网同步、迁移
传输方式 基于 SSH 基于 SSH 或独立守护进程
增量同步 ❌ 不支持 ✅ 支持
压缩传输 ❌ 不支持 ✅ 支持
断点续传 ❌ 不支持 ✅ 支持
带宽控制 ❌ 不支持 ✅ 支持
备份功能 ❌ 不支持 ✅ 支持

scp 命令详解

scp(secure copy)是基于 SSH 的安全文件复制命令,适用于内网环境下的文件迁移。

命令语法

1
scp [选项] 源文件/目录 目标路径

常用选项

选项 说明
-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]

其中,SRCDEST 可以是本地路径或远程路径,取决于工作模式。

六种工作模式

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/

注意事项

  1. 路径末尾斜杠/source/ 表示同步目录内容,/source 表示同步整个目录
  2. SSH 端口scp 使用大写 -Prsync 使用 -e 'ssh -p 端口'
  3. 权限问题:确保源目录和目标目录的读写权限
  4. 网络稳定性:大文件传输建议使用 --partial 支持断点续传
  5. 带宽控制:生产环境建议使用 --bwlimit 限制带宽
  6. 备份策略:重要数据同步建议使用 --backup--backup-dir 参数

总结

  • scp:简单快速,适合内网环境下的文件复制
  • rsync:功能强大,支持增量同步、压缩传输、带宽控制等高级功能,适合各种复杂场景

选择合适的工具可以显著提高文件同步的效率和可靠性。