注意1: 这篇文章说的是压缩格式, 也就是压缩文件的格式, 不是说压缩算法.
注意2: 这边文章里虽然带有 zip 字眼的, 和 windows 下常见的 .zip 后缀的 ZIP 格式的文档没有丝毫关系.
gzip 既是一种压缩格式, 也是处理这种压缩格式的程序的名字. gzip 是 GNU 组织开发的, 所以也可以叫做 gun zip, 注意这里是加空格的.
最一开始的时候说了 gzip 是压缩格式, 通常以 .gz 为后缀, 而且通常和 tar 这种打包格式搭配出现. 要说压缩算法, 实际上 gzip 是基于 DEFLATE 算法的. 好了, 打住.
注意, 不要把它看成是 "gnu zip", 这个程序应该这么看: g unzip, 是的, 这个程序是用来解压 gzip 格式的文档的. 单纯的调用 gunzip 等价于 gzip -d.
这个程序也会解压 gzip 文档, 和 gunzip 的区别在于解压之后的行为, zcat 解压完文档后的行为和 cat 一样, 会把内容打印到保准输出. 调用 zcat 等价于 gzip -d -c.
这才是最重要的组件, 实际上说他是 gzip 家族有些不妥, 不过它和 gzip 关系密切, 就放这里吧. zlib 不是一个可执行的程序, 而是一个软件库, 这个库实现了 DEFLATE 压缩算法, 而 gzip 用的就是 DEFLATE 算法啊.
gzip 就是使用了 zlib 库.
既然已经说了 zlib, 那就再多说一些.
zlib 最初开发出来是为了给 libpng 这个库用的, 毕竟 DEFLATE 算法是个用处很广范的算法嘛, 图像压缩也会用到它.
更牛逼的是 Linux 内核也使用 zlib 来压缩内核镜像, 还记得 vmlinuz 不? 记得 zImage, bzImage 不? 不是 initrd/initramfs 啊, 那是 cpio 包.
还有各大 webserver, 如 apache, nginx 等, 它们都直接或者间接 (通过 libwww 库) 使用了 zlib. 记得 HTTP 头的 "Content-Encoding", "Accept-Encoding" 以及 "Transfer-Encoding" 里可以指定 gzip 吗?
然后还有 rsync, 这个远程文件同步工具, 也会使用 zlib 来压缩数据.
还有 subversion, 还有 git, 还有 postgreSQL, 太多了. 具体可查阅参考 1.
7-zip 也能够生成 gzip 格式的压缩文件, 而且, 没有使用 zlib, 7-zip 自己实现了 DEFLATE 算法, 内建在 7-zip 里, 它这个实现比 zlib 的牛逼, 生成的压缩文件体积比 zlib 生成的小, 不过代价就是压缩时间更长.
自查维基吧.
bzip2 和 gzip 非常相似, bzip2 同样既是压缩格式, 也是处理这种格式的程序。 不过 bzip2 所实现的是 Burrows-Wheeler 压缩算法和 Huffman 算法, 这种算法的压缩率比其他的算法 (如上面说的 DEFLATE,还有什么 LZ77) 好很多。
bzip2 的用法和 gzip 也非常相似, 命令行参数都差不多, 这点不再详述。
等价于 bzip2 -d
等价于 bzip2 -dc
地位同 gzip 里的 zlib 一样,bzip2 使用了 libbzip2 库, 当然, libbzip2 库也可以被其他很多应用程序使用。
##其它支持 bzip2 的东东
又是这货, 而且他又是自己实现了 Burrows-Wheeler 压缩算法, 没有使用 libbzip2。你为何这么叼?
其它的自行查阅维基