- 6.1 压缩打包介绍

- 6.2 gzip压缩工具

- 6.3 bzip2压缩工具

- 6.4 xz压缩工具



# 6.1 压缩打包介绍


## 常见压缩文件

- Windows .rar .zip .7z

- Linux .zip,.gz,.bz2,.xz,

- .tar.gz,.tar.bz2,.taz.xz



## 6.2 gzip压缩工具


首先做一个准备工作,在/tmp/下创建一个d6z的目录,再用find命令查找/etc/目录下的带有字符conf的所有文件 把这些文件内容输出到 /tmp/目录下的一个文件里去,把这个文件叫做1.txt


```

[root@aminglinux-01 ~]# ls


111  1_heard.txt  1.txt~     234        3.txt  anaconda-ks.cfg.1

123  1_sorft.txt  1.txt.bak  2.txt.bak  4.txt  biji.txt


[root@aminglinux-01 ~]# cd /tmp/


[root@aminglinux-01 tmp]# ls


1.txt      aming.111  passwd.sh

1.txt.bak  aming2     systemd-private-0e3d6e7faed94f9397845efbc07a6139-vmtoolsd.service-b9Ef5b

aming      fstab      xxx.conf

[root@aminglinux-01 tmp]# mkdir d6z

[root@aminglinux-01 tmp]# cd d6z

[root@aminglinux-01 d6z]# ls

[root@aminglinux-01 d6z]# find /etc/ -type f -name "*.conf"

/etc/lvm/lvm.conf

/etc/lvm/lvmlocal.conf

/etc/resolv.conf

/etc/pki/ca-trust/ca-legacy.conf

/etc/yum/pluginconf.d/fastestmirror.conf

/etc/yum/pluginconf.d/langpacks.conf

/etc/yum/protected.d/systemd.conf

/etc/yum/version-groups.conf

[root@aminglinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> 1.txt \;



[root@aminglinux-01 d6z]# ls

1.txt

[root@aminglinux-01 d6z]# du -sh 1.txt

252K 1.txt

[root@aminglinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> 1.txt \;

[root@aminglinux-01 d6z]# du -sh 1.txt

704K 1.txt

[root@aminglinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> 1.txt \;

[root@aminglinux-01 d6z]# du -sh 1.txt

1.2M 1.txt

[root@aminglinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> 1.txt \;

[root@aminglinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> 1.txt \;


命令du -sh 查看文件大小  命令wc -l 1.txt 查看文件的总行数

[root@aminglinux-01 d6z]# du -sh 1.txt

2.2M 1.txt

[root@aminglinux-01 d6z]# wc -l 1.txt

32360 1.txt

```

下面开始用giz去压缩它



