Linux 中 rsync 命令的实际例子

Rsync(远程同步)是一个同步工具,用于在系统内或系统之间复制文件和目录。 rsync 的最大优点是它只复制更改过的文件,从而减少了 CPU 消耗并节省了复制文件时的带宽和时间。

rsync 相对于 scp 的优势

我已经向您展示了一些 scp 命令的实际示例。 scp 是安全复制的缩写,也用于通过 ssh 在两个远程系统之间复制文件。

但是 rsync 比 scp 具有某些优势,使其成为更好的选择。

  • rsync 仅复制更改的文件,而 scp 复制每个文件并在需要时覆盖它们。 所以在 rsync 中保证了更好的速度。
  • rsync 也可以在没有加密的情况下工作。 这可以减少开销。 但是在没有加密传输没有安全风险的情况下应该考虑这一点。
  • 可以在 rsync 中恢复不完整的传输,而 scp 不允​​许。

如果你没有 同步 安装,你可以使用你的包管理器安装它。

在 Ubuntu 和 Debian 中,您可以使用以下命令安装 rsync。

sudo apt install rsync

Linux中rsync命令的实际例子

同步 命令具有以下结构

rsync [OPTIONS] Source Destination

在哪里 来源 目的地 格式可以是本地路径或远程路径 [email protected]:路径/到/文件

让我们通过一些有用的例子来看看怎样使用 rsync 命令。

请注意,如果您有一个目录 A,请使用“A”来提及它而不是“A/”。 使用 A/ 将引用目录 A 中的所有文件,而不是目录 A 本身。 所以复制 A 将在目标中创建一个新目录,然后复制 A 中的文件。但复制 A/ 只会将 A 中的文件复制到目标中。

1. 同步本地文件 [One-way Sync]

从目录复制本地文件 一种 进入 备份目录,

rsync A/ Backup-A-dir/

此命令将目录 A 的文件(如果发现更改)复制到 Backup-A-dir。 这不会将 Backup-A-dir 中的任何额外文件复制到最初不在 A 中的 A 中。 这就是为什么它被称为单向同步。

2. 同步远程文件 [One-way Sync]

要在远程系统和本地系统之间同步文件,命令类似。 请注意,源位置和目标位置可以是本地文件系统路径或远程系统 (ssh) 路径。

rsync dev/build [email protected]:~/Backup

3. 双向同步

上述命令将文件从源复制到目标。 但是如果系统有一些不在源上的额外文件,单向同步将不会删除这些文件。 如果需要,则必须使用双向同步。

要使用相同的文件将两个端点(目录或文件)保持在相同的状态,并且两边都没有额外的东西,只需附加 -删除 原始命令的选项。

rsync A/ Backup-A-dir/ --delete

4. 复制后删除源文件

如果传输完成后需要删除源中的文件, – 删除源文件 选项应该派上用场。

rsync A/ Backup-A-dir/ --remove-source-files

你应该小心上面的命令。 只有在制作了足够多的副本并且源中不再需要数据时,才应删除源。

5. 包含和排除文件

如果您需要(或不需要)传输名称与模式匹配的文件,
-包括-排除 可以使用选项。 每个选项都应在“=”符号后指定一个模式。

rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py

上面的命令复制所有带有扩展名的文件 .py 除了那些有扩展名的 .tmp.py。

您可以使用正则表达式作为模式。 了解更多 这里.

提示:如果任一选项的模式列表很大,您可以将其存储在一个文件中,然后将它们的名称传递给 –包括从– 排除 选项。

6. SSH 上的 rsync

如果要通过 SSH 传输文件,则需要使用 ssh 指定 -e 选项。

rsync -e ssh A/ [email protected]:~/Backup-A-dir/

这是将文件传输到远程系统的最佳方式,因为它是加密的。 应该注意的是,由于加密会涉及开销。 因此,它可能需要比正常传输更多的时间。

为了使其工作,您应该启用在服务器端配置的 ssh 登录。 公钥和私钥也必须在各自的路径上。

要了解有关 ssh 及其设置的更多信息,请阅读有关客户端 SSH 配置和服务器端 SSH 配置的这些 LinuxHandBook 文章。

7. 详细模式

Linux 中的大多数命令都有一个详细选项,用于在终端中记录命令的操作。 同步 也不例外。

通过任一 -v 选项或——冗长的 选项来详细说明命令。 它将列出正在执行的操作及其进度。 这在调试时会很有帮助。

rsync A/ Backup-A-dir/ -v -r

输出将类似于下面的

$ rsync A/ Backup-A-dir/ -v -r
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 388 bytes received 168 bytes 1,112.00 bytes/sec
total size is 0 speedup is 0.00

8.试运行——运行但不要复制

如果您想知道将要复制的文件而不实际进行传输,您可以使用 – 试运行( 或者 -n) 选项。

它像往常一样完成所有操作 同步 命令除了复制部分。 它将列出将被复制或删除(如果需要)的文件,然后它会在复制前停止。

rsync -v A/ Backup-A-dir/ --dry-run

这将导致

