• L39.linux命令每日一练 -- 第六章 文件备份与压缩命令 -- scp和rsync


    6.5 scp:远程文件复制

    6.5.1 命令详解

    【命令星级】 ★★★★★

    【功能说明】

    ​ scp命令用于在不同的主机之间复制文件,它采用SSH协议来保证复制的安全性。scp命令每次都是全量完整复制,因此效率不高,适合第一次复制时使用,增量复制建议使用rsync命令替代。

    【语法格式】

    scp [option] [[user@]host1:]file1 [[user@]host2:]file2
    scp [选项] [用户@主机1:文件1] [用户@主机2:文件2]
    
    • 1
    • 2

    ​ **说明:**在scp命令及后面的选项里,每个元素之间都至少要有一个空格。

    【选项说明】

    ​ 表6-5针对该命令的参数选项进行了说明。

    ​ 表6-5 scp命令的参数选项及说明

    在这里插入图片描述

    6.5.2 使用范例

    ​ **范例6-19:**推送(从本地服务器复制到远程服务器)文件或目录。

    [root@centos7 /]# ll -h /etc/services 	#这是将要复制的文件。
    -rw-r--r--. 1 root root 655K Jun  7  2013 /etc/services
    [root@centos7 /]# scp /etc/services 10.0.0.202:/tmp	#scp 传送的文件名 目标主机IP地址:想要传到的目录。
    The authenticity of host '10.0.0.202 (10.0.0.202)' can't be established.
    RSA key fingerprint is SHA256:B0/rcxEB8cPheVkHbtpksluDK/bMZs8+VyQ7huuHkaQ.
    RSA key fingerprint is MD5:8d:ed:58:b4:20:d6:fa:e3:03:69:80:9e:fe:b1:48:bb.
    Are you sure you want to continue connecting (yes/no)? yes	#第一次scp就和SSH第一次登陆一样。
    Warning: Permanently added '10.0.0.202' (RSA) to the list of known hosts.
    root@10.0.0.202's password: 	#此处需要输入远程机器密码。
    services                          100%  655KB  22.1MB/s   00:00 
    [root@centos6 ~]# ll -h /tmp/services 	#这是10.0.0.202的远程主机窗口。
    -rw-r--r-- 1 root root 655K Oct 26 00:50 /tmp/services	#可以看到赋值后的文件实际有变化。
    
    [root@centos7 /]# scp -p /etc/services 10.0.0.202:/tmp	#使用-p选项保持文件属性传输。
    root@10.0.0.202's password: 
    services                          100%  655KB  29.7MB/s   00:00
    [root@centos6 ~]# ll -h /tmp/services	#这是10.0.0.202的远程主机。 
    -rw-r--r-- 1 root root 655K Jun  7  2013 /tmp/services	#加-p,赋值后的文件实际属性保持不变。
    
    [root@centos7 /]# scp -p /tmp 10.0.0.202:/tmp
    root@10.0.0.202's password: 
    /tmp: not a regular file	#不能直接赋值目录。
    [root@centos7 /]# scp -rp /tmp 10.0.0.202:/tmp	#需要使用-r选项复制目录,选项记忆方法:人品rp。
    root@10.0.0.202's password: 
    ks-script-s1kcev                  100%  836   997.4KB/s   00:00    
    services                          100%  655KB  39.5MB/s   00:00    
    services.zip                      100%  133KB  15.1MB/s   00:00    
    ks-script-s1kcev                  100%  836   837.8KB/s   00:00    
    services                          100%  655KB  20.1MB/s   00:00    
    services.zip                      100%  133KB  27.5MB/s   00:00 
    [root@centos6 ~]# tree /tmp/	#在远程主机10.0.0.202下执行tree。
    /tmp/
    |-- services
    `-- tmp
        |-- ks-script-s1kcev
        |-- services
        |-- services.zip
        `-- tmp
            |-- ks-script-s1kcev
            |-- services
            `-- services.zip
    
    2 directories, 7 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    ​ **范例6-20:**从远程服务器将数据复制到本地服务器(拉取)。

    [root@centos7 /tmp]# scp 10.0.0.202:/etc/services .	#与推送的命令顺序对调即可,从10.0.0.202主机上将/etc/services文件下载到当前目录。
    root@10.0.0.202's password: 
    services                          100%  626KB  44.7MB/s   00:00    
    [root@centos7 /tmp]# scp -rp 10.0.0.202:/tmp .	#拉取10.0.0.202主机的tmp目录到当前目录。
    root@10.0.0.202's password: 
    services                          100%  655KB  36.4MB/s   00:00    
    services.zip                      100%  133KB   3.5MB/s   00:00    
    ks-script-s1kcev                  100%  836   439.4KB/s   00:00    
    services                          100%  655KB  32.1MB/s   00:00    
    services.zip                      100%  133KB   9.0MB/s   00:00    
    ks-script-s1kcev                  100%  836   179.4KB/s   00:00    
    services                          100%  655KB  12.0MB/s   00:00   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ​ 从上面的实验中还可以看到,本地服务器本身即使有这些文件,但是还会再消耗带宽来复制文件,因此也证明了scp是全量复制。

    6.6 rsync:文件同步工具

    6.6.1 命令详解

    【命令星级】 ★★★★★

    【功能说明】

    ​ rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据镜像同步备份的优秀工具。rsync适用于Unix/Linux/Windows等多种操作系统平台。

    【语法格式】

    ​ rsync命令有三种常见模式,具体如下:

    1)本地模式:
    	rsync [option] [SRC] [DEST]
    	rsync [选项] [源文件] [目标文件]
    2)通过Shell访问模式:
    拉取(Pull):
    	rsync [option] [USER@]HOST:SRC [DEST]
    	rsync [选项] 用户@主机:源文件 [目标文件]
    推送(Push):
    	rsync [option] [SRC] [USER@]HOST:DEST
    	rsync [选项] [源文件] 用户#主机:目标文件
    3)rsync守护进程模式
    拉取(Pull):
    	rsync [option] [USER@]HOST::SRC [DEST]
    	rsync [选项] 用户@主机::源文件 [目标文件]
    	rsync [option]	rsync://[USER@]HOST[:PORT]/SRC [DEST]
    	rsync [选项] rsync://用户@主机:端口/源文件 [目标文件]
    推送(Push):
    	rsync [option] SRC [USER@]HOST::DEST
    	rsync [选项] [源文件] 用户@主机::目标文件
    	rsync [option] SRC rsync://[USER@]HOST[:PORT]/DEST
    	rsync [选项] [源文件] rsync://用户@主机:端口/目标文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ​ **说明:**在rsync命令及后面的选项里,每个元素之间都至少要有一个空格。

    【选项说明】

    ​ 表6-6针对该命令的参数选项进行了说明。

    ​ 表6-6 rsync命令的参数选项及说明
    在这里插入图片描述

    6.6.2 使用范例

    ​ **范例6-21:**源地址带与不带斜线(/)的区别的例子。

    [root@centos7 ~]# mkdir -p /data1/test{1..2} /data2
    [root@centos7 ~]# rsync -av /data1/ /data2	#如果源目录的末尾有斜线,就会复制目录内的内容,而不是复制目录本身。
    sending incremental file list
    ./
    test1/
    test2/
    
    sent 98 bytes  received 27 bytes  250.00 bytes/sec
    total size is 0  speedup is 0.00
    
    [root@centos7 ~]# rsync -av /data1 /data2	#如果源目录没有斜线,则会复制目录本身及目录下的内容。
    sending incremental file list
    data1/
    data1/test1/
    data1/test2/
    
    sent 108 bytes  received 28 bytes  272.00 bytes/sec
    total size is 0  speedup is 0.00
    [root@centos7 ~]# ls /data2
    data1  test1  test2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    ​ **说明:**目标目录的末尾有没有斜线都不影响最终结果。

    ​ **范例6-22:**本地赋值的例子(类似cp)。

    [root@centos7 ~]# rsync -av /etc/hosts /tmp	#源文件/etc/hosts和目标目录/tmp都在同一台主机之上。
    sending incremental file list
    hosts
    
    sent 257 bytes  received 35 bytes  584.00 bytes/sec
    total size is 166  speedup is 0.57
    [root@centos7 ~]# ll -h /etc/hosts
    -rw-r--r--. 1 root root 166 Oct 24 20:55 /etc/hosts
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ​ **提示:**其比cp好的地方就是可以实现增量复制。

    ​ **范例6-23:**删除文件的特殊例子(–delete)。

    ​ 问题:一个目录下有几十万个文件,用什么方式可以最快删除所有文件?

    ​ 答案如下:

    [root@centos7 ~]# mkdir /null	#创建一个空目录。
    [root@centos7 ~]# rsync -av --delete /null/ /tmp/	#选项--delete使tmp目录内容和孔木兰保持一致,不同的文件及目录将会被删除,即null里有什么内容,tmp里就有什么内容,null里没有的,而tmp里有的就必须要删除,因为null目录为空,因此此命令会删除/tmp目录中所有内容。
    sending incremental file list
    deleting tmp/tmp/tmp/.font-unix/
    deleting tmp/tmp/tmp/.XIM-unix/
    deleting tmp/tmp/tmp/.X11-unix/
    deleting tmp/tmp/tmp/.Test-unix/
    deleting tmp/tmp/tmp/.ICE-unix/
    deleting tmp/tmp/tmp/services.zip
    deleting tmp/tmp/tmp/services
    deleting tmp/tmp/tmp/ks-script-s1kcev
    deleting tmp/tmp/tmp/
    deleting tmp/tmp/.font-unix/
    deleting tmp/tmp/.XIM-unix/
    deleting tmp/tmp/.X11-unix/
    deleting tmp/tmp/.Test-unix/
    deleting tmp/tmp/.ICE-unix/
    deleting tmp/tmp/services.zip
    deleting tmp/tmp/services
    deleting tmp/tmp/ks-script-s1kcev
    deleting tmp/tmp/
    deleting tmp/.font-unix/
    deleting tmp/.XIM-unix/
    deleting tmp/.X11-unix/
    deleting tmp/.Test-unix/
    deleting tmp/.ICE-unix/
    deleting tmp/services.zip
    deleting tmp/services
    deleting tmp/ks-script-s1kcev
    deleting tmp/
    deleting .font-unix/
    deleting .XIM-unix/
    deleting .X11-unix/
    deleting .Test-unix/
    deleting .ICE-unix/
    deleting services.zip
    deleting services
    deleting ks-script-s1kcev
    deleting hosts
    ./
    
    sent 42 bytes  received 736 bytes  1,556.00 bytes/sec
    total size is 0  speedup is 0.00
    [root@centos7 ~]# ls /tmp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    ​ **范例6-24:**拉取推送文件及目录(类似前文的scp命令)。

    [root@centos7 ~]# rsync -av 10.0.0.202:/tmp/ /tmp
    #拉取。
    root@10.0.0.202's password: 	#输入远程主机密码。
    receiving incremental file list
    ./
    services
    .ICE-unix/
    tmp/
    tmp/ks-script-s1kcev
    tmp/services
    tmp/services.zip
    tmp/.ICE-unix/
    tmp/.Test-unix/
    tmp/.X11-unix/
    tmp/.XIM-unix/
    tmp/.font-unix/
    tmp/tmp/
    tmp/tmp/ks-script-s1kcev
    tmp/tmp/services
    tmp/tmp/services.zip
    tmp/tmp/.ICE-unix/
    tmp/tmp/.Test-unix/
    tmp/tmp/.X11-unix/
    tmp/tmp/.XIM-unix/
    tmp/tmp/.font-unix/
    
    sent 199 bytes  received 2,286,120 bytes  653,234.00 bytes/sec
    total size is 2,285,005  speedup is 1.00
    
    [root@centos7 ~]# rsync -av /tmp/ 10.0.0.202:/tmp/ 	#推送。
    root@10.0.0.202's password: 	#输入远程主机密码。
    sending incremental file list
    
    sent 493 bytes  received 76 bytes  227.60 bytes/sec
    total size is 2,285,005  speedup is 4,015.83
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    ​ 与scp命令复制的结果进行对比可以发现,使用rsync复制时,重复执行复制直至目录下文件相同就不再进行复制了。

    ​ **范例6-25:**利用SSH隧道模式(-e)拉取推送文件及目录。

    [root@centos7 ~]# touch /tmp/test.txt	#再创建一个新的测试文件。
    [root@centos7 ~]# rsync -av -e 'ssh -p 22' /tmp 10.0.0.202:/tmp/		#前面的案例使用rsync同步数据都是明文传输的,在要求保障数据安全的场景下,可以使用-e选项借助SSH隧道进行加密传输数据,-p是SSH命令的选项,指定SSH传输的端口号为22,这条命令的结果是将本地/tmp目录下的内容通过SSH加密隧道推送数据到10.0.0.202主机的/tmp目录。同理,执行“rsync -av -e 'ssh -p 22' 10.0.0.202:/tmp/ /tmp”可以从10.0.0.202主机的/tmp目录通过SSH加密隧道将数据拉取到本地/tmp目录下。
    root@10.0.0.202's password: 
    sending incremental file list
    tmp/
    tmp/services
    tmp/test.txt
    tmp/.ICE-unix/
    tmp/tmp/
    tmp/tmp/tmp/
    tmp/tmp/tmp/ks-script-s1kcev
    tmp/tmp/tmp/services
    tmp/tmp/tmp/services.zip
    tmp/tmp/tmp/.ICE-unix/
    tmp/tmp/tmp/.Test-unix/
    tmp/tmp/tmp/.X11-unix/
    tmp/tmp/tmp/.XIM-unix/
    tmp/tmp/tmp/.font-unix/
    
    sent 811,563 bytes  received 5,175 bytes  233,353.71 bytes/sec
    total size is 2,285,005  speedup is 2.80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ​ rsync命令的守护进程模式已经超出了本书的范围,读者可以查阅《跟老男孩学习Linux运维:Web集群实战》一书2017年底即将改版的最新版本。

    6.6.3 经验技巧

    ​ 下面列出rsync命令的经验技巧以供读者参考。

    ​ 1)生产场景常用选项-avz,相当于-vzrtopg(这是网上文档常见的选项),但是此处建议大家使用-avz选项,更简单明了。如果在脚本中使用也可以省略-v选项。

    ​ 2)关于z压缩选项的使用建议,如果为内网环境,且没有其他业务占用带宽,可以不使用z选项。不压缩传输,几乎可以满带宽传输(千M网络),压缩传输则网络发送速度就会骤降,压缩的速率赶不上传输的速度。

    ​ 3)选项n是一个提供安全性的选项,它可以结合-v选项输出模拟的传输过程,如果没有错误,则可以去除n选项真正的传输文件。

  • 相关阅读:
    SAP 物料分类账配置详解Part 1( 基于SAP S/4HANA1909 版本)
    【附源码】计算机毕业设计java原创网络文学管理系统设计与实现
    自学Python系列(四)—— 字典和集合(一)
    Springboot整合Prometheus
    基于django的网络隐私检测系统
    深度学习 --- stanford cs231学习笔记七(训练神经网络之梯度下降优化器)
    服务器带宽跑满是什么原因
    C++opencv 色彩空间转换和保存
    Qt生成PDF报告
    制作rootfs镜像,通过fastboot烧录到x210开发板中验证
  • 原文地址:https://blog.csdn.net/qq_25599925/article/details/125686662