rsync(remote sync)是一款开源的文件同步工具,以增量传输为核心优势 —— 仅传输源和目标之间的差异部分,而非完整文件,大幅节省带宽和时间。它支持本地文件同步、远程服务器间同步(通过 SSH 或 rsync 守护进程),广泛用于数据备份、网站部署、服务器镜像等场景。本文将从基础命令到高级用法,全面讲解 rsync 的使用方法。
rsync 通常预安装在 Linux 系统中,若未安装,可通过包管理器安装:
- 增量传输:首次同步完整文件,后续仅传输修改的部分(基于文件大小和修改时间,或校验和);
- 多协议支持:支持本地同步、SSH 远程同步(
user@host:path)、rsync 守护进程(rsync://user@host/path);
- 灵活的文件处理:可保留文件权限、时间戳、符号链接等元数据,支持删除目标端冗余文件;
- 带宽控制:可限制传输速率,避免占用过多网络资源。
rsync 的核心命令格式为:
- 源路径 / 目标路径:可以是本地路径(如
/home/user/file.txt)、远程路径(如 user@192.168.1.100:/data/backup);
- 选项:控制同步行为(如是否递归、是否压缩、是否保留权限等),是 rsync 功能的核心。
rsync 的选项众多,以下是最常用的核心选项(建议结合示例理解):
rsync 最常用的远程同步方式是通过 SSH 协议(默认使用 22 端口),格式为 user@remote_host:remote_path。
若远程服务器 SSH 端口为 2222,需通过 -e 选项指定:
rsync -avzP -e "ssh -p 2222" /home/user/file.txt user@192.168.1.100:/tmp/
对于频繁的跨服务器同步(如集群节点间同步),可配置 rsync 守护进程(daemon),通过 rsync:// 协议访问,无需每次输入 SSH 密码。
注:rsync 守护进程配置较复杂(需修改 /etc/rsyncd.conf),适合专业运维场景,中小规模同步优先用 SSH 协议。
通过 --exclude 排除不需要同步的文件(支持通配符 *、? 等):
使用 -n 选项测试同步命令是否正确,避免意外删除或覆盖文件:
- 原因:默认
-a 选项会保留源文件权限,若目标目录权限不足(如远程服务器的 user 对 /data/backup 无写权限),会导致同步失败。
- 解决:确保目标路径有写入权限,或使用
--chmod 选项强制修改同步后的权限(如 --chmod=ugo=rwX 赋予读写权限)。
- 原因:默认情况下,rsync 会同步符号链接本身(作为链接文件),而非链接指向的实际文件。
- 解决:添加
-L 选项跟随符号链接,同步实际文件:
rsync -avL /home/user/link_file /tmp/target
- 解决:使用
-P 选项(包含 --partial),中断后重新执行相同命令会从断点继续传输:
rsync -avzP large_file.iso user@192.168.1.100:/data/
通过 --bwlimit=RATE 限制传输速率(单位:KB/s):
rsync 是文件同步的高效工具,核心价值在于增量传输和灵活的同步策略。掌握以下关键点即可应对大多数场景:
- 基础命令:
rsync [选项] 源 目标,其中 -a(归档)、-v(详细)、-z(压缩)、-P(进度 + 断点)是最常用组合;
- 本地同步:用于备份到外部硬盘、同一服务器内目录同步;
- 远程同步:通过 SSH 协议(
user@host:path)实现服务器间文件上传 / 下载,适合网站部署、日志收集;
- 高级技巧:
--delete 保持目标与源一致,--exclude 过滤文件,-n 模拟同步防误操作。
无论是个人用户备份数据,还是企业级服务器镜像,rsync 都能以高效、可靠的方式完成文件同步任务,是系统管理员和开发者的必备工具。