实验环境简述
本章内容主要集中在主机间文件传输的方法和使用,因此需要至少2台主机(虚拟机也可).
同时,为了保证实验的顺利执行,需要临时关闭火墙.
systemctl disable --now firewalld ##关闭火墙
文件传输指令
SCP命令
scp命令用于在主机与主机间进行文件传输,特点为无论文件是否存在都会进行一次传输,即非增量传输.下文会对这一特性进行验证.
当从本机将文件传输到远程主机时即为传统意义上的上传;反之,从远程主机将文件取回本机即为传统意义上的下载.
两者只有命令顺序不同,实现方法相同.
scp 本地文件 远程主机用户@远程主机IP:远程主机存储文件位置的绝对路径
##将本地文件传输到远程主机,同时指定了用户和存储位置.
scp 远程主机用户@远程主机IP:远程主机存储文件位置的绝对路径 本地文件
##将远程主机上的文件传输回本地.
当然,scp
命令也可以用来传输目录.
scp -r 本地目录 远程主机用户@远程主机IP:远程主机存储文件位置的绝对路径
##-r参数表示操作对象为目录
从图中可以看出,在执行命令后会有进度提示,在批量进行文件传输时,过多的进程提示会影响监控的观感和准确度,因此也存在静默运行(不显示完成进度)的参数:-q
.
scp -q 本地文件 远程主机用户@远程主机IP:远程主机存储文件位置的绝对路径
Rsync命令
rsync
命令也用于进行文件传输,与scp
命令的区别是它的传输是增量传输.简言之,当传输的文件中一部分已经存在时,仅会传输不存在的文件.在进行批量更新时较scp
命令更节约时间和系统资源.
rsync 本地文件 远程主机用户@远程主机IP:远程主机存储文件位置的绝对路径
##将本地文件增量传输到远程主机,同时指定了用户和存储位置.
rsync 远程主机用户@远程主机IP:远程主机存储文件位置的绝对路径 本地文件
##将远程主机上的文件增量传输回本地.
因为rsync
命令还被应用在文件同步等方面,因此其参数较多,以下列出常用的.
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
SCP与Rsync命令的比较
要对两者的实现进行比较,还是直接进行横向比较直观.
- 生成新的单个大文件用于测试
- 分别用
scp
和rsync
命令对大文件进行传输 - 各传输三次,保证耗时准确
使用dd命令生成新的1G大小文件,对于指令运行逻辑不必深究.
分别编写两个命令的非交互传输脚本为实验作准备.
##SCP.sh内容实现
time scp -qr bigfile root@172.25.254.136:/root/Desktop
time scp -qr bigfile root@172.25.254.136:/root/Desktop
time scp -qr bigfile root@172.25.254.136:/root/Desktop
##向虚拟机传输1G用测试文件三次,每次都进行时间统计.
##Rsync.sh内容实现
time rsync -aCq bigfile root@172.25.254.136:/root/Desktop
time rsync -aCq bigfile root@172.25.254.136:/root/Desktop
time rsync -aCq bigfile root@172.25.254.136:/root/Desktop
##向虚拟机传输1G用测试文件三次,每次都进行时间统计.
事前准备完备,可以进行实验了.
耗时分别如下所示
不难看出以下几点.
- 两种方式在初次传输时所消耗的系统占用时间近似.
- 在之后的传输中,
scp
依旧对已经存在的文件进行覆盖传输 - 而
rsync
仅仅检查了文件是否存在,在确认已经存在后并未复制文件
文件的归档压缩
使用tar指令进行归档
当需要进行批量传输时,将细碎文件直接进行传输会耗费大量的时间,如果将文件打包成单一文件则耗时更短.
tar
c ##创建打包文件
f ##对文件名进行指定
x ##解包文件
v ##显示过程
t ##查看
r ##向已经存在的打包文件中添加文件
--get ##从打包文件中提取指定文件
--delete ##从打包文件中删除指定文件
-C ##指定解包路径
-P ##不自动删除根目录的记录
参数之间可以进行组合,实现具体功能.如下进行部分举例.
tar cvf Test.tar /etc/ ##将etc目录下的所有文件打包为Test.tar,并显示打包过程
tar xf Test.tar ##在当前目录下解包Test.tar
tar tf Test.tar ##查看Test.tar打包文件中的内容
tar xf Test/tar -C /mnt ##将Test.tar解包到mnt目录下
值得一提的是,当打包大量文件时会发现打包文件比原文件大小小不少.这并不是进行了压缩,而是因为文件内保存链接,而链接本身也占用容量,而链接不计算在打包内,因此看起来文件变小.
打包时默认去掉打包中文件目录的根符号,避免覆盖根目录下可能存在的文件.相当于将绝对路径变成相对路径,连接在当前目录下.-P
参数的作用也在这里.
文件压缩指令
打包是将文件变为一个文件包,而压缩则是在此基础上对文件大小进行了压缩,Linux下常用的压缩格式有zip
,bz2
,xz
,gz
.
##zip压缩命令
zip -r 压缩文件名 待压缩文件
##解压命令
unzip 压缩文件名
##gzip压缩命令
gzip 压缩文件名 待压缩文件
##gzip解压命令
gunzip 压缩文件名
##bzip2压缩命令
bzip2 压缩文件名 待压缩文件
##bzip2解压命令
bunzip2 压缩文件名
##xz压缩命令
xz-z 压缩文件名 待压缩文件
##xz解压命令
x -k 压缩文件名
当然也可以将压缩与打包组合起来使用
tar zcf 压缩文件名 待压缩文件 ##打包压缩为gz格式
tar jcf 压缩文件名 待压缩文件 ##打包压缩为bz2格式
tar Jcf 压缩文件名 待压缩文件 ##打包压缩为xz格式