简介
rsync (remote sync) 是一个快速且极其通用的文件复制工具。它可以在本地计算机之间、本地计算机和远程计算机之间以及远程计算机之间同步文件和目录。 rsync 的关键特性是它只传输源文件和目标文件之间 差异的部分,从而大大减少了网络传输量,使其成为备份、镜像和数据迁移的理想选择。
主要特点和优势:
- 增量传输: 这是 rsync 最重要的特性。 它只传输源文件和目标文件之间更改的部分,而不是整个文件。 这显著提高了同步速度,尤其是在处理大型文件或通过慢速网络连接传输数据时。
- 压缩: rsync 可以压缩数据以减少传输量,进一步提高速度。
- 安全性: rsync 可以通过 SSH (Secure Shell) 等安全协议进行传输,确保数据在传输过程中的机密性和完整性。
- 灵活性: rsync 提供了大量的选项,允许用户精确控制同步过程,例如:
- 排除特定文件或目录: 可以通过指定模式来排除不需要同步的文件或目录。
- 保留文件属性: 可以保留文件权限、所有者、时间戳等属性。
- 删除目标文件: 可以删除目标目录中源目录中不存在的文件。
- 模拟运行: 可以进行模拟运行,查看同步过程,而不实际修改文件。
- 支持多种传输协议: rsync 可以使用 rsh、ssh 或直接 TCP 连接进行传输。
- 镜像网站: rsync 非常适合镜像网站,因为它能够快速有效地同步网站内容。
- 备份: rsync 经常被用于创建备份,因为它只传输更改的部分,从而节省时间和存储空间。
- 免费开源: rsync 是一个免费且开源的工具,可以自由使用和修改。
使用
基本用法:
rsync 命令的基本语法如下:
rsync [OPTIONS] SOURCE DESTINATION
- OPTIONS: 各种选项,用于控制 rsync 的行为。
- SOURCE: 源文件或目录。
- DESTINATION: 目标文件或目录。
一些常见的 rsync 选项:
-v
: verbose,显示详细的同步过程。-a
: archive,归档模式,保留文件属性(权限、所有者、时间戳等),并递归复制目录。 这是最常用的选项,通常用于备份和同步。-z
: compress,压缩数据以减少传输量。-r
: recursive,递归复制目录。-u
: update,只更新目标文件中比源文件旧的文件。-n
: dry-run,模拟运行,不实际修改文件。--delete
: 删除目标目录中源目录中不存在的文件。--exclude=PATTERN
: 排除匹配 PATTERN 的文件或目录。--include=PATTERN
: 包含匹配 PATTERN 的文件或目录,即使它被其他排除规则排除。-e
: 指定使用的远程 shell,例如-e ssh
使用 SSH 进行传输。
示例:
-
将本地目录
source_dir
同步到远程服务器user@remote_host:/path/to/destination_dir
,使用 SSH 进行传输,并保留文件属性:rsync -avz -e ssh source_dir user@remote_host:/path/to/destination_dir
-
将远程服务器
user@remote_host:/path/to/source_dir
同步到本地目录destination_dir
,使用 SSH 进行传输,并删除目标目录中源目录中不存在的文件:rsync -avz -e ssh --delete user@remote_host:/path/to/source_dir destination_dir
-
将本地目录
source_dir
同步到本地目录destination_dir
,排除所有.log
文件:rsync -avz --exclude='*.log' source_dir destination_dir
工作原理:
rsync 的增量传输算法的核心是 差分算法 (delta transfer algorithm)。 它大致的工作流程如下:
- 计算校验和: rsync 首先计算源文件和目标文件的校验和 (checksum)。
- 比较校验和: 它比较源文件和目标文件的校验和,以确定哪些部分相同,哪些部分不同。
- 传输差异: 对于不同的部分,rsync 只传输差异的数据块,而不是整个文件。
- 重建文件: 目标端接收到差异的数据块后,根据已有的目标文件和接收到的差异数据块,重建完整的目标文件。
总结:
rsync 是一个强大而灵活的文件同步工具,适用于各种场景,包括备份、镜像、数据迁移和文件共享。 它的增量传输特性使其在处理大型文件和通过慢速网络连接传输数据时非常高效。 掌握 rsync 的基本用法和常用选项,可以极大地提高您的工作效率。