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/
在中断后再次执行此命令即可续传。