gzip,bzip2,xz 压缩工具详解

压缩格式介绍

在 Windows 下,我们接触最多的压缩文件是.rar 格式的,但是在 Linux 下,不能识别这种格式,它有自己独特的压缩工具。但.zip 格式的文件在 Windows 和 Linux 下都能使用。使用压缩文件,不仅能节省磁盘空间,而且在传输时还能节省网络宽带。

Linux 下最常见的压缩文件通常都是.tar .gz 格式的,除此之外,还有.tar , .gz, .bz2 ,.zip 等格式。
虽然 Linux 下文件的后缀名可加可不加,但压缩文件最好加上后缀名。这是为了判断压缩文件是由哪种压缩工具所压缩的,而后才能正确的解压这个文件。

在 Linux 下常见的后缀名所对应的压缩工具
- .gz 表示由 gzip 压缩工具压缩的文件。
- .bz2 表示由 bzip2 压缩工具压缩的文件。
- .tar 表示由 tar 打包程序打包的文件 (tar 并没有压缩功能,只是把一个目录合并成一个文件)。
- .tar .gz 可以理解为先由 tar 打包,然后再由 gzip 压缩。
- .tar .bz2 可以理解为先由 tar 打包,然后再由 bzip2 压缩。
- .tar .xz 可以理解为先由 tar 打包,然后再 xz 压缩。


gzip 压缩工具

  1. 命令语法
    gzip(选项)(参数)

  2. 命令描述
    gzip 命令用来压缩文件。gzip 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。
    gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip 不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和 tar 命令一起构成 Linux 操作系统中比较流行的压缩文件格式。据统计,gzip 命令对文本文件有 60%~70% 的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。

  3. 命令选项
    -d 该参数在解压时使用;
    -# 表示压缩等级,1 为最差,9 为最好,6 为默认;
    -c 表示压缩之后原文件不变,压缩文件放到指定的目录;

  4. 命令示例

  • 添加给 1.txt 文件内容;
[root@localhost d6z]# find /etc/ -type f -name "*conf"  -exec cat {} >> 1.txt \;
[root@localhost d6z]# du -sh 1.txt
252K	1.txt
[root@localhost d6z]# find /etc/ -type f -name "*conf"  -exec cat {} >> 1.txt \;
[root@localhost d6z]# du -sh 1.txt
704K	1.txt
[root@localhost d6z]# find /etc/ -type f -name "*conf"  -exec cat {} >> 1.txt \;
[root@localhost d6z]# du -sh 1.txt
1.2M	1.txt
[root@localhost d6z]# find /etc/ -type f -name "*conf"  -exec cat {} >> 1.txt \;
[root@localhost d6z]# du -sh 1.txt
1.2M	1.txt
[root@localhost d6z]# find /etc/ -type f -name "*conf"  -exec cat {} >> 1.txt \;
[root@localhost d6z]# du -sh 1.txt
2.2M	1.txt

以上代码可以看出在 1.txt 里增加同样的内容,但是每次增加后的大小并不相同。


  • 压缩并解压;
[root@localhost d6z]# du -sh 1.txt
2.2M	1.txt
[root@localhost d6z]# wc -l 1.txt	//wc -l 用来计算一个文档的行数。
32375 1.txt
[root@localhost d6z]# gzip 1.txt    ​//压缩1.txt
[root@localhost d6z]# ls
1.txt.gz
[root@localhost d6z]# du -sh 1.txt.gz
332K	1.txt.gz
[root@localhost d6z]# gzip -d 1.txt.gz    ​//解压1.txt
[root@localhost d6z]# ls
1.txt
[root@localhost d6z]# du -sh 1.txt
1.3M	1.txt
[root@localhost d6z]# wc -l 1.txt		//显示行数
32375 1.txt

说明:
压缩之前是 2.2M,32375 个字节。
压缩之后 1.txt 文件加了一个后缀名.gz, 文件大小变成了 332K。
解压之后,文件大小变成了 1.3M,字节依然没有改变还是 32375。


  • 设置压缩级别;
[root@localhost d6z]# gzip -9 1.txt   //设置压缩级别为9级别
[root@localhost d6z]# du -sh 1.txt.gz  
328K	1.txt.gz
[root@localhost d6z]# ls
1.txt.gz
[root@localhost d6z]# zcat 1.txt.gz  //查看压缩后的文件内容、
[root@localhost d6z]# gzip -d 1.txt.gz

说明:这里的压缩级别,最小是 1,最大是 9,默认的 6。推荐大家用 6 级别就行,因为压缩到一定的程度就不会压缩了。而且压缩的级别越大,耗费的 cpu 资源越大。


  • 使用 -c 选项,压缩之后原文件不变,压缩文件放到 /tmp/1.txt.gz 中;
