Rsync是一个非常有用的工具,它允许Linux系统管理员在本地或与远程文件系统同步数据。使用rsync比简单地复制数据更方便,因为它能够主动发现和同步源和目标之间的差异。该程序具有:保留标准和扩展文件系统权限、在传输过程中压缩数据等选项。我们将在本指南中看到最常用的一些功能。
在本教程中,您将学习到:
如何使用rsync同步数据
如何通过ssh在远程文件系统上使用rsync
如何通过rsync守护进程将rsync与远程文件系统一起使用
如何从同步中排除文件
Rsync-用法介绍
让我们从rsync基本用法开始。假设我们在本地文件系统上有一个目录,并且我们想将其内容与另一个目录(可能在外部USB设备上)进行同步,以便创建文件的备份。在示例中,源目录为/mnt/data/source,目的地将挂载在/run/media/egdoc/destination。源包含两个文件:file1.txt和file2.txt,而目的地目录为空。第一次运行rsync时所有数据被复制。如果现在列出目标目录内容,则可以看到它现在包含源文件:
$ ls /run/media/egdoc/destination/ -l
total 0
-rw-r--r--. 1 egdoc egdoc 0 Oct 6 19:42 file1.txt
-rw-r--r--. 1 egdoc egdoc 0 Oct 6 19:42 file2.txt
随后,我们运行rsync来同步两个目录,仅复制新文件和修改过的文件:这将节省大量时间和资源。让我们验证一下:首先,我们在源目录中修改file1.txt的内容:
$ echo linuxconfig > /mnt/data/source/file1.txt
然后,我们再次运行rsync,观察输出:
$ rsync -av /mnt/data/source/
/run/media/egdoc/destination
sending incremental file list
file1.txt
sent 159 bytes received 35 bytes 388.00 bytes/sec
total size is 12 speedup is 0.06
唯一复制的文件是我们修改的文件file1.txt。
创建源到目标的镜像副本
默认rsync只需确保将源目录中的所有文件(指定为例外的文件除外)都复制到了目的地:它不会使两个目录保持相同,也不会删除文件;因此,如果我们要创建源到目标的镜像副本,则必须使用--delete选项,这将删除仅在目标内部存在的文件。
假设我们创建一个名为file3.txt在目标目录中:
$ touch /run/media/egdoc/destination/file3.txt
该文件在源目录中不存在,因此如果我们运行rsync--delete选项,将其删除:
$ rsync -av --delete /mnt/data/source/ /run/media/egdoc/destination
sending incremental file list
deleting file3.txt
./
sent 95 bytes received 28 bytes 246.00 bytes/sec
total size is 0 speedup is 0.00
由于这种同步可能会造成破坏,因此您可能需要先使用--dry-run选项,以便使程序显示将要执行的操作,而无需实际修改文件系统。
远程同步文件
到目前为止,我们已经了解了如何使用rsync同步两个本地文件系统。该程序还可以通过远程 shell (例如,rsh或者ssh)或者rsync守护程序远程同步文件。我们将探讨这两种方法。
通过SSH运行rsync
对于我们的示例,我们仍将使用与先前示例相同的源目录,但作为目标,我们将使用具有IP(192.168.122.32)的远程计算机上的目录。之前,我在计算机上设置了具有基于密钥登录名的openssh服务器,因此无需提供密码即可访问它。
我们如何通过ssh运行rsync?首先,要使远程同步生效,必须在源计算机和远程计算机上都安装rsync。在现代版本的rsync中默认情况下使用ssh;要使用另一个远程 shell 程序,或显式声明该 shell 程序,我们可以使用-e选项并以它作为参数。假设我们在远程机器上的目标目录是/home/egdoc/destination,我们可以运行:
$ rsync -av -e ssh /mnt/data/source/ egdoc@192.168.122.32:/home/egdoc/destination
请注意,我们指定了目的地@:/path/to/directory。
通过rsync守护程序联系远程计算机
与远程计算机同步文件的另一种方法是使用rsync daemon(守护进程)。显然,这需要在目标计算机上安装并运行该守护程序。
假设rsync守护程序正在侦听端口873(默认),在远程计算机上,我们可以通过运行以下命令与它联系:
$ rsync -av /mnt/data/source/ 192.168.122.32:/home/egdoc/destination
另外,我们可以使用rsync URL:
$ rsync -av /mnt/data/source/ rsync://192.168.122.32/home/destination
在两个示例中,home(在命令中突出显示),不代表远程计算机上的目录名称,而是资源的名称(在rsync术语中称为module),由管理员配置,并可以通过rsync守护程序进行访问。该module可以指向文件系统上的任何路径。
从同步中排除文件
有时我们想从同步中排除一些文件或目录。基本上有两种方法可以完成此任务:通过直接指定排除模式--exclude(可以通过重复该选项来指定多个模式),也可以将所有模式写入文件(每行一个)。使用后一种方法时,我们必须将文件路径作为参数传递给--exclude-from选项。
与该模式匹配的所有文件和目录都将从同步中排除。例如,要排除所有扩展名为".txt"的文件,我们将运行:
$ rsync -av /mnt/data/source/ /run/media/egdoc/destination --exclude=*.txt
结论
在本文中,我们介绍了rsync,这是一个非常有用的工具,可用于同步本地和远程文件系统上的文件和目录。我们学习了该程序最常用的选项,它能让我们完成了什么任务,如何指定源目录和目标目录,以及用来联系远程文件系统的方法。最后,我们了解了如何从同步中排除文件,如何直接或在文件中指定排除模式。