如何使用 Rsync 同步本地和远程目录

介绍

Rsync 是一个远程和本地文件同步工具,它使用算法来最大限度地减少被复制的数据量,只移动已更改的文件部分。

在本教程中,我们将定义Rsync,审查使用rsync时的语法,解释如何使用Rsync与远程系统同步,以及您可用的其他选项。

前提条件

为了练习使用rsync在本地和远程系统之间同步文件,您将需要两个机器作为本地计算机和远程计算机,分别。

如果您打算使用服务器遵循此指南,则建议与管理用户一起设置服务器,并在每个服务器上配置防火墙。

无论您使用哪种类型的机器来遵循本教程,您都需要在两者上创建SSH密钥,然后将每个服务器的公共密钥复制到另一个服务器的autorized_keys文件中,如该指南的第2步所述(https://andsky.com/tech/tutorials/how-to-set-up-ssh-keys-on-ubuntu-20-04#step-2-%E2%80%94-copying-the-public-key-to-your-ubuntu-server)。

本指南已在运行Ubuntu 20.04的机器上进行验证,尽管它通常应该与安装rsync的基于Linux的操作系统的任何计算机一起工作。

Rsync 的定义

Rsync是一个非常灵活的网络同步工具,由于它在Linux和Unix类型的系统上普遍存在,并且作为系统脚本工具的普及,它默认情况下包含在大多数Linux发行版中。

了解 Rsync 语法

rsync的语法与其他工具类似,例如ssh,scpcp

首先,通过运行以下命令更改您的家庭目录:

1cd ~

然后创建一个测试目录:

1mkdir dir1

创建另一个测试目录:

1mkdir dir2

现在添加一些测试文件:

1touch dir1/file{1..100}

现在有一个名为dir1的目录,里面有100个空的文件。

1ls dir1
 1[secondary_label Output]
 2file1 file18 file27 file36 file45 file54 file63 file72 file81 file90
 3file10 file19 file28 file37 file46 file55 file64 file73 file82 file91
 4file100 file2 file29 file38 file47 file56 file65 file74 file83 file92
 5file11 file20 file3 file39 file48 file57 file66 file75 file84 file93
 6file12 file21 file30 file4 file49 file58 file67 file76 file85 file94
 7file13 file22 file31 file40 file5 file59 file68 file77 file86 file95
 8file14 file23 file32 file41 file50 file6 file69 file78 file87 file96
 9file15 file24 file33 file42 file51 file60 file7 file79 file88 file97
10file16 file25 file34 file43 file52 file61 file70 file8 file89 file98
11file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

要在同一系统上同步dir1dir2的内容,您将运行rsync并使用-r旗帜,该旗帜代表重复性,并且是对目录同步所必需的:

1rsync -r dir1/ dir2

另一种选项是使用a旗,这是一种组合旗,代表档案。这个旗反复同步并保留象征链接,特殊和设备文件,修改时间,组,所有者和权限。 它比r更常用,是推荐使用的旗帜。 运行与上一个示例相同的命令,这次使用a旗:

1rsync -a dir1/ dir2

请注意,在前两个命令的语法中第一个参数的末尾有追溯缩略(/),并在此突出:

1rsync -a dir1/ dir2

此追溯缩略表示dir1的内容.如果没有追溯缩略,包括目录在内的dir1将被放置在dir2中。

1~/dir2/dir1/[files]

另一个提示是,在执行一个rsync命令之前,双重检查你的参数。Rsync提供了通过通过-n--dry-run选项来执行此操作的方法。-v旗帜,意思是verbose,也是必要的,以获得适当的输出。

1rsync -anv dir1/ dir2
 1[secondary_label Output]
 2sending incremental file list
 3./
 4file1
 5file10
 6file100
 7file11
 8file12
 9file13
10file14
11file15
12file16
13file17
14file18
15. . .

现在,将该输出与您在删除后续切割时获得的输出进行比较,如下所示:

1rsync -anv dir1 dir2
 1[secondary_label Output]
 2sending incremental file list
 3dir1/
 4dir1/file1
 5dir1/file10
 6dir1/file100
 7dir1/file11
 8dir1/file12
 9dir1/file13
10dir1/file14
11dir1/file15
12dir1/file16
13dir1/file17
14dir1/file18
15. . .

此输出现在证明了目录本身已被转移,而不仅仅是目录中的文件。

使用Rsync与远程系统同步

要使用rsync与远程系统同步,您只需要在本地和远程机器之间配置的SSH访问,以及在两个系统上安装的rsync。一旦您在两个机器之间验证了SSH访问,您可以使用以下语法将前一部分的dir1文件夹同步到远程机器。

1rsync -a ~/dir1 username@remote_host:destination_directory

这个过程被称为 push 操作,因为它将目录从本地系统到远程系统. 相反的操作是 pull,并用于同步远程目录到本地系统。

1rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

像「cp」和類似的工具一樣,來源總是第一個論點,目的地總是第二個論點。

使用其他 Rsync 选项

Rsync 提供了许多选项来改变实用程序的默认行为,例如您在上一节中了解的旗帜选项。

如果您正在传输尚未被压缩的文件,例如文本文件,您可以通过使用 -z 选项添加压缩来减少网络传输:

1rsync -az source destination

P旗帜也是有用的,它结合了--进展--部分的旗帜,第一个旗帜为转会提供了进展栏,第二个旗帜允许您恢复中断的转会:

1rsync -azP source destination
 1[secondary_label Output]
 2sending incremental file list
 3created directory destination
 4source/
 5source/file1
 6              0 100%    0.00kB/s 0:00:00 (xfr#1, to-chk=99/101)
 7sourcefile10
 8              0 100%    0.00kB/s 0:00:00 (xfr#2, to-chk=98/101)
 9source/file100
10              0 100%    0.00kB/s 0:00:00 (xfr#3, to-chk=97/101)
11source/file11
12              0 100%    0.00kB/s 0:00:00 (xfr#4, to-chk=96/101)
13source/file12
14              0 100%    0.00kB/s 0:00:00 (xfr#5, to-chk=95/101)
15. . .

如果您再次运行该命令,您将收到缩短的输出,因为没有进行任何更改,这说明Rsync可以使用更改时间来确定是否进行了更改:

1rsync -azP source destination
1[secondary_label Output]
2sending incremental file list
3sent 818 bytes received 12 bytes 1660.00 bytes/sec
4total size is 0 speedup is 0.00

假设您要用以下命令更新某些文件的更改时间:

1touch dir1/file{1..10}

然后,如果您再次运行rsync-azP,您将在输出中注意到Rsync如何智能地复制只有更改的文件:

1rsync -azP source destination
 1[secondary_label Output]
 2sending incremental file list
 3file1
 4            0 100%    0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
 5file10
 6            0 100%    0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
 7file2
 8            0 100%    0.00kB/s 0:00:00 (xfer#3, to-check=87/101)
 9file3
10            0 100%    0.00kB/s 0:00:00 (xfer#4, to-check=76/101)
11. . .

为了保持两个目录真正同步,如果它们从源中删除,则需要从目标目录中删除文件,默认情况下,rsync不会从目标目录中删除任何文件。

在使用此选项之前,您可以使用 -n,即 --dry-run 选项,进行测试以防止不必要的数据丢失:

1rsync -an --delete source destination

如果您更喜欢将某些文件或目录排除在您正在同步的目录中,则可以通过在--exclude=选项下单独列出这些文件或目录:

1rsync -a --exclude=pattern_to_exclude source destination

如果您有要排除的指定模式,则可以使用 --include= 选项对匹配不同模式的文件进行排除:

1rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

最后,Rsync的--backup选项可用于存储重要文件的备份,它与--backup-dir选项一起使用,该选项指定了备份文件应该存储的目录:

1rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

结论

Rsync 可以简化网络连接中的文件传输,并为本地目录同步增加可靠性. Rsync 的灵活性使其成为许多不同的文件级别操作的良好选择。

Rsync的掌握使您能够设计复杂的备份操作,并获得如何和传输的细微控制。

Published At
Categories with 技术
comments powered by Disqus