- 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
252K1.txt
[root@aminglinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> 1.txt \;
[root@aminglinux-01 d6z]# du -sh 1.txt
704K1.txt
[root@aminglinux-01 d6z]# find /etc/ -type f -name "*.conf" -exec cat {} >> 1.txt \;
[root@aminglinux-01 d6z]# du -sh 1.txt
1.2M1.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.2M1.txt
[root@aminglinux-01 d6z]# wc -l 1.txt
32360 1.txt
```
下面开始用giz去压缩它
```
[root@aminglinux-01 d6z]# du -sh 1.txt
2.2M1.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
332K1.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.3M1.txt
压缩再解压后 发现文件大小才1.3M
压缩再解压缩可以把那些虚的空间给挤掉
[root@aminglinux-01 d6z]# du -sh 1.txt
1.3M1.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
392K1.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
392K1.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
332K1.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?imageslim)
正常情况下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.3M1.txt
1.3M2.txt
[root@aminglinux-01 d6z]#
```
- [x] gzip不能压缩目录这是它的一个特性
## 6.3 bzip2 压缩工具
![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170807/212456786.png?imageslim)
- 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
160K1.txt.bz2
现在只有160k,压缩的更狠
[root@aminglinux-01 d6z]# du -sh 1.txt.bz2
160K1.txt.bz2
[root@aminglinux-01 d6z]# du -sh 2.txt
1.3M2.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.3M3.txt
[root@aminglinux-01 d6z]# bzip2 -9 1.txt
[root@aminglinux-01 d6z]# du -sh 1.txt.bz2
160K1.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?imageslim)
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
60K2.txt.xz
[root@aminglinux-01 d6z]# du -sh 3.txt
1.3M3.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也不支持压缩目录