开源数据压缩工具-gzip


Gzip是若干种文件压缩程序的简称,通常指GNU计划的实现,此处的gzip代表GNU zip。也经常用来表示gzip这种文件格式。软件的作者是Jean-loup Gailly和Mark Adler。
gzip的算法基础是DEFLATE。
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.
pigz(Parallel Implementation of Gzip)可突破多核并发的压缩算法革命与性能跃迁,gzip采用单线程方式,虽然能够完成任务,但在多核处理器环境下,压缩速度和效率未能充分发挥。与传统gzip不同,pigz通过并行算法,充分利用多核处理器,显著提升了压缩速度,同时在保证高效压缩的情况下,压缩文件更小,有效节省存储空间。
pigz 软件是基于 C 语言构建的,并在开发过程中引入了两个核心库:zlib 和 pthread。其中,zlib 是广泛使用的开源数据压缩库,提供高效的压缩与解压缩功能,并支持多种常见的压缩格式;而 pthread 则是用于多线程编程的标准库,提供线程创建、同步和管理等功能,遵循 POSIX(便携式操作系统接口)标准,专为 Linux 系统中的多线程编程设计。这两个库的结合使用,极大提升了 pigz 在处理大数据时的效率,尤其是在并行压缩和解压缩方面展现了显著的性能优势。这为后续开发类似的多线程分析软件提供了宝贵的经验与借鉴,特别是在优化计算密集型任务和提升处理速度方面。
pigz的应用技巧
用户可以通过运行 `pigz -h` 和 `unpigz -h` 命令,查看详细的命令行选项和用法说明,从而掌握更多高级功能,提升数据处理效率。
1.pigz(压缩)
#使用10个线程,压缩当前目录下所有的fq文件
pigz -p 10 *.fq
#使用10个线程,保留原始的fq文件,压缩当前目录下的所有fq文件
pigz -p 10 -k *.fq
#使用10个线程,解压缩当前目录下的所有gz文件,同时保留原始的gz文件
pigz -d -p 10 -k *gz
#查看压缩比
pigz -l *gz
#压缩目录
tar --use-compress-program="pigz -k " -cf S5.tar.gz S5
#查看目录的压缩比
pigz -l S5.tar.gz
2.unpigz(解压缩)
#可以一次性解压缩所有的gz文件
unpigz -p 10 *gz
#使用10个线程,保留原始gz文件,进行解压缩
unpigz -p 10 -k S4.fastq.gz
#解压缩tar.gz目录
unpigz -p 10 S5.tar.gz
最新版本: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/
gzip的算法基础是DEFLATE。
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.
pigz(Parallel Implementation of Gzip)可突破多核并发的压缩算法革命与性能跃迁,gzip采用单线程方式,虽然能够完成任务,但在多核处理器环境下,压缩速度和效率未能充分发挥。与传统gzip不同,pigz通过并行算法,充分利用多核处理器,显著提升了压缩速度,同时在保证高效压缩的情况下,压缩文件更小,有效节省存储空间。
pigz 软件是基于 C 语言构建的,并在开发过程中引入了两个核心库:zlib 和 pthread。其中,zlib 是广泛使用的开源数据压缩库,提供高效的压缩与解压缩功能,并支持多种常见的压缩格式;而 pthread 则是用于多线程编程的标准库,提供线程创建、同步和管理等功能,遵循 POSIX(便携式操作系统接口)标准,专为 Linux 系统中的多线程编程设计。这两个库的结合使用,极大提升了 pigz 在处理大数据时的效率,尤其是在并行压缩和解压缩方面展现了显著的性能优势。这为后续开发类似的多线程分析软件提供了宝贵的经验与借鉴,特别是在优化计算密集型任务和提升处理速度方面。
pigz的应用技巧
用户可以通过运行 `pigz -h` 和 `unpigz -h` 命令,查看详细的命令行选项和用法说明,从而掌握更多高级功能,提升数据处理效率。
1.pigz(压缩)
#使用10个线程,压缩当前目录下所有的fq文件
pigz -p 10 *.fq
#使用10个线程,保留原始的fq文件,压缩当前目录下的所有fq文件
pigz -p 10 -k *.fq
#使用10个线程,解压缩当前目录下的所有gz文件,同时保留原始的gz文件
pigz -d -p 10 -k *gz
#查看压缩比
pigz -l *gz
#压缩目录
tar --use-compress-program="pigz -k " -cf S5.tar.gz S5
#查看目录的压缩比
pigz -l S5.tar.gz
2.unpigz(解压缩)
#可以一次性解压缩所有的gz文件
unpigz -p 10 *gz
#使用10个线程,保留原始gz文件,进行解压缩
unpigz -p 10 -k S4.fastq.gz
#解压缩tar.gz目录
unpigz -p 10 S5.tar.gz
最新版本: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/