如何使用Rsync进行本地和远程数据传输和同步

Rsync是一种快速且通用的命令行实用程序,可通过远程Shell或从远程Rsync守护程序来回同步两个位置之间的文件和文件夹

5 min read
By myfreax
如何使用Rsync进行本地和远程数据传输和同步

Rsync是一种快速同步的命令,用于在两个远程计算机之间同步文件和文件夹。它仅通过传输源和目标之间的差异来提供快速的增量文件传输。

Rsync可用于镜像数据,增量备份,在系统之间复制文件,可替代scpsftpcp日常等使用的命令。

rsync命令已预安装在大多数Linux发行版和macOS中。您可以通过命令rsync --version来检查它是否已安装在系统上。

如果你系统已经安装rsync将会看到输出rsync  version 3.1.2  protocol version 31。如果您的系统上未安装rsync,则可以使用发行版的软件包管理器轻松安装。

如果你使用的Linux发行版是Ubuntu,Linux mint,或者是基于Debian的发行版。你可以通过命令sudo apt install rsync安装Rsync。

如果你的Linux发行版是在CentOS和Fedora或者是基于红帽的Linux发行版。则可通过命令sudo yum install rsync安装Rsync。

Rsync命令语法

在讨论如何使用rsync之前,让我们先回顾一下基本语法。

Local to Local:  rsync [OPTION]... [SRC]... DEST
Local to Remote: rsync [OPTION]... [SRC]... [[email protected]]HOST:DEST
Remote to Local: rsync [OPTION]... [[email protected]]HOST:SRC... [DEST]

rsync 表达式语法有三种,分别是本地到本地形式Local to Local,本地到远程Local to Remote,远程到本地Remote to Local。

其中OPTIONrsync选项SRC是源目录。DEST是目标目录。USER是远程用户名。HOST是远程主机名或IP地址。

rsync提供了许多控制其行为各个方面的选项。最广泛使用的选项是:

-a/--archive存档模式,等效于-rlptgoD。此选项告诉rsync递归同步目录,传输特殊设备和块设备,保留符号链接,修改时间,组,所有权和权限。

-z/--compress,此选项将强制rsync在数据发送到目标计算机时对其进行压缩。仅当与远程计算机的连接速度较慢时才使用此选项。

-P等效于--partial --progress。使用此选项时,rsync将在传输过程中显示进度条并保留部分传输的文件。在慢速或不稳定的网络连接传输大文件时很有用。

--delete使用此选项时,rsync将从目标位置删除关的文件。对于镜像很有用。

-q/--quiet。如果要禁止显示非错误消息,请使用此选项。

-e此选项使您可以选择其他远程shell程序。默认情况下,rsync配置为使用ssh。

Rsync基础

rysnc最简单的用法就是在本地的目录之间复制文件,例如命令rsync -a /opt/filename.zip /tmp/将会复制myfreax.zip/tmp目录下。

运行rysnc的用户必须对目标位置具有读取权限,并且对目标具有写入权限。

从目标参数省略文件名会保留当前文件名称。如果要使用其他名称保存文件,请在目标的参数指定文件名。

例如命令rsync -a /opt/filename.zip /tmp/newfilename.zip将会复制文件/opt/filename.zip /tmp/newfilename.zip文件。

在这个示例命令rsync -a /var/www/domain.com/public_html/ /var/www/domain.com/public_html_backup/中,我们将创建网站文件的本地备份。

如果目标目录不存在,将会自动创建。值得一提的是rsync会根据源目录是否使用斜杠/,而又不同的处理方式。

如果在源目录上添加斜杠,它将仅将目录的内容复制到目标目录。如果省略了斜杠rsync则会将源目录复制到目标目录中。

Rsync远程同步数据

当使用rsync进行远程传输时,必须将其安装在源计算机和目标计算机上。新版本的rsync被配置为使用SSH作为默认的远程shell。

如果您尚未为远程计算机设置无密码的SSH登录,则会要求您输入用户密码。如果远程主机上的SSH服务监听的端口不是默认端口22,则可以使用-e选项指定端口。

当传输大量数据或者大文件时,建议在screennohuptmux中运行rsync命令或使用-P选项。如果要将数据从远程传输到本地计算机,则需要使用远程位置作为源。

以下是一些示例在本地于复制计算机之间复制文件的方式。

复制本地目录到远程计算机

rsync -a /opt/media/ [email protected]_host_or_ip:/opt/media/ 

复制远程计算机目录到本地目录

rsync -a [email protected]_host_or_ip:/opt/media/ /opt/media/

Rsync指定不同SSH端口

rsync -a -e "ssh -p 2322" /opt/media/ [email protected]_host_or_ip:/opt/media/

Rsync后台同步数据

rsync -a -P [email protected]_host_or_ip:/opt/media/ /opt/media/

排除文件和目录

当你要排除文件或目录时,您需要使用它们到源位置的相对路径。有两个选项可以排除文件和目录。

第一种选择是使用--exclude并在命令行上指定要排除的文件和目录。第二种是选择是使用--exclude-from并指定一个文件,该文件包含要排除的目录于文件的路径。

在以下示例中,我们排除了src_directory内部的node_modulestmp目录:

rsync -a --exclude=node_modules --exclude=tmp /src_directory/ /dst_directory/
rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/
node_modules
tmp
/exclude-file.txt

结论

在本教程中,您学习了如何使用Rsync复制和同步文件和目录。在 Rsync用户手册页上,还有很多关于Rsync的知识。如有任何疑问,请随时发表评论。