简介
Rsync,即 remote sync 的缩写,是一个文件传输和同步工具,可以在两个目录之间安全地复制和同步文件。其中一个必须是源目录,另一个是目标目录,目标目录也可以是远程的。它使用一种增量传输算法,只发送源文件和目标文件或文件夹之间的差异。因此,它是一个带宽效率高的工具,也是增量数据传输的理想选择。
Rsync 是现在由于安全漏洞问题而被弃用的 scp 命令的完美替代品。Rsync 广泛用于异地备份和镜像。
默认情况下,rsync 预装在现代 Linux 发行版中,因此不需要安装。在本文中,我们将探讨如何使用 rsync 工具传输文件并同步本地和远程目录。本教程将手把手教你如何在 Linux 服务器上部署 Rsync。
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
- 点击 云产品 → 云服务器 → 立即购买。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用
PowerShell
进行SSH
远程连接到服务器,Win+R
打开运行窗口,输入powershell
后点击确定。
- 到此为止,我们的云服务器就远程连接上了。
安装和配置步骤
第一步:检查 Rsync 是否安装
如前所述,rsync 通常预装在大多数现代 Linux 发行版中,因此无需安装。但为了确保,你可以运行以下命令来确认 rsync 是否已安装:
rsync --version
如果 rsync 已安装,你将会看到 rsync 的版本信息。
第二步:使用 Rsync 在本地同步文件
rsync 的语法与其他工具(如 scp 和 cp)非常相似。
为了演示,我们将创建两个目录:mydir1
作为源目录,mydir2
作为目标目录。
mkdir mydir1mkdir mydir2
接下来,我们将导航到 mydir1
中,并创建 10 个空的文本文件,稍后我们将把它们复制并同步到作为目标文件夹的 mydir2
中。
cd mydir1touch file{1..10}.txt
要确认文件的存在,请运行以下 ls 命令:
ls -l
要将文件从 mydir1
复制到 mydir2
,请运行以下 rsync 命令:
rsync -vr mydir1/ mydir2
v
或-verbose
选项会在终端上打印详细输出,详细说明文件传输过程。显示的信息包括正在复制的文件以及总文件大小和使用的带宽的摘要。r
或-recursive
选项会递归复制目录中的所有文件和子目录。
如果指定的目标文件夹不存在,则会自动创建一个,rsync 会将所有数据复制到其中。
注意:
请注意源文件末尾的斜杠 ( /
)。这表示只会复制目录的内容。如果没有末尾的斜杠,rsync 命令会复制整个 mydir1
目录,而不是其内容。
下面是一个代码片段,显示了省略末尾斜杠时会发生什么。整个目录及其内容会被复制到里面。
r
的一个完美替代方案是a
(-archive
)标志。该选项递归地同步文件,并保留文件属性,如文件权限、组和用户所有权、修改时间、符号链接等。它是最推荐使用的选项。
可以使用 -a
选项而不是 -r
标志。
$ rsync -av mydir1/ mydir2
第三步:排除特定文件不被复制
要排除特定文件不被传输,请传递 --exclude
选项,如下所示:
rsync -av --exclude=file source-directory/ destination-directory
例如,要排除 file1.txt
不被复制到目标目录,我们将运行以下命令:
rsync -av --exclude=file1.txt mydir1/ mydir2
要排除多个文件,请将它们用大括号括起来,并用逗号分隔,中间不留空格。在下面的示例中,文件 file1.txt
和 file2.txt
已从文件传输操作中排除。
rsync -av --exclude={file1.txt,file2.txt} mydir1/ mydir2
第四步:排除特定目录不被复制
排除特定目录与排除文件类似。只需传递 --exclude
选项,如下所示:
rsync -av --exclude=dir source-directory/ destination-directory
假设我们在源目录中有一个名为 data
的目录。要排除它不被复制,我们将运行以下命令:
rsync -av --exclude=data mydir1/ mydir2
要排除多个目录,请在花括号内指定它们,并用逗号分隔,中间不留空格。在下面的示例中,目录 data
和 data2
已从传输操作中排除。
rsync -av --exclude={data,data2} mydir1/ mydir2
第五步:使用 Rsync 执行干运行
在执行 rsync 命令之前,你可以传递 -n
或 --dry-run
选项来检查命令的运行方式。这只是执行文件传输的模拟,不执行任何操作。为了充分利用这一点,你可以在一个命令中组合 a
、n
和 v
标志,如下所示。
$ rsync -avn mydir1/ mydir2
在底部,你会找到 DRY RUN 标签,表明命令执行只是文件传输过程的模拟。
第六步:使用 Rsync 远程同步文件
rsync 工具还可以将文件和目录传输到远程系统,反之亦然。要使此功能正常工作,必须满足一些条件。
首先,rsync 实用程序需要存在于两个系统(本地和远程)上。此外,由于 rsync 使用 SSH 连接到远程主机,你需要在两个系统之间配置无密码 SSH 登录。
第七步:将文件推送到远程位置
如前所述,rsync 可以将文件从本地系统传输到远程系统,反之亦然。
将文件从本地系统复制到远程系统称为推送操作,因为你实际上是将文件“推送”或同步到远程系统。它采用以下语法:
rsync [options] source [user@host-ip]:dest-on-remote-machine
与此相反的是拉取操作,因为你是从远程系统检索或“拉取”文件到本地系统。其语法如下:
rsync [options] [user@host-ip]:source dest-on-local-machine
例如,要将名为 sample.txt
的文件从本地计算机复制或同步到位于远程系统上的名为 bob 的用户的主目录,请运行如下所示的命令。
rsync -av sample.txt bob@173.82.232.55:/home/bob
文件传输完成后,使用以下命令确认文件的存在。
ssh bob@173.82.232.55 ls -l /home/bob
注意:
如果远程系统上存在该文件,它将被覆盖。要使用不同的名称保存该文件,请指定新名称,如下所示。
rsync -av sample.txt bob@173.82.232.55:/home/bob/sample2.txt
第八步:从远程位置拉取文件
要将名为 remote-file.txt
的文件从 SS 远程系统复制到本地系统上名为 data
的目录,请运行以下命令:
rsync -av bob@173.82.232.55:remote-file.txt /home/cherry/data
第九步:远程文件复制语法
通过 SSH 使用 rsync 传输目录的语法相同。
回想一下,rsync 会以不同的方式处理带有末尾斜杠的源目录。如果带有末尾斜杠,rsync 只会将源目录的内容复制到目标目录。如果省略末尾的斜杠,则会将整个源目录复制到目标目录中。因此,如果你想复制整个源目录,可以考虑省略末尾的斜杠。
例如,要将 mydir1
从本地计算机复制到远程计算机,你可以运行以下命令:
rsync -av mydir1 bob@173.82.232.55:/home/bob/
从输出中,你可以看到整个目录已复制到远程系统。
第十步:同步本地和远程目录
要同步本地和远程目录,请使用 --delete
选项。为了演示这一点,我们将在 mydir1
文件夹中创建一个名为 cherry.txt
的新文件。
touch mydir/cherry.txt
接下来,我们将同步 mydir1
文件夹中所做的更改,使其与远程计算机上的更改保持一致,如下所示。
rsync -av --delete mydir1 bob@173.82.232.55:/home/bob/
在同步期间,只有新文件会添加到远程文件夹中,其他所有内容保持不变。
警告:
使用 --delete
选项时要格外小心,因为它会删除目标目录中在源目录中不存在的文件。
为了演示这一点,我们将删除源文件夹中的一些文件。
rm mydir1/file{6..10}.txt
当目录同步时,刚刚在源目录中删除的缺失文件也会在目标文件夹中删除,以恢复奇偶校验。
rsync -av --delete mydir1 bob@173.82.232.55:/home/bob/
你可以通过列出远程目录中的文件来确认这一点,如下所示。
ssh bob@173.82.232.55 ls -l /home/bob/mydir1
第十一步:压缩文件并查看传输进度
你可以与 rsync 一起使用的其他有用选项是 -z
和 -P
。
z
选项会在文件传输期间压缩文件数据,从而优化带宽使用率,而P
选项会显示进度条。这两个选项可以组合使用,如下所示。
rsync -azP mydir1 bob@173.82.232.55:/home/bob/data
结尾
Rsync 是一种多功能且安全的工具,可以简化 TCP/IP 网络上的文件传输和同步。它可以在本地复制,也可以通过远程 shell 复制到另一个主机/从另一个主机复制。它提供了许多选项,可以控制其使用的各个方面。
有关 rsync 工具的更多信息,请查看在线手册页。或者,你可以从命令行访问手册页,如下所示。
man rsync
此外,你可以通过查看 rsync 帮助页面来探索更多命令行选项,如下所示。
rsync --help
以上就是全部内容。在本文中,我们讨论了 rsync 工具,并通过示例演示了如何在本地以及两个 Linux 系统之间传输和同步文件。
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site