scp命令

scp命令功能就是,他能把自己当前主机的文件,通过远程给备份到另一台主机,从而实现远程备份这样一个基本的功能。

格式

我们来看一下这个scp命令的基本格式

scp [options] SRC... DEST/

用法

在看他的两种用法

scp [options] [user@]host:/sourcefile /destpath

scp [options] /sourcefile [user@]host:/destpath

常用选项

-C 压缩数据流
-r 递归复制  #拷贝文件夹必须要加 -r

-p 保持原文件的属性信息 #果你不保留属性,有可能权限就变了啊

-q 静默模式 #呢是静默,静默就是拷贝的时候有些信息就不显示了啊,把它隐藏起来,

-P PORT 指明remote host的监听的端口 #么P呢是表示端口。

     #如果目标服务器的端口不是标准的22端口,你需要加上-P,进行指定

案例演示

SCP,进行拷贝的时候他有一些特点啊,我们来进行用案例来演示,看看这个scp命令的特点。

我们在我们源主机上也就是在Cents8上生成三个 100M大小的文件

scp命令和rsync命令详解_rsync命令


生成之后我们来查看,这都是100M的文件,三个

scp命令和rsync命令详解_Linux工具_02


   现在我去拷贝data下的。这些文件因为考的是文件夹,所以-r。然后考到目标主机的比方说10.0.0.7 上去。

   这个意思就是说,我自己的主机是Cenntos8,我把自己主机的/data/目录,给拷贝到了10.0.0.7 这个主机的/data/目录下了

scp命令和rsync命令详解_Linux工具_03

    如果你考的是这样做,你会发现他确实一个一个在拷贝,我把这个文件夹拷到下,但是问题是。

    它拷贝的是这个data下的。内容呢?还是考文件夹本身呢?那我们来确认一下。

我们来切换到Centos7的主机上来,来看一下

scp命令和rsync命令详解_数据备份工具_04

我们来看他拷贝的是整个文件夹,也就是说把这个文件夹拷贝到的里面,成为他的子目录了。啊,是这种形式。

  这个意思就是把自己Centos8主机下的这个data目录,复制给了 Centos7这个主机

我们在看一下目录结构

scp命令和rsync命令详解_rsync命令_05


   那如果你只是想考里面的文件,不想考里面的文件夹,那你就可以写星这样的话呢,我们就考的是文件,

下图这样的写法是,把文件里的内容给到10.0.0.7这个文件中 ,不加-r

scp命令和rsync命令详解_数据备份工具_06

     那现在问题来了,我们现在在Centos8的上面,这个文件有的发生变化,比方说我们这儿。对f2这个文件发生了变化。

注意,只是对f2文件多加了一个换行符。

scp命令和rsync命令详解_数据备份工具_07


  f1和f3没有变化。但是当我们进行复制的时候。我这儿写*。是否他还会重复的把没有改过的f1和f3重新复制呢?

scp命令和rsync命令详解_数据备份工具_08


那我们发现他发送的时候发送了所有的。f1,f2,f3,不论有没有变化,全都给你进行了复制,那这个地方呢?我们可以看到他的。数据报文增长了很多。原来是45万,现在变成了67万

scp命令和rsync命令详解_Linux工具_09


scp的问题

     那所以我们现在发现这个文件,只是改了一个文件,他也把所有文件全考了一遍,所以这个就感觉效率偏低。尤其将来我们公司里面用户呢,可能会开发一些新的软件版本出来。比方说有一个项目啊,电商项目,电商项目呢,它里面有涉及到很多相关的文件,比方说有很多的图片儿文件呀,

    网页儿文件呀,这种文件特别多。当然,还有用户开发的程序,比方说还有什么JAVA包之类的jar包啊,或者war包之类的有很多。那么,作为一个网站来讲,它里面文件很多类型,但是软件网站改版了,比方说网站呢,更新了,换了个新版本。那软件版本更新了,但是并不意味着所有的文件都变了,

   只是其中的一部分文件发生了变化啊,比方说公司里面的。有些程序发生变化,但是好多文件比方说一些图片啊,或者一些什么这个这个。网页文件呀,他并没有变化,那没有变化的话呢,如果你用SCP去实现网站的。内容的更新的话,那自然带来的缺点就是有没有变的,他就全给你考一遍,这样的话呢,效率太低。所以我们马上想到一个问题,

   能不能实现一个所谓的基于增量性的更新呢?换句话说,就是只复制那些。发生变化的文件,如果没有变化的文件,我不想去更新它,我没有必要去更新它。那么,要想实现这功能, 我们可以采用另外一个工具,叫什么呢?