$ rsync -v A/ Backup-A-dir/ –dry-run
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 172 bytes received 72 bytes 488.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)

请注意,您需要使用 -v 选项以查看上述试运行命令的输出。 否则,将进行试运行,但不会显示结果。

9. 显示转账进度

如果要显示传输进度,请使用 -进步 选项。

rsync A/ Backup-A-dir/ --progress

上面的命令将显示一个类似于下面的进度条:

$ rsync -r A/ Backup-A-dir/ –progress
sending incremental file list
created directory Backup-A-dir
./
file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)
file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7)
file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7)
file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7)
file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7)
file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)

10. 压缩和传输数据

如果你想节省网络带宽和时间,你可以使用压缩要传输的数据 -和 选项。 它将在目的地自动解压。

当要传输的数据量很大时,这个技巧可以节省大量的网络时间和成本。 对于小文件,应该避免使用它,因为开销处理超过了总时间。

rsync -z A/ Backup-A-dir/

请注意,应避免使用 -和 进行本地传输和小文件时的选项。 它会不必要地减慢速度。

11.递归复制文件和目录

上述所有命令仅复制文件,而不复制子目录(每个 Linux 命令的情况相同)。 因此,不会复制这些子目录中的文件。 这可以通过递归复制来消除。

要递归复制文件和目录, -r 可以使用选项。

rsync -r A/ Backup-A-dir/

12. 存档和保存元数据

如果您想保留文件的符号链接、时间戳、文件权限、用户和组所有权, -一种 可以使用选项。

rsync -a A/ Backup-A-dir/

此选项还包括以下功能 -r 选项。 因此它递归地复制文件并保留复制文件的元数据。

13.设置文件大小限制

为避免传输大文件,您可以借助 –最大尺寸 选项。 这有助于您检查将要复制的文件大小。

rsync --max-size="100K" A/ Backup-A-dir/ 

14.设置带宽限制

如果您对网络速度有任何限制,可以借助 – 锂 选项。 锂盐 应表示为 kbps.

rsync --bwlimit=100 A/ Backup-A-dir/

15. 使用 rsync 恢复下载

如果下载/传输不完整,您可以使用 rsync 命令保留未完成的下载,以便下次发出相同命令时可以继续传输。

要恢复传输, -附加 可以使用选项。

rsync --append A /Backup-A-dir/

这个 StackExchange 线程 是了解有关此主题的更多信息的非常好的资源。

以上所有命令都是基本命令,可以在单个流或进程中复制文件。 如果有 5 TB 数据,1 TB 传输需要 2 小时,则整个传输将持续 10 小时。 但是还有另一种方法可以加快传输速度

额外提示:加速 Rsync/并行传输

平行线 是用于并行执行作业的 GNU 实用程序。 Rsync 可以很容易地与 同步.

在 Ubuntu/Debian 系统中安装 GNU parallel 使用

sudo apt install parallel

在我们进一步讨论之前,让我们了解并行的工作原理。 让我们考虑一个类比。

假设有 1000 个鸡蛋和 100 个装有无人机的篮子。 任务是将其交付给客户。 经理为每个篮子分配 10 个鸡蛋并命令无人机交付。 每个无人机都执行一个操作(在我们的例子中 rsync 处理 10 个文件)。 经理监督所有的无人机。 请注意,无人机永远不会知道还有其他工作并行。 只有经理可以。

同样,rsync 像无人机一样执行文件传输。 并行充当经理。

平行线 拆分要发送的文件并产生指定数量的 rsync 进程,每个进程都有不同的文件列表。 parallel 只是管理所有过程。 rsync 不知道其他并行进程,也没有并行传输的功能。 Parallel 通过捆绑任务提供并行传输。

所以并行命令由两部分组成,它们是通过管道传输的。 一个是参数(鸡蛋/文件),另一个是并行命令(管理器)。

ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/

在上面的命令中,输出中的每个文件/目录作为’|’之前的第一个命令的结果符号充当参数。 {} 表示并行命令中从左侧开始的参数。

-jn – 用于设置 n 个作业或工人。 在我们的例子中,n 是 20。
下一部分是每个参数的常用 rsync 命令。
命令生成后,会被打包成20个进程并行执行。

请注意,您可以向上述 rsync 命令添加任何选项,就像没有并行时一样。 只需在上述命令中的 rsync 后添加 rsync 选项(如 -z、-a、-e ssh)。

如果您想了解有关并行的更多信息,请参阅 这一页.

rsync 的常见错误

使用 rsync 时可能会遇到错误。 以下是一些常见的问题及其故障排除技巧。

1. rsync 权限被拒绝

这是当您使用没有适当权限的路径时可能发生的错误。 例如:

rsync B/ /home/

上面的命令会导致权限被拒绝错误,如果你没有写权限 /家/(普通用户通常不会这样做)

2. rsync 无法在 上设置时间

当文件系统无法处理文件和目录的修改时间时,就会发生这种情况。 您可以在 这一页。

我希望你在本文中学到了一些同步命令的好例子。 如果您有任何建议或意见,请随时在下面提出。

相关阅读:

Posted in: LinuxTags: ,