压缩
压缩是对提升数据传输效率,降低传输宽带,管理备份数据都有重要作用
gzip
gzip只能对普通文件进行压缩和解压,对于文件夹,符号链接是不支持的
如果你想把多个文件一起压缩并打包,gzip自身是办不到的,需要和tar帮助完成
如果想在压缩后保留原文件,可以使用-c选项,-c:让gzip将压缩的内容输出到标准输出,而非写入文件和tar结合
有几个概念,“打包/拆包”,“压缩/解压缩”有什么区别?
- 搬家时每一床棉被都抽成真空,这叫压缩。把好几床抽真空的棉被用绳子捆绑起来,叫打包
- 东西搬到新家后,把绳子解开,这叫拆包。把每床棉被舒展开,这叫解压缩
- 如果不抽真空,只是简单地用绳子捆绑起来,用tar
- 只有一床棉被抽真空,gzip
- 好多床棉被,要抽真空,要捆起来,tar和gzip结合起来使用
拆包解压
- 解压拆包使用
tar -xzvf- 当我们看到后缀是
.tar.gz或者.tgz时,一定要知道这个是利用gzip压缩的打包文件,对于这类文件,我们可以通过gzip来解压的-x:
- 表示要进行拆包动作
-z:
- 表示用gzip进行压缩或者解压缩
- 如果同时使用了
-x,那么就表示解压- 如果使用了
-c,表示压缩-v:
- 拆包过程中直播整个过程,把已经拆包的文件显示出来
-f:
- 表示指定要拆包的文件
- 注意,这个选项一定要放在各个选项的最后,也就是要和所制定的文件名挨得最近
打包压缩
tar -czvf
-c:
- 表示亚进用gzip进行压缩或者解压缩行打包动作
-z:
- 使用gzip进行压缩或解压缩
-v:
- 在打包过程中直播整个过程,把已打包的文件显示出来
-f:
- 表示指定要打包的文件,完全可以指定多个,文件夹和文件都可以
不想解压只想看看里面有什么
tar -ztvf
- 少了
-x选项:因为我们并不想实际拆包- 多了
-t选项,作用:列出打包文件中的内容有针对性的解压某个文件
- 例如我们直到在curl软件包中有一个http.c文件,我们想提取出这个文件看看他的源码,但是又不想把这个软件压缩包全部解压,怎么做?
- 在原来拆包解压命令后面直接加上要提取的文件全路径就好了
压缩速度和压缩强度
- 有些人追求压缩的速度,希望快点完成压缩,有的却追求压缩的强度,希望把东西压缩的越小越好
数字级别 含义 1 压缩速度最快,强度不高(一步到位往往只求的是快而不是精致程度) 2 3 4 5 6 默认情况下 7 8 9 压缩强度最高,速度较慢
bzip2
bzip2和bunzip2是一个东西?
bzip2是用来压缩文件的
bunzip2是用来解压缩文件的
但是bzip2和bunzip2在Linux中是指向完全一样的程序
- 如果你在Rehat/Fedora/CentOS下,你会发现bunzip2是bzip2的一个符号链接
- 如果你咋Debian/Ubuntu下工作,你会发现bunzip2和bzip2具有相同的inode节点,即两者指向同一个程序
- 
- bzip2只服务于那些“要压缩的文件”,bunzip2只服务于那些“要解压缩的文件”
一个程序改了名字会有不同的行为?
通过阅读bzip2软件包的源代码,我们发现
默认情况下,命令的工作模式是OM_Z,即压缩模式 opMode=OM_Z
如果程序的名字中含有unzip或UNZIP,那么就将命令的工作模式设置为OM_UNZ,即解压模式
if((strstr(progName,"unzip")!=0)||(strstr(progName,"UNZIP")!=0)) opMode=OM_UNZ;
解压一个.tar.bz2文件
tar -xjvf
-j:特质采用bzip2方式进行解压缩打包并压缩
tar -cjvf现在tar命令已经很智能了,我们完全不需要指定解压缩方式,tar就会根据文件后缀来自动采用匹配的解压方式
- 对单个文件的压缩和解压
*![]()
- 处理多个文件
zip命令
zip支持对文件,文件夹进行压缩
zip和gzip,bzip2有个明显的不同就是压缩过程中会保留原始文件
-r:递归参数中指定的文件夹
-d:指定解压缩的目标路径
-v:不想解压缩,只想看看里面有什么
-t:下载了一个压缩文件,想验证这个压缩文件是否下载完全了
能在zip文件中删除文件
有时候我们的工程师在压缩好zip文件后,发现里面有几个文件并不需要压缩进去,多余的文件占用了空间,但是我们解压后再压缩的话,不仅耗费CPU资源和磁盘空间,还要由专人跟进等待和操作
-d
zip .zip -d 文件名(要删除的文件名)
dd 用来读取设备,文件中的内容,并原封不动的复制到指定位置
device driver的缩写“Linux世界中的搬运工“
当我们dd命令读取/dev/null文件时就可以创造出空洞文件,如果你的磁盘足够大,你可以创造出更大的空洞
备份磁盘并恢复
现在主流的主流硬盘已经是SATA接口的,下面我们要备份的是dev/sda,他就是块SATA盘
dd if=/dev/sda of=/root/sda.img这个命令将sda盘备份到文件/root/sda.img中去,通过这个我们已经得到了sda.img文件,他就是已经备份好了的磁盘映像文件,里面存储着/dev/sda整块硬盘的内容
if=文件名
- 指定输入文件名或者设备名,如果省略这句话则表示从标准输入读取。
of=文件名
- 指定输出文件名或设备名,如果省略这句话则表示写到标准输出
- 如果/dev/sda硬盘真的出现了故障,我们就可以把曾经备份的sda.img复制到另一台电脑上,并将其恢复到指定的sdb盘中
dd if=/root/sda.img of=/dev/sdb
- 如果把目标硬盘直接连接到我们现在的电脑上,并让系统识别到这块新硬盘,例如识别成/dev/sdc,那么我们可以直接使用dd命令将sda盘复制到sdc中去,这种用法既可以用来整盘备份,也可以用来快速复制系统环境。