rsync它不管你的。他可以实现基于增量性的更新。

rsync命令

rsync工具可以基于ssh和rsync协议实现高效率的远程系统之间复制文件,使用安全的shell连接做为传输方式,比scp更快,基于增量数据同步,即只复制两方不同的文件,此工具来自于rsync包。

注意:通信两端主机都需要安装 rsync软件

用法

#下面两个命令只有斜线的区别不一样

rsync -av /etc server1:/tmp #复制目录和目录下文件

rsync -av /etc/ server1:/tmp #只复制目录下文件

常用选项

-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留修改时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-u 如果接收者的文件比发送者的文件较新,将忽略同步
-z 压缩,节约网络带宽
-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
--delete 源数据删除,目标数据也自动同步删除


案例演示

    我准备一个新文件夹。然后我把这些文件。移动到这个文件夹里去。好,现在文件夹是这样的一个状态啊

scp命令和rsync命令详解_rsync命令_10

注意:通信两端主机都需要安装 rsync软件

scp命令和rsync命令详解_rsync命令_11


有无斜线的区别

-a :表示保留他的属性 -v是查看过程

     这个就是把Centos8主机的 /data/test/ 备份到 10.0.0.7 这个主机的/data 目录下

    注意这个地方。这个文件夹里面包含了三个文件,然后我们目标写上10.0.0.7。

scp命令和rsync命令详解_rsync命令_12


   那也就是我们利用ssh的协议,把我当前主机上的test这个目录。拷贝到目标的/data下,

   拷贝过去以后呢?现在我们就有一个问疑问,那么它考的时候他是把里面的文件拷过去了,还是把这个文件夹拷过去了呢?当然,文件夹拷过去,自然文件也拷过去了,对吧?那他拷的是文件还是拷的是文件夹呢?

   我们来10.0.0.7的主机上看了一下,发现是文件,test文件夹本身没有拷贝过去

scp命令和rsync命令详解_Linux工具_13


我们在换一种写法,就比刚才少了一个斜线

scp命令和rsync命令详解_Linux工具_14


少了这个斜线,就能把整个test文件夹拷贝进去了

scp命令和rsync命令详解_Linux工具_15

   希望大家记住这个小细节。不加斜线,它考的是文件夹,本身加斜线,它只考里面的文件,而不考文件夹本身。

更新文件后拷贝

我们来继续试一下,文件更新之后,在进行rsync命令会怎么拷贝

我们在Centos8中更新f2文件

scp命令和rsync命令详解_Linux工具_16

f1和f3没有发生变化

我们在使用rsync命令进行复制,看看能不能做到增量更新

我们先在Centos7上看网卡的传输,没复制前传输量是 1131882

scp命令和rsync命令详解_Linux工具_17

我们来执行rsync 实现增量复制

根据下图,我们知道只有 f2文件发生了变化

scp命令和rsync命令详解_数据备份工具_18

我们在看网卡发送的包,只发送了100多个包

scp命令和rsync命令详解_rsync命令_19

那么,没有变化的文件,他是不会复制的,所以这样的话呢,利用rsync是不是无形中效率就提高了?

节约了网络带宽。速度上也提高了,他只复制那些发生变化的文件。


当然,如果有一个问题,,就是我Centos7主机备份过去的文件发生了变化,我们对Centos7中的f3文件,做变化

注意我修改的是目标主机的文件

scp命令和rsync命令详解_Linux工具_20

