scp和resync的比较

简介: 平时在多个服务器之间传输文件或者文件夹的时候经常用到scp。当有时候遇到某些场景时scp无法满足我们的需求,这时候就需要使用resync这个命令。

平时在多个服务器之间传输文件或者文件夹的时候经常用到scp。当有时候遇到某些场景时scp无法满足我们的需求,这时候就需要使用resync这个命令。


rsync可以实现scp的远程拷贝(rsync不支持远程到远程的拷贝,但scp支持)、cp的本地拷贝、rm删除和"ls -l"显示文件列表等功能。但需要注意的是,rsync的最终目的或者说其原始目的是实现两端主机的文件同步,因此实现的scp/cp/rm等功能仅仅只是同步的辅助手段,且rsync实现这些功能的方式和这些命令是不一样的。


说了这么多就是说rsync功能更加强大。当了解了rsync的优雅你会觉得scp太暴力。


看几个例子:

一、当copy的文件有链接文件


不管是远程还是本地copy链接文件都不会copy,这时候就需要使用resync

0db24eb439ad4f7eb28b4a83747da977.png

解决:

]$rsync -av /opt/hms4/* 10.50.*.*:/opt/hms4/
root@10.50.*.*'s password:
sending incremental file list
。。。。
hms164-spug.war -> /opt/hms4/hms164-2.0.34.war
。。。

二、如何保证两个文件夹的同步?


文件夹是否同步需要考虑的很多因素,不仅仅是数量上相等,文件的属性太多了, 文件大小、mtime。


rsync 的delete参数提供的思路


使用"--delete"选项后,接收端的rsync会先删除目标目录下已经存在,但源端目录不存在的文件。也就是"多则删之,少则补之"。


例如,先实现一次同步,再向目标目录中拷贝一个新文件,这样目标目录中就比源目录多出一个文件。

两个文件夹的同步


992f6acf7425474995b73b312fb84c08.png

这时候两个目录不同步了,文件5只在目标文件夹有,src没有。


如何让其同步呢?就是完全保证一致呢?至少从文件数量上


--delete这时候就商量登场了。

cee97e34586a46e1ab2ac933509d5874.png

如果SRC的文件内容变化了,rsync还好使吗?


像文件4写入内容,同步一次。

24853baed7cf4d4bab70a8e9272c9af0.png

rsync是简单的覆盖吗?


不是,是真正的增量同步,这时候scp就做不到哦

eca783a6430c46f6b77fff682cced2b9.png

rsync有时候也会覆盖?


场景: 两个SRC 一个DEST这种情况下,如果是同一个文件名的时候后做rsync的覆盖前面的.

SRC到DEST路径问题


]#echo "2021年10月13日15:00:41">> 6
[(TEST AP)root@gptest01 /home/test]#
[(TEST AP)root@gptest01 /home/test]#ls
1  2  3  4  6
[(TEST AP)root@gptest01 /home/test]#rsync -avr /home/test/6 /home/test1
sending incremental file list
6
sent 95 bytes  received 31 bytes  252.00 bytes/sec
total size is 26  speedup is 0.21
[(TEST AP)root@gptest01 /home/test]#ls /home/test1
1  2  3  4  6

默认情况下,是不会在目录路径下创建上层目录的。


如果需要SRC的完整路径使用 -R参数


使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。

f81e0999cbc14b4ebfe03614a42d1ec1.png

如果不想要/home那一层级目录如何处理?也就是我们常说的:长目录进行划分

三、如何实时同步远程文件夹到本地文件夹


此处说的实时同步不是频繁的检查而是一种异步通知机制触发同步

四、rsync 的参数详解


-v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
-P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
-n --dry-run  :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
-a --archive  :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
-r --recursive:递归到目录中去。
-t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新
          :检查出mtime不同从而导致增量传输无效。
-o --owner:保持owner属性(属主)。
-g --group:保持group属性(属组)。
-p --perms:保持perms属性(权限,不包括特殊权限)。
-D        :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。
-l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
-z        :传输时进行压缩提高效率。
-R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。
--size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。
-u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
-d --dirs   :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。
--max-size  :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"--max-size=1.5m")
--min-size  :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
--exclude   :指定排除规则来排除不需要传输的文件。
--delete    :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在
            :exclude/include规则生效之后才执行的。
-b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。
--backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。
-e          :指定所要使用的远程shell程序,默认为ssh。
--port      :连接daemon时使用的端口号,默认为873端口。
--password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。
-W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。
--existing  :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
--ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。
--remove-source-files:要求删除源端已经成功传输的文件。

再看几个例子:

[root@xuexi ~]# rsync /etc/fstab /tmp                # 在本地同步
[root@xuexi ~]# rsync -r /etc 172.16.10.5:/tmp       # 将本地/etc目录拷贝到远程主机的/tmp下,以保证远程/tmp目录和本地/etc保持同步
[root@xuexi ~]# rsync -r 172.16.10.5:/etc /tmp       # 将远程主机的/etc目录拷贝到本地/tmp下,以保证本地/tmp目录和远程/etc保持同步
[root@xuexi ~]# rsync /etc/                          # 列出本地/etc/目录下的文件列表
[root@xuexi ~]# rsync 172.16.10.5:/tmp/              # 列出远程主机上/tmp/目录下的文件列表

注意:


1、源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身


rsync -av /opt/hms4 10.50.*.*:/opt/hms4/


rsync -av /opt/hms4/ 10.50.*.*:/opt/hms4/


第一个命令会在远端/opt/hms4 目录下创建/opt/hms4 目录,而第二个命令不会在/opt/hms4 目录下创建/opt/hms4 目录,源路径/opt/hms4 中的所有文件都直接copy到远端的/opt/hms4 目录下。

c7e880322a9d4450980573a746fa823f.png

参考: 第2章 rsync(一):基本命令和用法 - 骏马金龙 - 博客园

目录
相关文章
|
Linux 网络安全
rsync的用法以及与scp和cp的比较
rsync的用法以及与scp和cp的比较
566 0
|
网络安全 数据安全/隐私保护 网络协议
|
NoSQL Linux 网络安全
|
安全 网络安全 数据安全/隐私保护
|
Linux 网络安全 Windows
|
Linux 数据安全/隐私保护 网络安全

热门文章

最新文章