[root@localhost d6z]# gzip -c 1.txt > /tmp/1.txt.gz    //压缩1.txt并把压缩后的文件放到/tmp下
[root@localhost d6z]# ls
1.txt
[root@localhost d6z]# ls /tmp/1.txt.gz
/tmp/1.txt.gz
[root@localhost d6z]# file !$  //查看压缩后的文件的详细信息
file /tmp/1.txt.gz
/tmp/1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Fri Nov 10 09:11:57 2017

  • 解压,把压缩文件和压缩后的文件放到指定目录;
[root@localhost d6z]# gzip -d -c /tmp/1.txt.gz > /tmp/d6z/2.txt  	 //解压1.txt文件,并不删除压缩文件,把压缩文件放到/tmp/d6z/2.txt中。
[root@localhost d6z]# wc -l 1.txt 2.txt 	//计算总行数
  32375 1.txt
  32375 2.txt
  64750 总用量
[root@localhost d6z]# du -sh *.txt
1.3M	1.txt
1.3M	2.txt

##bzip2 压缩工具
1. 命令语法
bzip2 [-dz] filename // 压缩时,加或不加 - 选项都可以压缩文件。

  1. 命令描述
    gzip 命令用来压缩文件。bzip2 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.bz”扩展名。

  2. 命令选项
    -d 解压
    -z 压缩 < 可加可不加 >

  3. 命令示例
  • 安装 bzip2
 #yum install -y bzip2
[root@localhost d6z]# bzip2 1.txt     //使用bzip2压缩1.txt;
[root@localhost d6z]# ls
1.txt.bz2  2.txt
[root@localhost d6z]# du -sh 1.txt.bz2    //查看使用bzip2压缩后的1.txt文件大小;
160K	1.txt.bz2
[root@localhost d6z]# du -sh 2.txt      //查看使用gzip压缩后的1.txt文件大小,可见bzip2压缩后的文件更小一点;
1.3M	2.txt
[root@localhost d6z]# bzip2 -d 1.txt.bz2    //解压bzip2压缩的1.txt文件;
[root@localhost d6z]# bzip2 1.txt       //压缩1.txt文件;
[root@localhost d6z]# bunzip2 1.txt.bz2    //使用bunzip2压缩1.txt文件。 和bzip2压缩一样;    
[root@localhost d6z]# ls
1.txt  2.txt
[root@localhost d6z]# bzip2 -c  1.txt > /tmp/1.txt.bz2    //使用-c选项,把压缩后的1.txt 放到 /tmp/1.txt.bz2中;
[root@localhost d6z]# du -sh /tmp/1.txt.bz2
160K	/tmp/1.txt.bz2
[root@localhost d6z]# bzip2 -d -c /tmp/1.txt.bz2 >3.txt    //解压并指定目录,把解压后的文件重命名为3.txt;
[root@localhost d6z]# ls
1.txt  2.txt  3.txt
[root@localhost d6z]# du -sh 3.txt        //查看解压后的文件大小;
1.3M	3.txt
[root@localhost d6z]# bzip2 -9 1.txt        //使用bzip2的9级别压缩1.txt文件;
[root@localhost d6z]# du -sh 1.txt.bz2      //查看压缩后的文件大小;
160K	1.txt.bz2
[root@localhost d6z]# file 1.txt.bz2       //查看压缩后的文件详细信息;
1.txt.bz2: bzip2 compressed data, block size = 900k
[root@localhost d6z]# bzcat 1.txt.bz2      //查看压缩后的文件内容(由于文件内容过大,不在显示)

##xz 压缩工具

  1. 命令语法
    xz [-dz] filename

  2. 命令描述
    xz 命令用来压缩文件。文件经它压缩过后,其名称后面会多处“.xz”扩展名

  3. 命令选项
    -z 压缩 < 此选项可加可不加 >
    -d 解压

  4. 命令示例

[root@localhost d6z]# ls  
1.txt.bz2  2.txt  3.txt
[root@localhost d6z]# xz 2.txt        //使用xz工具压缩2.txt文件;
[root@localhost d6z]# ls
1.txt.bz2  2.txt.xz  3.txt
[root@localhost d6z]# du -sh 2.txt.xz     //查看压缩后的文件大小;
60K	2.txt.xz
[root@localhost d6z]# xz -d 2.txt.xz     //使用-d选项解压xz压缩的文件;
[root@localhost d6z]# xz 2.txt        //使用xz工具压缩2.txt文件;
[root@localhost d6z]# unxz 2.txt.xz      //使用unxz解压2.txt文件;
[root@localhost d6z]# ls
1.txt.bz2  2.txt  3.txt
[root@localhost d6z]# xz -c 2.txt > /tmp/2.txt.xz    //压缩后,原文件不消失,并把压缩后的文件重定向到/tmp/2.txt.xz中;
[root@localhost d6z]# xz -d -c /tmp/2.txt.xz > ./4.txt  //解压xz的文件并且指定解压到./4txt中,同时保留压缩文件。
[root@localhost d6z]# xzcat /tmp/2.txt.xz    //查看压缩后的文件内存