开源数据压缩工具-gzip
2013-05-24 10:02:14 阿炯

Gzip是若干种文件压缩程序的简称,通常指GNU计划的实现,此处的gzip代表GNU zip。也经常用来表示gzip这种文件格式。软件的作者是Jean-loup Gailly和Mark Adler。

gzip的算法基础是DEFLATE


gzip (GNU zip) is a compression utility designed to be a replacement for compress. Its main advantages over compress are much better compression and freedom from patented algorithms. It has been adopted by the GNU project and is now relatively popular on the Internet. gzip was written by Jean-loup Gailly, and Mark Adler for the decompression code.

gzip produces files with a .gz extension. gunzip can decompress files created by gzip, compress or pack. The detection of the input format is automatic.

文件格式说明
 10字节的头,包含幻数、版本号以及时间戳
 可选的扩展头,如原文件名
 文件体,包括DEFLATE压缩的数据
 8字节的尾注,包括CRC-32校验和以及未压缩的原始数据长度

尽管这种文件格式允许多个这样的数据拼接在一起,在解压时也把它们当作拼接在一起的数据,但是通常gzip仅仅用来压缩单个文件。多个文件的压缩归档通常是首先将这些文件合并成一个tar文件,然后使用gzip进行压缩,最后生成的.tar.gz或者.tgz文件,这就是所谓的“tar压缩包”或者“tarball”。

注意不要将gzip和zip压缩格式混淆。ZIP也使用DEFLATE算法,而且可移植性更好,并且不需要一个外部的归档工具就可以包容多个文件。但是,由于zip对每个文件进行单独压缩而没有利用文件间的冗余信息(固实压缩),所以ZIP的压缩率要稍逊于tar压缩包。

对应的解压程序是gunzip。

在HTTP/1.1协议中允许客户端可以选择要求从服务器下载压缩内容,这个标准本身定义了三种压缩方法:“gzip”(内容用gzip数据流进行封装)、“compress”(内容用compress数据流进行封装)以及“deflate”(内容是原始格式、没有数据头的DEFLATE数据流)。当然前者是目前的主流,很多站点都开启了gzip压缩功能。

命令行选项
 -c,--stdout 将解压缩的内容输出到标准输出,原文件保持不变
 -d,--decompress 解压缩
 -f,--force 强制覆盖旧文件
 -l,--list 列出压缩包内储存的原始文件的信息(如,解压后的名字、压缩率等)
 -n,--no-name 压缩时不保存原始文件的文件名和时间戳,解压缩时不恢复原始文件的文件名和时间戳(此时,解出来的文件,其文件名为压缩包的文件名)
 -N,--name 压缩时保存原始文件的文件名和时间戳,解压缩时恢复原始文件的文件名和时间戳
 -q,--quiet 抑制所有警告信息
 -r,--recursive 递归
 -t,--test 测试压缩文件完整性
 -v,--verbose 冗余模式(即显示每一步的执行内容)
-1、-2、...、-9 压缩率依次增大,速度依次减慢,默认为6


不常见用法

gzip怎么将压缩或解压缩文件到处理其他目录

解决方法:gzip test.txt -c > /freeoa/test.gz,将文件流重定向,解压也是:gunzip /freeoa/test.gz -c > ./test.txt 或 gzip -d /freeoa/test.gz -c > ./test.txt

gzip的man手册中关于此压缩相关的节选

-c --stdout --to-stdout
Write  output on standard output; keep original files unchanged.If there are several input files, the  output  consists  of  a sequence  of  independently compressed members. To obtain better compression, concatenate all input files  before compressing them.

-d --decompress --uncompress
Decompress.

从标准输入接收文件流再进行压缩输出

cat comorig2.txt |gzip -9 >com3.gz
cat comorig2.txt |gzip -9 -c >com4.gz


基于gz并行压缩-pigz

A parallel implementation of gzip for modern multi-processor, multi-core machines.


最新版本:1.6
添加 "--keep" (-k) 参数用于不删除输入文件
修复了 pack 格式的解压问题
使用优化编译后的错误覆盖问题修复
zgrep 的处理多数字上下文参数的问题修复
zmore 行为更像 more

最新版本:1.11
gzip 的上一个版本是 2018 发布的 1.10,时隔两年半后的2021年9月上旬,它终于迎来了更新——Gzip 1.11。不过在这两年多的时间里,Gzip 似乎也没带来令人眼前一亮的变化,主要是针对 IBM Z 设备的优化。gzip 1.11 的主要变化是合并了由 IBM 贡献的补丁——为 Gzip 提供对 IBM Z 的良好支持。Gzip 1.11 具有用于压缩和解压缩的 IBM Z 硬件加速 DEFLATE 实现。IBM 表示“压缩和解压缩性能比当前的 gzip 快几个数量级,比率与级别 1 相当”。除了针对 IBM Z 的优化,自 v1.10 以来的变化包括构建升级、文档升级、改进测试覆盖率和其他维护工作。更多详情查看发行公告


官方主页:http://www.gzip.org/

项目主页:http://www.gnu.org/software/gzip/