Linux 中 rsync 命令的 15 个实用示例
想知道如何使用 rsync 命令?本文列出了 Linux 中 rsync 命令的一些基本用法。
Rsync(远程同步)是一个用于在系统内或系统之间复制文件和目录的同步工具。 rsync 的最大优点是它仅复制更改的文件,从而减少复制文件时的 CPU 消耗并节省带宽和时间。
rsync 相对于 scp 的优点
我已经向您展示了 scp 命令的一些实际示例。 scp 是安全复制的缩写,也用于通过 ssh 在两个远程系统之间复制文件。
但 rsync 相对于 scp 具有某些优势,使其成为更好的选择。
rsync 仅复制已更改的文件,而 scp 复制每个文件并在需要时覆盖它们。所以rsync中保证了更好的速度。
rsync 也可以在不加密的情况下工作。这可以减少开销。但在不加密传输不存在安全风险的情况下就应该考虑这一点。
人们可以在 rsync 中恢复不完整的传输,而 scp 不允许这样做。
如果您没有安装rsync,您可以使用包管理器安装它。
在 Ubuntu 和 Debian 中,您可以使用以下命令安装 rsync。
sudo apt install rsync
Linux中rsync命令的实用示例
rsync命令具有以下结构
rsync [OPTIONS] Source Destination
其中源和目标可以是本地路径或远程路径,格式为用户名@主机名:路径/到/文件
让我们通过一些有用的示例来了解如何使用 rsync 命令。
1.同步本地文件【单向同步】
要将本地文件从目录 A 复制到 Backup-A-dir,
rsync A/ Backup-A-dir/
此命令将目录 A 的文件(如果发现更改)复制到 Backup-A-dir。这不会将 Backup-A-dir 中最初不在 A 中的任何额外文件复制到 A 中。这就是为什么它被称为单向同步。
2.同步远程文件【单向同步】
要在远程系统和本地系统之间同步文件,命令类似。请注意,源位置和目标位置可以是本地文件系统路径或远程系统 (ssh) 路径。
rsync dev/build [email :~/Backup
3. 双向同步
上述命令将文件从源复制到目标。但是,如果系统有一些不在源上的额外文件,则单向同步不会删除这些文件。如果你想要这样,你就必须使用双向同步。
要使两个端点(目录或文件)保持相同状态,且具有相同的文件且两侧都没有额外内容,只需将 –delete 选项附加到原始命令即可。
rsync A/ Backup-A-dir/ --delete
4、复制后删除源文件
如果您需要在传输完成后删除源中的文件,–remove-source-files 选项应该会派上用场。
rsync A/ Backup-A-dir/ --remove-source-files
您应该小心使用上面的命令。仅当制作了足够的副本并且源中不再需要数据时,才应删除源。
5. 包含和排除文件
如果您需要(或不需要)传输名称与模式匹配的文件,可以使用
-include和-exclude选项。每个选项都应该在“=”符号后给出一个模式。
rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py
上述命令复制扩展名为 .py 的所有文件,扩展名为 .tmp.py 的文件除外。
您可以使用正则表达式作为模式。点击此处了解详情。
提示:如果任一选项的模式列表很大,您可以将其存储在文件中,并且可以将它们的名称传递给 –include-from 和 –exclude-from <选项。
6. 通过 SSH 进行 rsync
如果要通过 SSH 传输文件,则需要使用 -e 选项指定 ssh。
rsync -e ssh A/ seeni@LinuxHandBook:~/Backup-A-dir/
由于文件是加密的,因此这是将文件传输到远程系统的首选方式。应该注意的是,加密会产生一定的开销。因此,这可能比正常传输需要更多时间。
为了使其工作,您应该启用服务器端配置的 ssh 登录。公钥和私钥也必须位于各自的路径中。
要了解有关 ssh 及其设置的更多信息,请阅读这些有关客户端 SSH 配置和服务器端 SSH 配置的 LinuxHandBook 文章。
7. 详细模式
Linux 中的大多数命令都有一个详细选项来在终端中记录命令的操作。 rsync也不例外。
传递 -v 选项或 —verbose 选项来详细说明命令。它将列出正在执行的操作及其进度。这在调试时非常有帮助。
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. 试运行——运行但不复制
如果您想知道要复制的文件而不实际进行传输,您可以使用–dry-run(或-n)选项。
除了复制部分之外,它执行与普通 rsync 命令相同的所有操作。它将列出将要复制或删除的文件(如果需要),然后它将在复制之前停止。
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 显示传输进度,请使用 –progress 选项。
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. 压缩和传输数据
如果您想节省网络带宽和时间,可以使用-z选项压缩要传输的数据。它将在目的地自动解压。
当要传输的数据量很大时,这个技巧可以节省大量的网络时间和成本。对于小文件应该避免使用它,因为处理开销超过了总时间。
rsync -z A/ Backup-A-dir/
请注意,在进行本地传输和小文件时应避免使用 -z 选项。它会不必要地减慢速度。
11.递归复制文件和目录
上述所有命令仅复制文件,而不复制子目录(每个 Linux 命令的情况相同)。因此,不会复制这些子目录中的文件。这可以通过递归复制来消除。
要递归复制文件和目录,可以使用-r选项。
rsync -r A/ Backup-A-dir/
12. 归档和保存元数据
如果要保留文件的符号链接、时间戳、文件权限、用户和组所有权,可以使用-a选项。
rsync -a A/ Backup-A-dir/
此选项还包括 -r 选项的功能。因此它递归地复制文件并保留复制文件的元数据。
13. 设置文件大小限制
为了避免传输大文件,您可以借助–max-size选项设置文件大小限制。这可以帮助您检查要复制的文件大小。
rsync --max-size='100K' A/ Backup-A-dir/
14. 设置带宽限制
如果您对网络速度有任何限制,您可以借助 –bwlimit 选项来指定这些限制。 bwlimit 应以 kbps 表示。
rsync --bwlimit=100 A/ Backup-A-dir/
15.使用rsync恢复下载
如果下载/传输不完整,您可以使用 rsync 命令保留未完成的下载,以便下次发出相同命令时可以恢复传输。
要恢复传输,可以使用–append选项。
rsync --append A /Backup-A-dir/
这个 StackExchange 线程是一个非常好的资源,可以帮助您了解有关此主题的更多信息。
上述所有命令都是基本命令,并在单个流或进程中复制文件。如果有 5 TB 数据,1 TB 传输需要 2 小时,则整个传输将持续 10 小时。但还有另一种方法可以加快传输速度
额外提示:加快 Rsync/并行传输速度
并行是一个 GNU 实用程序,用于并行执行作业。 Rsync 可以轻松地与rsync结合使用。
在 Ubuntu/Debian 系统中安装 GNU 并行使用
sudo apt install parallel
在我们进一步讨论之前,让我们先了解一下并行是如何工作的。让我们考虑一个类比。
假设有 1000 个鸡蛋和 100 个篮子,每个篮子都有一架无人机。任务是将其交付给客户。经理为每个篮子分配 10 个鸡蛋,并命令无人机运送。每架无人机都会执行一次操作(在我们的例子中,rsync 过程包含 10 个文件)。经理负责监督所有无人机。请注意,无人机永远不会知道还有其他并行作业。只有经理才这么做。
类似地,rsync 像无人机一样执行文件传输。并行充当管理器。
并行 拆分要发送的文件并生成指定数量的 rsync 进程,每个进程都有不同的文件列表。并行只是管理所有进程。 rsync 不知道其他并行进程,也不具有并行传输功能。并行通过捆绑任务提供并行传输。
因此并行命令由通过管道传输的两部分组成。一种是参数(鸡蛋/文件),另一种是并行命令(管理器)。
ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/
在上面的命令中,“|”符号之前的第一个命令的输出结果中的每个文件/目录都充当参数。 {} 表示并行命令中从左侧开始的参数。
-j n – 用于设置n个作业或工人。在我们的例子中,n 是 20。
下一部分是每个参数的常用 rsync 命令。
命令生成后,它们将被捆绑到 20 个进程中,并且将并行执行。
请注意,您可以向上述 rsync 命令添加任何选项,就像没有并行一样。只需在上述命令中的 rsync 一词后面添加 rsync 选项(例如 -z、-a、-e ssh)即可。
如果您想了解有关并行的更多信息,请参阅此页面。
rsync 的常见错误
使用 rsync 时可能会遇到错误。以下是一些常见问题及其故障排除技巧。
1. rsync权限被拒绝
当您使用没有适当权限的路径时,可能会发生此错误。例如:
rsync B/ /home/
如果你没有/home/的写权限,上面的命令会导致权限被拒绝的错误(普通用户通常不会这样做)
2. rsync 未能在 上设置时间
当文件系统无法处理文件和目录的修改时间时,就会发生这种情况。您可以在此页面上了解更多相关信息。
我希望您在本文中学到了一些同步命令的好示例。如果您有任何建议或意见,请随时在下面提出。