使用 rsync 复制文件和目录
- 内容
您可以使用 rsync 工具在本地或远程复制文件。rsync 是单向工具,只能在一个方向复制文件。
- 原因
本文概述了 rsync 工具以及使用它进行本地和远程文件复制的基本用法。
- 工作量
了解 rsync 工具的基本用法最多需要 20 分钟。
- 目标
掌握 rsync 的基础概念,以及如何使用它进行文件传输。
- 要求
拥有复制文件所需的源位置和目标位置的访问权限。
1 rsync 概念 #
您可以使用 rsync 工具在本地和远程传输或复制文件。rsync 是单向的。它沿单一方向复制文件,不进行数据同步。rsync 不会传输文件中的所有内容,而是仅移动文件内的更改部分,以此减少复制的数据量。因此,它适用于在慢速网络连接上传输数据。
使用 rsync 复制大型文件时,检测更改需要一定的计算能力。因此,要确保源端和目标端的计算机都有足够的资源,包括 RAM。
当需要定期传输包含少量更改的大量数据时,请使用 rsync。这在处理备份时很有用。rsync 还可用于将存储 Web 服务器完整目录树的临时服务器镜像到 DMZ 中的 Web 服务器。
本文包含展示如何使用 rsync 在本地和远程复制文件的示例。本文档还说明了如何配置和使用 rsync 服务器。
2 rsync 基本用法 #
您可在拥有访问权限和写入权限的任意计算机上使用 rsync。
按下面的示例所示将文件从源位置复制到目标位置:
>rsync [OPTION] SOURCE [SOURCE]... DESTINATION
您可以有多个 SOURCE 条目,SOURCE 和 DESTINATION 占位符可以是路径、URL,或两者皆是。
下面列出了几种文件复制用例:
>rsync -av /directory1/ /destination/在上例中,目录后的尾部斜杠表示该目录的内容,而非目录本身。在此情况下,仅会将
/directory1的内容复制到/destination。>rsync -av /directory1 /destination/在上例中,目录
/directory1会被复制到/destination,最终形成/destination/directory1/。>rsync -av example1.txt example2.txt /destination/directory/上例展示了将
example1.txt和example2.txt文件复制到目标目录的操作。
下面列出常用的 OPTIONS:
-V显示详细的输出文本
-a归档模式;递归复制文件,并保留时间戳、用户/组所有权、文件权限和符号链接
-z压缩传输的数据
-n或--dry-run执行试运行,不实际更改任何内容
-r递归进入目录
--progress传输期间显示进度
-b在数据同步期间创建备份
-h以人类可读的格式显示输出中的数字
-e用于远程传输,指示 rsync 使用 SSH 协议
-q 或 --quiet不显示 rsync 命令及选项的输出
--version列显 rsync 版本号并退出
- 在本地复制文件并压缩数据
>rsync -avz example1.txt example2.txt /destination/-a归档模式-v详细输出-z传输期间压缩数据- 复制目录并压缩数据
>rsync -avz /sourcedirectory/ /destinationdirectory/传输
/sourcedirectory/的内容,同时压缩数据。- 远程传输文件并压缩数据
>rsync -avz example1.txt user@remote_host:/remote/destination/通过 SSH 将
example1.txt传输到远程计算机,同时压缩数据。- 远程传输目录并压缩数据
>rsync -avz /sourcedirectory/ user@remote_host:/remote/destination/通过 SSH 将
/sourcedirectory/传输到远程计算机,同时压缩数据。
3 使用 rsync 在本地复制文件和目录 #
如果您对目标位置具有写入权限,则可以使用 rsync 在同一台计算机内复制文件。
要将文件 backup.tar.xz 复制到位置 /var/backup/,请使用命令 rsync -avz backup.tar.xz /var/backup/。
文件 backup.tar.xz 会复制到 /var/backup/,绝对路径是 /var/backup/backup.tar.xz。
4 使用 rsync 远程复制文件和目录 #
您可以使用 rsync 将文件从一台计算机复制到远程计算机。确保源计算机和目标计算机中都安装了 rsync,并且已通过 SSH 连接到远程计算机。
要将单个文件从您计算机上的一个目录复制到远程计算机上的 /var/backup 目录,请使用以下命令:
>rsync -avz example1.txt user@remote_host:/var/backup/
务必在 /var/backup/ 目录后面加上尾部斜杠。如果不插入斜杠,文件 example1.txt 会复制到 /var/backup(文件)中,而不是 /var/backup/ 目录中。
在绝对路径 /var/backup/example1.txt 中验证复制的文件。
要将目录 source/ 及其内容复制到目录 /var/backup/ 中,请使用以下命令:
>rsync -avz /source/ user@remote_host:/var/backup/
在绝对路径 /var/backup/source/ 中验证复制的目录。
5 配置和使用 rsync 服务器 #
rsync 服务器支持文件同步、自动备份和集中存储。您可以将 rsync 作为在默认端口 873 上侦听传入连接的守护程序 rsyncd 运行。该守护程序可以接收 copying targets。
rsync 守护程序的配置文件分割成一个主文件和用于存放备份目标的特定模块。如此,以后便可更轻松地添加其他目标。可以将全局值存储在 /etc/rsyncd.d/*.inc 文件中,而模块则存放于 /etc/rsyncd.d/*.conf。
下面介绍了如何创建具有备份目标的 rsync 服务器。此目标可用于存储您的备份。要创建 rsync 服务器,请执行以下操作:
在本地计算机上,创建用于存储所有备份文件的目录
/var/backup。>mkdir /var/backup指定所有权:
在此示例中,
users组中的用户tux拥有该目录的所有权:>chown tux.users /var/backup配置
rsyncd守护程序:创建目录
/etc/rsyncd.d/>mkdir /etc/rsyncd.d/创建主配置文件
/etc/rsyncd.conf,并添加以下几行:log file = /var/log/rsync.log1 pid file = /var/lock/rsync.lock2 merge /etc/rsyncd.d3 include /etc/rsyncd.d4
在文件
/etc/rsyncd.d/backup.conf中添加以下几行,创建您的模块或备份目标:backup.conf: backup module [backup] 1 uid = tux 2 gid = users 3 path = /var/backup 4 auth users = tux 5 secrets file = /etc/rsyncd.secrets 6 comment = Our backup target 7
在给定的示例中:
[backup]是备份目标。您可以为备份目标使用任何名称。可以根据备份目标的用途来命名,并在*.conf文件中使用相同名称。uid = tux指定在进行文件传输时所用的用户名或组名。gid = users定义用于存储备份的路径(从步骤 1 中)。path = /var/backup定义用于存储备份的路径(从步骤 1 中)。auth users = tux指定一系列允许的用户(以逗号分隔)。列表以最简单的方式包含允许连接到此模块的用户名。在我们的示例中,只允许用户 tux。secrets file = /etc/rsyncd.secrets指定包含用户名和明文口令行的文件的路径。创建包含以下内容的
/etc/rsyncd.secrets文件,并替换PASSPHRASE:# user:passwd tux:PASSPHRASE
确保只有 root 用户能读取该文件:
chmod 0600 /etc/rsyncd.secrets
通过以下命令启动并启用
rsyncd守护程序:>systemctl enable rsyncd>systemctl start rsyncd在远程计算机上,测试能否访问
rsync服务器:>rsync jupiter::系统会显示类似以下内容的响应:
backup Our backup target
如果没有显示上述响应,请验证您的配置文件、防火墙和网络设置。
上述步骤创建了
rsync服务器,可以使用它来存储备份。下例还创建了一个列出所有连接的日志文件。此文件存储在/var/log/rsyncd.log 中。此文件可用来对传输进行调试。要列出备份目标的内容,请在您的计算机上使用以下命令:
>rsync -avz jupiter::backup此命令会列出服务器上
/var/backup目录中存在的所有文件。此请求也会记录在日志文件/var/log/rsyncd.log中。要将当前目录复制到
rsync备份服务器,请提供源目录。如果源目录是您的当前目录,请使用。>rsync -avz . jupiter::backup默认情况下,
rsync在运行时不会删除文件和目录。要允许其删除内容,必须另外指定选项--delete。要确保不删除任何较新的文件,可改为使用选项--update。必须手动解决所有冲突。
6 使用 rsync 删除和更新文件及目录 #
如果您对目标位置具有写入权限,则可以使用 rsync 在同一台计算机内复制并同步文件。您也可以在复制后删除文件或目录。
要将 example1.txt 和 example2.txt 文件从 /source/directory/ 复制到 /destination/directory/,请使用以下命令:
>rsync -av --update /source/directory/ /destination/directory/
如果 /destination/directory/ 中的 example1.txt 和 example2.txt 文件比源文件旧,该 rsync 命令会更新这些文件。如果目标位置中的文件版本较新,则不会覆盖这些文件。此外,所有其他新文件或目录都会从 /source/directory/ 复制到 /destination/。
要在目标目录中复制现有文件并删除源目录中不存在的文件,请使用以下命令:
>rsync -av --delete /source/directory/ /destination/directory/
在此场景中,源目录和目标目录都包含 example1.txt 和 example2.txt。/destination/directory 另外还包含一个文件,即 example3.txt。
该 rsync 命令会将 /source/directory/ 中的文件 example1.txt 和 example2.txt 复制或更新到 /destination/directory/。该命令还会从 /destination/directory/ 中删除文件 example3.txt,因为 /source/directory/ 中不存在该文件。此外,命令还会清理 /destination/directory/ 中的目录结构以与 /source/directory/ 相符。
7 rsync 查错 #
文件或文件夹复制可能因多种原因失败。请确保您拥有执行文件复制所需的权限和资源。
下面列出了可行的查错方法:
确保您使用的是最新版本的 rsync。如要远程传输文件或目录,请确保源端和目标端计算机上均已安装 rsync。
确保您拥有所需的 rsync 访问权限。
如要远程复制文件,请确保您提供了正确的主机名。
如果您以守护程序模式使用 rsync,请确保 rsync 服务正在运行。
8 法律声明 #
版权所有© 2006–2025 SUSE LLC 和撰稿人。保留所有权利。
根据 GNU 自由文档许可证 (GNU Free Documentation License) 版本 1.2 或(根据您的选择)版本 1.3 中的条款,在此授予您复制、分发和/或修改本文档的权限;本版权声明和许可证附带不可变部分。许可版本 1.2 的副本包含在“GNU Free Documentation License”部分。
有关 SUSE 商标,请参见 https://www.suse.com/company/legal/。所有其他第三方商标分别为相应所有者的财产。商标符号(®、™ 等)代表 SUSE 及其关联公司的商标。星号 (*) 代表第三方商标。
本指南力求涵盖所有细节,但这不能确保本指南准确无误。SUSE LLC 及其关联公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。