```

[root@aminglinux-01 d6z]# du -sh 1.txt

2.2M 1.txt

这里的2.2M大小  有点不实际,因为前面252k 我们复制了5次,2.2M有点虚的空间

[root@aminglinux-01 d6z]# wc -l 1.txt

32360 1.txt

[root@aminglinux-01 d6z]# gzip 1.txt

[root@aminglinux-01 d6z]# ls

1.txt.gz

[root@aminglinux-01 d6z]# du -sh 1.txt.gz

332K 1.txt.gz

[root@aminglinux-01 d6z]# gzip -d 1.txt.gz

[root@aminglinux-01 d6z]# ls

1.txt

[root@aminglinux-01 d6z]# du -sh 1.txt

1.3M 1.txt

 

压缩再解压后 发现文件大小才1.3M

压缩再解压缩可以把那些虚的空间给挤掉


[root@aminglinux-01 d6z]# du -sh 1.txt

1.3M 1.txt

[root@aminglinux-01 d6z]# wc -l 1.txt

32360 1.txt

还是这么多行


gzip 压缩有个选项gzip-数字

(1-9的级别,1级别最松散、随便 9级别最严谨 ,默认是6 不加-数字)


[root@aminglinux-01 d6z]# gzip -1 1.txt

[root@aminglinux-01 d6z]# du -sh 1.txt.gz

392K 1.txt.gz

之前 332k,现在392k比之前的大一些,这是因为它的压缩级别可以调整,

这里是最低级别,级别(1-9)

压缩的最严谨,耗费cpu资源就多,压缩的不严谨 耗费cpu资源最少


### gzip 解压

1.  gzip -d 文件

2.  gunzip 文件


[root@aminglinux-01 d6z]# gzip -1 1.txt

[root@aminglinux-01 d6z]# du -sh 1.txt.gz

392K 1.txt.gz

[root@aminglinux-01 d6z]# gunzip 1.txt.gz

[root@aminglinux-01 d6z]# ls

1.txt



再来做一个最严谨的压缩 9级别的压缩,来看下大小和6级别一样大


[root@aminglinux-01 d6z]# gzip -9 1.txt

[root@aminglinux-01 d6z]# du -sh 1.txt.gz

332K 1.txt.gz

实际上压缩到一定的层次,基本上不会再往里压缩了 ,gzip 默认是6级别,取了一个适中的值


压缩完的文件怎么去查看呢?

不能再直接cat了,因为变成了一个二进制文件


[root@aminglinux-01 d6z]# ls

1.txt.gz

[root@aminglinux-01 d6z]# type 1.txt.gz

-bash: type: 1.txt.gz: 未找到

[root@aminglinux-01 d6z]# file 1.txt.gz

1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Sun Aug  6 21:38:28 2017, max compression


[root@aminglinux-01 d6z]# zcat 1.txt.gz

这个命令可以查看它的内容,它实际上是先解压然后再cat

```

 ![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170806/221434158.png?p_w_picpathslim)

 

 正常情况下1.txt 压缩变成1.txt.gz     1.txt没了,解压也是,1.txt。gz 解压变成1.txt  原来的文件 i.txt。gz 没了

 

 现在不想要这样,不想要原来的文件消失

 

 先解压

```

[root@aminglinux-01 d6z]# ls

1.txt.gz

[root@aminglinux-01 d6z]# gzip -d 1.txt.gz


再压缩1.txt  并且 把它重定向到 /tmp/1.txt.gz


[root@aminglinux-01 d6z]# gzip -c 1.txt > /tmp/1.txt.gz

[root@aminglinux-01 d6z]# ls

1.txt

[root@aminglinux-01 d6z]# ls /tmp/1.txt.gz

/tmp/1.txt.gz

[root@aminglinux-01 d6z]# file !$

file /tmp/1.txt.gz

/tmp/1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Sun Aug  6 21:38:28 2017


关于解压 也不想删除,直接给它指定一个地方


[root@aminglinux-01 d6z]# gzip -d -c /tmp/1.txt.gz > /tmp/d6z/2.txt 


-d是解压缩,-c是指定一个路径在/tmp/2.txt 下

[root@aminglinux-01 d6z]# ls

1.txt  2.txt

[root@aminglinux-01 d6z]# wc -l 1.txt 2.txt

  32360 1.txt

  32360 2.txt

  64720 总用量

[root@aminglinux-01 d6z]# du -sh *.txt

1.3M 1.txt

1.3M 2.txt

[root@aminglinux-01 d6z]# 

```


- [x] gzip不能压缩目录这是它的一个特性


## 6.3 bzip2 压缩工具


![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170807/212456786.png?p_w_picpathslim)


- bzip2比gzip更加狠一点(压缩的越狠,意味着耗费的资源就越多),默认的是9级别

```

[root@aminglinux-01 d6z]# ls

1.txt  2.txt

[root@aminglinux-01 d6z]# bzip2 1.txt

-bash: bzip2: 未找到命令

[root@aminglinux-01 d6z]# yum install -y bzip2


```

 没有bzip2的命令,用yum命令安装一下


```

完毕!

[root@aminglinux-01 d6z]# bzip2 1.txt

[root@aminglinux-01 d6z]# ls

1.txt.bz2  2.txt

[root@aminglinux-01 d6z]# du -sh 1.txt.bz2

160K 1.txt.bz2

现在只有160k,压缩的更狠

[root@aminglinux-01 d6z]# du -sh 1.txt.bz2

160K 1.txt.bz2

[root@aminglinux-01 d6z]# du -sh 2.txt

1.3M 2.txt


[root@aminglinux-01 d6z]# bzip2 -d 1.txt.bz2 

bzip2 -d 解压

[root@aminglinux-01 d6z]# bzip2 1.txt

[root@aminglinux-01 d6z]# bunzip2 1.txt.bz2

也可以支持 bunzip2 这个命令也可以解压

[root@aminglinux-01 d6z]# ls

1.txt  2.txt

[root@aminglinux-01 d6z]# 

```

