rsync
是一个强大的文件同步与传输工具,广泛用于本地或远程服务器之间的高效文件备份、镜像或同步。其核心优势是通过增量传输(仅传输文件差异部分)和压缩减少数据传输量,同时支持保留文件元数据(如权限、时间戳、所有者等)。
一、核心特性
- 增量同步:通过比较源和目标的文件校验和(如MD5),仅传输修改过的部分,大幅提升效率。
- 压缩传输:支持
-z
选项压缩数据,适合网络传输。 - 保留元数据:
-a
(归档模式)可保留权限、时间戳、属主/组等信息(需权限支持)。 - 灵活过滤:支持排除/包含特定文件(
--exclude
/--include
)。 - 远程支持:通过SSH协议与远程服务器同步(
user@host:path
格式)。
二、基础用法
1. 本地文件/目录同步
最常用场景是同步本地文件或目录,基础命令格式:
rsync [选项] 源路径 目标路径
常用选项说明:
-v
:详细模式(Verbose),显示同步过程。-a
:归档模式(Archive),等价于-rlptgoD
(递归、保留符号链接、时间戳、权限、属主/组等),推荐备份时使用。-r
:递归同步子目录(仅对目录有效)。-z
:压缩传输(减少网络传输量,本地同步时可忽略)。-h
:人性化显示(Human-readable),将文件大小转换为KB/MB/GB等。--delete
:删除目标中源不存在的文件(谨慎使用!避免误删)。--dry-run
:模拟执行(预演),不实际同步,用于测试命令是否正确。--exclude=模式
:排除匹配模式的文件/目录(如--exclude="*.log"
排除所有日志文件)。--include=模式
:仅包含匹配模式的文件(需配合--exclude
使用)。-n
:同--dry-run
,模拟执行。
示例1:本地目录同步(保留元数据)
# 将本地 /data/source 同步到 /data/backup(覆盖式同步,保留所有元数据)
rsync -av /data/source/ /data/backup/
注意:源路径末尾的
/
很重要!
- 若
源/
(如/data/source/
):同步目录内的内容到目标(目标目录已存在时)。- 若
源
(如/data/source
):同步整个目录到目标(目标会生成source
子目录)。
示例2:同步时排除特定文件
# 同步 /home/user 到 /backup/user,但排除 .git 目录和 *.tmp 文件
rsync -av --exclude='.git' --exclude='*.tmp' /home/user/ /backup/user/
示例3:同步并删除目标冗余文件
# 假设 /data/backup 已有部分文件,现希望与 /data/source 完全一致(删除目标中多余的文件)
rsync -av --delete /data/source/ /data/backup/
2. 远程服务器同步(通过SSH)
rsync
支持通过SSH协议与远程服务器同步,格式为:
# 从远程服务器同步到本地(拉取)
rsync [选项] 用户@远程主机:远程路径 本地路径# 从本地同步到远程服务器(推送)
rsync [选项] 本地路径 用户@远程主机:远程路径
示例4:从远程服务器拉取文件到本地
# 将远程服务器(192.168.1.100)的 /var/www 拉取到本地的 /backup/www(保留元数据,显示详细过程)
rsync -avz -e ssh root@192.168.1.100:/var/www/ /backup/www/
-e ssh
:显式指定使用SSH协议(默认即SSH,可省略)。
示例5:推送本地文件到远程服务器
# 将本地的 /data/logs 推送到远程服务器(192.168.1.100)的 /backup/logs(压缩传输)
rsync -avzh --delete /data/logs/ root@192.168.1.100:/backup/logs/
示例6:指定SSH非默认端口(如2222)
rsync -avz -e "ssh -p 2222" /local/path user@remotehost:/remote/path
三、高级技巧
1. 同步特殊文件(如符号链接、设备文件)
-a
模式已包含 -D
(等价于 --devices --specials
),可同步设备文件(如 /dev
下的文件)和符号链接(默认保留符号链接本身,而非指向的文件)。
若需同步符号链接指向的实际文件,添加 --copy-links
选项。
2. 限制传输带宽
使用 --bwlimit=速率
限制同步时的带宽(单位:KB/s),避免占用过多网络资源。
示例:限制为1000KB/s(约1MB/s):
rsync -avz --bwlimit=1000 /data/ user@remote:/backup/
3. 分批次同步大文件
对于超大文件,可使用 --partial
选项保留未完成的传输文件(避免中断后重新下载),配合 --progress
查看进度:
rsync -avz --partial --progress bigfile.iso user@remote:/backup/
4. 同步权限与所有者
若需严格同步文件的所有者、属组或权限(如备份系统文件),需以 root
权限运行 rsync
(因普通用户无法修改其他用户的文件属性)。
-a
模式已包含 -p
(保留权限)和 -o/-g
(保留属主/组),通常无需额外设置。
四、注意事项
- **路径末尾的
/
**:源路径末尾的/
决定是同步目录内容还是目录本身(如/src/
同步内容到目标,/src
同步目录到目标)。 - 权限问题:若目标目录无写入权限,需用
sudo
(本地同步)或远程用户有足够权限(远程同步)。 - **
--delete
谨慎使用**:该选项会删除目标中源不存在的文件,可能导致数据丢失,建议先通过--dry-run
测试。 - 网络稳定性:远程同步时若网络中断,
-P
选项(等价于--partial --progress
)可保留中断文件,后续继续同步。
五、总结
rsync
是文件同步的“瑞士军刀”,适用于备份、镜像、迁移等多种场景。核心命令结构清晰,通过组合不同选项可满足复杂需求。熟练掌握 rsync
能显著提升文件管理效率!