Linux中rsync命令示例

时间:2020-03-05 15:31:12  来源:igfitidea点击:

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

rsync在scp上的优势

SCP为安全副本,也用于复制两个远程系统之间的文件。

但rsync与scp具有一定的优势,使其成为更好的选择。

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

如果未安装rsync,则可以使用包管理器安装它。

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

sudo apt install rsync

Linux中rsync命令的实际示例

rsync命令具有以下结构

rsync [OPTIONS] Source Destination

源和目的地可以是Mation Hyman @ OniTor中的本地路径或者远程路径:路径/到/文件

让我们看看如何使用一些有用的示例使用rsync命令。

Note that if you have a directory A, use “A” to mention it not “A/”. Using A/will refer to all the files in directory A and not directory A itself. So copying A will create a new directory in the destination and then copies the files in A. But copying A/will copy only the files in A into the destination.

1.同步本地文件[单向同步]

要将本地文件从目录a复制到备份-a-dir中,

rsync A/Backup-A-dir/

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

2.同步远程文件[单向同步]

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

rsync dev/build Hyman@theitroad:~/Backup

3.双向同步

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

要在具有相同文件的同一状态下维护两个端点(目录或者文件),并且在任何一侧都没有添加,只需将-delete选项添加到原始命令。

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

4.复制后删除源文件

如果我们需要在传输完成后删除源中的文件,则会派遣源头源文件选项。

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

你应该小心上面的命令。
只有在进行足够的副本并在源中不需要数据时,才能删除源。

5.包含和排除文件

如果我们需要(或者不需要)传输名称匹配的文件,可以使用-Include和-Exclude选项。
在'='符号之后,应给出每个选项。

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

上面的命令将具有扩展名为的所有文件复制。
除了具有扩展名.tmp.py的文件外。

我们可以使用正则表达式作为模式。
点击此处了解详情。

Tip: If the list of patterns for either of the options is huge, you can store it in a file and you can pass their names to the –include-from and –exclude-from option.

6. rsync over ssh

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

rsync -e ssh A/Hyman@theitroad:~/Backup-A-dir/

这是自加密以来将文件传输到远程系统的最优选方式。
人们应该注意,由于加密,将有一个开销。
所以可能需要更多的时间而不是正常转移。

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

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选项来查看DATD RUN命令的上述输出。
如果没有,则会发生干运行,但它不会显示结果。

9.显示转移进度

如果要显示传输的进度,请使用-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/
Note that one should avoid using -z option while doing local transfers and small files. It will slow things down unnecessarily.

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

并行拆分要发送的文件,并将指定数量的rsync进程一起发出,每个文件都包含不同的文件列表。
并行只是管理所有的过程。
rsync对并行的其他进程没有了解,也没有并行传输的功能。
并行提供通过捆绑任务并行传输。

因此,Parallel命令包括两种管道。
一个是参数(鸡蛋/文件),另一个是并行命令(Manager)。

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/

上面的命令将导致权限拒绝错误,如果我们没有写入权限/(普通用户通常不做)

2. rsync无法在<path>上设置时间

当文件系统无法处理文件和目录的修改时间时,会发生这种情况。