也可以支持bzip2 -c 解压还不删除源文件

```

[root@aminglinux-01 d6z]# ls

1.txt  2.txt

[root@aminglinux-01 d6z]# bzip2 -c 1.txt > /tmp/1.txt.bz2

[root@aminglinux-01 d6z]# du -sh /tmp/1.txt.bz2

160K /tmp/1.txt.bz2


[root@aminglinux-01 d6z]# bzip2 -d -c /tmp/1.txt.bz2 > 3.txt

[root@aminglinux-01 d6z]# ls

1.txt  2.txt  3.txt

[root@aminglinux-01 d6z]# du -sh 3.txt

1.3M 3.txt


[root@aminglinux-01 d6z]# bzip2 -9 1.txt

[root@aminglinux-01 d6z]# du -sh 1.txt.bz2

160K 1.txt.bz2

[root@aminglinux-01 d6z]# 

bzip2默认级别就是9 所以不需要指定它


[root@aminglinux-01 d6z]# file 1.txt.bz2

1.txt.bz2: bzip2 compressed data, block size = 900k

[root@aminglinux-01 d6z]# ls

1.txt.bz2  2.txt  3.txt

[root@aminglinux-01 d6z]# mv 1.txt.bz2 1.txt

如果把1.txt.gz 改名为 1.txt后

[root@aminglinux-01 d6z]# ls

1.txt  2.txt  3.txt

[root@aminglinux-01 d6z]# less 1.txt

"1.txt" may be a binary file.  See it anyway? 

用less查看不了,可以用file查看下 对比下1.txt  和  2.txt   显示 2.txt是个text文件

[root@aminglinux-01 d6z]# file 1.txt

1.txt: bzip2 compressed data, block size = 900k

[root@aminglinux-01 d6z]# file 2.txt

2.txt: UTF-8 Unicode text, with very long lines

[root@aminglinux-01 d6z]# less 2.txt

[root@aminglinux-01 d6z]# 

[root@aminglinux-01 d6z]# mv 1.txt 1.txt.bz2

[root@aminglinux-01 d6z]# ls

1.txt.bz2  2.txt  3.txt

[root@aminglinux-01 d6z]# 


bzip2 也支持 bzcat 查看压缩文件

[root@aminglinux-01 d6z]# bzc

bzcat  bzcmp  

[root@aminglinux-01 d6z]# bzcat 1.txt.bz2

```

- [x] bzip2也不支持压缩目录



##  6.4  xz压缩工具


![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170807/222220143.png?p_w_picpathslim)


xz压缩工具比 bzip2 压缩还要狠,一压缩变成60k了

```

[root@aminglinux-01 d6z]# ls

1.txt.bz2  2.txt  3.txt

[root@aminglinux-01 d6z]# xz 2.txt

[root@aminglinux-01 d6z]# ls

1.txt.bz2  2.txt.xz  3.txt

[root@aminglinux-01 d6z]# du -sh 2.txt.xz

60K 2.txt.xz

[root@aminglinux-01 d6z]# du -sh 3.txt

1.3M 3.txt


[root@aminglinux-01 d6z]# ls

1.txt.bz2  2.txt.xz  3.txt

[root@aminglinux-01 d6z]# xz -d 2.txt.xz

xz -d 解压  unxz 也可以解压

[root@aminglinux-01 d6z]# ls

1.txt.bz2  2.txt  3.txt

[root@aminglinux-01 d6z]# xz 2.txt

[root@aminglinux-01 d6z]# unxz 2.txt.xz

[root@aminglinux-01 d6z]# ls

1.txt.bz2  2.txt  3.txt


[root@aminglinux-01 d6z]# xz -c 2.txt > /tmp/2.txt.xz

压缩文件重定向到指定路径下,保留原来的文件


[root@aminglinux-01 d6z]# xz -d -c /tmp/2.txt.xz > ./4.txt

解压一个xz文件然后指定到当前目录改名为4.txt 并且保留原来的压缩文件

[root@aminglinux-01 d6z]# ls

1.txt.bz2  2.txt  3.txt  4.txt

```

- [x] xz也不支持压缩目录