Linux 中的远程文件同步
在本文中,我们将了解 Linux 中处理远程文件同步的 **rsync** 命令。本文将提供有关如何使用 rsync 及其最常用选项的实用示例。
**远程同步** 或 **rsync** 是一种功能强大的命令行实用程序工具,负责在两台机器之间远程和本地同步文件和目录。在同步文件时,一台机器将充当主机,另一台充当目标。
Linux 系统管理员最常使用此命令。您可以使用 rsync 命令来复制和同步本地和远程的文件和目录,维护备份和镜像数据。
Rsync 命令的功能
在复制、同步和备份数据方面,rsync 是最常用的命令。使用它,我们可以根据文件大小更改和上次修改时间更快地找到文件。它为此使用了快速检查算法。
使用 rsync 进行文件传输据说是更快的,因为它使用了增量传输算法。在这种算法中,它负责比较主机和目标文件,并且只发送发现的差异。第一次将传输整个文件,而后续传输只发送差异,这使得文件传输更轻量级且更快。
Rsync 通过压缩文件并将其传输来节省您的带宽。
语法
以下是 rsync 命令的语法
Rsync - 本地到本地
rsync [OPTION]... SRC [SRC]... DEST
Rsync - 本地到远程
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
Rsync - 远程到本地
rsync [OPTION]... [USER@]HOST:SRC [DEST]
正如我们所讨论的,rsync 命令可用于将文件/目录从一台机器复制到另一台机器。因此,文件传输可以在本地机器之间、本地到远程机器以及从远程到本地机器之间进行。
当涉及远程机器时,rsync 命令会有所不同,让我们检查所有三种情况下的语法。
参数
以下是此命令的参数 -
**选项** - 您可以使用许多选项与 rsync 命令一起使用。让我们在下面的部分中详细讨论这些选项。
**源** - 源文件或目录
**目标** - 目标文件或目录。
**用户** - 远程机器用户名。
**主机** - 远程机器主机名或 IP 地址。
Rsync 命令中的选项
以下是 rsync 命令最基本的一些选项列表。
**-a** - 此选项负责递归复制文件,并确保维护文件权限(用户、所有者、其他用户)、符号链接权限。
**-r** - 此选项也递归复制文件,但不维护文件权限和符号链接权限。
**-z** - 用于在传输过程中压缩数据。
**-p** - 这有助于保留文件权限。
**-q** - 这负责保留组权限。
**-t** - 这确保维护修改文件时间。
**-P** - 有助于查看正在传输的文件的进度。
**-v** - 也将显示进度,但会显示每个文件的更多详细信息。
示例
将文件从一个文件夹传输到我的本地机器上的另一个文件夹。在下面的示例中,我的当前文件夹中有一个非常大的文件,名为 test_backup.gz。我想将其传输到另一个名为 **test** 的文件夹中。将文件传输到 test/ 文件夹中的命令如下 -
rsync -v test_backup.gz test/
**-v** 或 **-p** 选项将负责向用户显示文件传输进度。相同的 test_backup.gz 文件名将被复制到 test/ 目录中。如果您不想保留正在复制的原始文件名,您也可以指定自己的文件名。
输出
命令的输出如下所示 -
ubuntu@ip-xx-xx-xx-xx:~$ mkdir test ubuntu@ip-xx-xx-xx-xx:~$ rsync -v test_backup.gz test/ sending incremental file list test_backup.gz sent 828,331,571 bytes received 35 bytes 66,266,528.48 bytes/sec total size is 828,129,280 speedup is 1.00 ubuntu@ip-xx-xx-xx-xx:~$ cd test ubuntu@ip-xx-xx-xx-xx:~/test$ ls test_backup.gz ubuntu@ip-xx-xx-xx-xx:~/test$
如果您不想查看 rsync 命令的进度,可以跳过 **-v** 选项。rsync 命令负责创建文件或目录(如果不存在)。
示例
让我们首先查看将目录从一个位置传输到我的机器上的另一个位置的本地命令。
rsync -av test/ demo/
**-a** 选项将递归地从 test/ 文件夹复制所有文件到 demo/ 文件夹。确保您对 test/ 文件夹具有读取权限,并对 demo/ 文件夹具有写入权限。
请注意,rsync 命令负责创建目标目录(如果不存在)。
输出
命令的输出如下所示 -
ubuntu@ip-xx-xx-xx-xx:~$ rsync -av test/ demo/ sending incremental file list ./ abc.xhtml hello.xhtml login.xhtml login-test.xhtml success.xhtml activation.xhtml password.xhtml reset.xhtml return.xhtml setter.xhtml sent 73,972 bytes received 247 bytes 148,438.00 bytes/sec total size is 73,012 speedup is 0.98 ubuntu@ip-xx-xx-xx-xx:~$
示例
在我的机器上,我有一个备份文件,我想将其复制到另一台远程机器上。为此,我们需要远程机器的用户名、主机名或 IP 地址。现在我有了用户名和 IP 地址。让我们尝试将备份文件复制到远程机器。
执行此操作的命令如下
rsync -v my_backupfile.zip [email protected]:/tmp/
我们要发送的文件是 my_backupfile.zip,发送到机器 IP **地址:12.343.11.34**。该机器的用户名是 ubuntu。我们希望将文件 my_backupfile.zip 复制到 tmp/ 文件夹中。如果服务器受密码保护,则在文件传输过程中您需要输入密码。
输出
命令的输出如下所示
ubuntu@ip-xx-xx-xx-xx:~$ rsync -v my_backupfile.zip [email protected]:/tmp/ my_backupfile.zip sent 828,331,547 bytes received 35 bytes 61,357,894.96 bytes/sec total size is 828,129,280 speedup is 1.00 ubuntu@ip-10-97-24-72:~$
现在让我们尝试复制目录并将其复制到 tmp/ 文件夹中。命令是 -
rsync -av pages [email protected]:/tmp/
在上面的命令中,您可以将 pages 目录复制到 tmp/ 文件夹。我们使用了 -a 选项,以便所有子目录也被复制。
ubuntu@ip-xx-xx-xx-xx:~$ rsync -av pages [email protected]:/tmp/ sending incremental file list test/ test/abc/ test/abc/one.xml test/abc/cases/ test/abc/cases/my.properties.xhtml test/abc/incl/ test/abc/incl/tpl/ test/abc/incl/tpl/login.xhtml test/src/ test/src/password.xhtml test/src/otp.xhtml test/src/login.xhtml test/src/reset-password.xhtml sent 99,589 bytes received 371 bytes 199,920.00 bytes/sec total size is 98,078 speedup is 0.98 ubuntu@ip-10-97-24-72:~$
示例
在这种情况下,我们有一些位于远程服务器上的文件要复制到我们的本地机器上。相应的命令是 -
rsync -av [email protected]:test.txt tmp
文件 test.txt 位于远程机器 12.343.11.34 上。我们希望该文件位于我们本地机器上的 tmp 文件夹中。如果服务器受密码保护,则在文件传输过程中您需要输入密码。
输出
命令的输出是
ubuntu@ip-xx-xx-xx-xx:~$ rsync -av [email protected]:test.txt tmp receiving incremental file list test.txt sent 43 bytes received 1,988,966 bytes 1,326,006.00 bytes/sec total size is 1,988,385 speedup is 1.00 ubuntu@ip-xx-xx-xx-xx:~$
远程服务器到我们的本地机器
让我们也尝试将目录从远程服务器同步到我们的本地机器。相应的命令是
示例
rsync -av [email protected]:demo tmp
此处,目录 demo 存在于远程机器 [email protected] 上。我们希望将其复制到我们本地机器上的 tmp 目录中。
输出
命令的输出如下 -
ubuntu@ip-xx-xx-xx-xx:~$ rsync -av [email protected]:demo tmp receiving incremental file list demo/ demo/abc.txt sent 47 bytes received 200 bytes 164.67 bytes/sec total size is 53 speedup is 0.21 ubuntu@ip-xx-xx-xx-xx:~$