Linux rsync 同步命令是一种高效、灵活的文件同步和备份工具,它通过增量传输算法,仅同步文件中变化的部分,从而大大减少了数据传输量,提高了同步效率,rsync 不仅可以在本地文件系统之间进行同步,还支持通过 SSH、RSH 等远程 shell 协议在本地与远程主机之间,或者两台远程主机之间进行文件同步,广泛应用于数据备份、镜像服务器搭建、文件分发等场景。

rsync 的基本语法结构为 rsync [选项] 源目录 目标目录,其中源目录和目标目录可以是本地路径,也可以是以 user@host:path 格式表示的远程路径,命令的核心在于其丰富的选项组合,这些选项赋予了 rsync 强大的功能。-a 或 --archive 选项是一个归档模式,它会递归地同步目录,并保留文件的时间戳、权限、所有者、组等信息,相当于 -rlptgoD 选项的组合,是最常用的选项之一。-v 或 --verbose 选项用于显示详细的同步过程,让用户清楚地了解哪些文件正在被传输。-z 或 --compress 选项会在传输过程中对文件进行压缩,特别适合在带宽有限的网络环境中使用,可以有效减少传输时间。-h 或 --human-readable 选项则以人类可读的格式(如 KB、MB、GB)显示文件大小,更符合用户的阅读习惯。
在实际使用中,根据不同的同步需求,可以选择不同的选项组合,如果需要删除目标目录中不存在于源目录的文件,可以使用 --delete 选项,这在确保目标目录与源目录完全一致时非常有用,但需谨慎使用,因为删除操作不可逆。--exclude 选项允许指定一个模式,用于排除不需要同步的文件或目录,--exclude "*.tmp" 可以排除所有以 .tmp 结尾的文件。--progress 选项可以在传输过程中显示每个文件的传输进度百分比,方便监控大文件同步情况。-P 选项是 --partial 和 --progress 的组合,它不仅显示传输进度,还会支持断点续传,当传输中断后再次执行命令时,可以从上次中断的地方继续传输,而不是重新开始整个文件。
rsync 的同步方向由源目录和目标目录的相对位置决定,当源目录是本地路径,目标目录也是本地路径时,实现的是本地到本地的文件同步。rsync -av /home/user/docs/ /backup/docs/ 会将 /home/user/docs/ 目录下的所有文件同步到 /backup/docs/ 目录,并保留原有的属性,当源目录是本地路径,目标目录是远程路径时,实现的是本地到远程的文件同步,rsync 会通过 SSH 连接远程主机,rsync -avz -e ssh /local/path/ user@remotehost:/remote/path/,-e ssh 指定了使用 SSH 作为远程 shell 协议,确保数据传输的安全性,反之,当源目录是远程路径,目标目录是本地路径时,则实现的是远程到本地的文件同步,rsync -avz user@remotehost:/remote/path/ /local/path/,这种双向同步的能力使得 rsync 在数据备份和恢复场景中非常灵活。
为了更清晰地展示 rsync 常用选项及其功能,以下表格列出了一些核心选项:

| 选项 | 全称 | 功能描述 |
|---|---|---|
| -a | –archive | 归档模式,递归同步并保留权限、时间戳等属性 |
| -v | –verbose | 显示详细同步过程 |
| -z | –compress | 传输时压缩文件,减少网络带宽占用 |
| -h | –human-readable | 以人类可读格式显示文件大小 |
| –delete | –delete | 删除目标目录中不存在于源目录的文件 |
| –exclude | –exclude=PATTERN | 排除匹配模式的文件或目录 |
| –progress | –progress | 显示每个文件的传输进度 |
| -P | -P | 相当于 –partial –progress,支持断点续传 |
| -r | –recursive | 递归同步子目录 |
| -l | –links | 保留符号链接 |
| -p | –perms | 保留文件权限 |
| -t | –times | 保留文件时间戳 |
| -g | –group | 保留文件所属组 |
| -o | –owner | 保留文件所有者(需要root权限) |
rsync 的强大之处还在于其可以通过配置文件(如 /etc/rsyncd.conf)以守护进程(daemon)模式运行,rsync 监听在特定端口(默认为873),客户端可以通过 rsync:// 协议连接,无需远程 shell 的支持,适合在局域网内搭建高速文件同步服务,守护进程模式可以通过 --daemon 选项启动,并可以设置认证模块、访问控制、传输限速等高级功能,提供了比远程 shell 模式更灵活的管理能力。
在使用 rsync 时,需要注意一些细节,源目录路径末尾是否带有斜杠 会导致不同的同步结果,如果源目录路径以 例如 rsync -av /source/ /dest/,则只会将 /source 目录下的内容同步到 /dest 目录中;如果源目录路径不带 ,rsync -av /source /dest/,则会将 /source 目录本身(包括目录名)同步到 /dest 目录下,即 /dest/source,这个区别在实际操作中非常重要,尤其是在使用 --delete 选项时,错误的路径可能导致目标目录被意外清空。
为了提高安全性,特别是在通过公网进行远程同步时,建议始终使用 SSH 协议(即 -e ssh)对数据进行加密传输,避免敏感信息泄露,可以通过 SSH 的密钥认证机制实现免密登录,进一步简化同步操作,例如在脚本中自动执行 rsync 同步任务时,无需手动输入密码。
相关问答FAQs:

问题:rsync 同步时如何排除特定文件或目录?
解答:可以使用--exclude选项来排除特定文件或目录,要排除所有.log文件,可以使用rsync -av --exclude "*.log" /source/ /dest/;要排除某个特定目录(如temp),可以使用rsync -av --exclude "temp" /source/ /dest/,如果需要排除多个文件或目录,可以多次使用--exclude选项,或者使用--exclude-from选项指定一个包含排除模式的文件。问题:rsync 同步过程中如何中断传输,以及如何实现断点续传?
解答:在 rsync 传输过程中,可以直接按下Ctrl+C组合键来中断传输,rsync 默认会保留已传输的部分文件(如果传输未完成),要实现断点续传,可以在执行 rsync 命令时加上-P选项(相当于--partial --progress),该选项会保留部分传输的文件,并在下次执行相同命令时自动从断点处继续传输,而无需重新开始整个文件。rsync -avP /large/file.zip user@remote:/path/to/在中断后再次执行此命令即可续传。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/409753.html<