现在问题是我在Centos8上执行rsync命令的时候,会把Cetnos7上的 f3进行覆盖吗?

我们来执行一下

scp命令和rsync命令详解_rsync命令_21


执行完我们来看Centos7上的f3的大小,与之前的f3大小进行对比,发现覆盖了这个f3文件

scp命令和rsync命令详解_数据备份工具_22

他这种比较呢?就是我不管你目标主机的文件是不是更新了,反正你和我源主机不一样了,我就把你覆盖了。


-u选项的理解

当然要想实现,刚才说我们就是只复制那些我变化的,但是呢,如果你比我新,我就不覆盖你了。唉,那这时候呢,也有方法,就是加上一个刚才说的u选项

我们来用案例演示

我在Centos8主机进行更新f1文件

scp命令和rsync命令详解_数据备份工具_23

对于f2和f3这两个文件来讲,我们在Centos8没有更新其中f3文件呢,跟目标服务器来比呢,f3。更旧一些

      f3文件在Centos7上要更新一些,因为我被我更新过了,那这时候我再进行复制的时候,我们不仅希望。进行复制更新,

     但是如果目标已经比我新了,我希望不要复制,不要把人家新的覆盖掉。那么这时候加个u就可以了。

我们看下图

我们加 -u 进行增量备份的时候,f3没有进行备份,只把f1进行备份了

scp命令和rsync命令详解_Linux工具_24


-u

就是比较谁新谁旧,如果目标比我新,我就不覆盖对方了。

我们来验证刚才的结论,我们看Centos8主机文件的f3大小

scp命令和rsync命令详解_Linux工具_25

f3的时间是 11:08

我们来看Centos7主机这个f3文件,它是没有被覆盖的

scp命令和rsync命令详解_数据备份工具_26

     当然这里面还有一个问题,就如果目标主机也是就Centos7这里还有一些多余的数据呢?比方说有个f4文件。

    就是在备份主机这里有一个f4文件,也就是这个Centos7主机上,它是目标主机,他比Centos8主机下的/data目录中多了一个f4文件

scp命令和rsync命令详解_rsync命令_27


现在问题是,我在Centos8主机下执行rsync命令,会把Centos7主机里面的f4文件删除吗?

scp命令和rsync命令详解_rsync命令_28

我们来看Centos7 ,发现没有删除

scp命令和rsync命令详解_数据备份工具_29


两台主机完全同步

    所以换句话说,如果目标那边比我的文件要多,我是不会删他的。但是要想删也行,两边完全同步加什么?那我们来看加上。好加delete,

scp命令和rsync命令详解_数据备份工具_30

    你看这是不是写了把f4给干掉了?为什么?你和我不一样。你比我多了,不行,我要把你删了,保证我们两边我有的你得有,

scp命令和rsync命令详解_rsync命令_31

也就是保证,我们两台主机必须同步


总结

   那这就是一个的一个小工具唉,大家想过没有用这个命令能做的什么事啊?这个事我们可以做什么事啊,将来我们能拿这个能干什么活啊?是不是将来我们生产中可以用它来实现备份呢?

    比方说有一个服务器,上面有重要的数据。那这个数据呢?我们希望定期备份。那定期备份这个文件夹里的数据,我都想定期备份到一个远程服务器上去,我是不是就可以用这种方式了?我可以定一个计划任务,比方说每半天的时间或者每一天的时间,我都把他的数据利用这种方式给他复制到我的主机上去。复制到我的主机。来用这种方式来进行备份的功能,当然这个你需要配合计划任务啊,比方说你可以把这个命令写到一个。

    计划任务里面。或者你把这个命令写在一个脚本里面,把这个脚本通过计划任务调用,每隔一段时间让它自动执行,这样的话呢,就可以实现。数据的自动备份明白了吧?而且呢,他备份的时候能确保两边始终保持一致。一致啊,当然你这跨网络通讯,如果觉得比较消耗资源的话,你可以加个z的话呢,他可以压缩。压缩的话,

-z的话可以压缩备份。可以节约带宽