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]

​ **说明:**在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.
[email protected]'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选项保持文件属性传输。
[email protected]'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
[email protected]'s password: 
/tmp: not a regular file	#不能直接赋值目录。
[root@centos7 /]# scp -rp /tmp 10.0.0.202:/tmp	#需要使用-r选项复制目录,选项记忆方法:人品rp。
[email protected]'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

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

扫描二维码关注公众号,回复: 14408288 查看本文章
[root@centos7 /tmp]# scp 10.0.0.202:/etc/services .	#与推送的命令顺序对调即可,从10.0.0.202主机上将/etc/services文件下载到当前目录。
[email protected]'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目录到当前目录。
[email protected]'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   

​ 从上面的实验中还可以看到,本地服务器本身即使有这些文件,但是还会再消耗带宽来复制文件,因此也证明了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://用户@主机:端口/目标文件

​ **说明:**在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

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

​ **范例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

​ **提示:**其比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

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

[root@centos7 ~]# rsync -av 10.0.0.202:/tmp/ /tmp
#拉取。
[email protected]'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/ 	#推送。
[email protected]'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

​ 与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目录下。
[email protected]'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

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

6.6.3 经验技巧

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

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_25599925/article/details/125686662