文件同步神器-rsync命令讲解

发布于:2025-08-03 ⋅ 阅读:(12) ⋅ 点赞:(0)

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(保留属主/组),通常无需额外设置。

四、注意事项

  1. ​**路径末尾的 /**​:源路径末尾的 / 决定是同步目录内容还是目录本身(如 /src/ 同步内容到目标,/src 同步目录到目标)。
  2. 权限问题​:若目标目录无写入权限,需用 sudo(本地同步)或远程用户有足够权限(远程同步)。
  3. ​**--delete 谨慎使用**​:该选项会删除目标中源不存在的文件,可能导致数据丢失,建议先通过 --dry-run 测试。
  4. 网络稳定性​:远程同步时若网络中断,-P 选项(等价于 --partial --progress)可保留中断文件,后续继续同步。

五、总结

rsync 是文件同步的“瑞士军刀”,适用于备份、镜像、迁移等多种场景。核心命令结构清晰,通过组合不同选项可满足复杂需求。熟练掌握 rsync 能显著提升文件管理效率!


网站公告

今日签到

点亮在社区的每一天
去签到