高效解压缩压缩工具pigz
pigz(Parallel Implementation of GZip)是gzip的并行实现版本,它能够利用多核处理器的优势,显著加快压缩和解压缩的速度。在当今多核CPU普及的环境下,pigz相比传统的gzip能够提供数倍的性能提升。
pigz工作原理

基本架构
pigz的核心思想是将压缩任务分解成多个独立的块,然后在不同的处理器核心上并行处理这些块。其工作流程如下:
- 数据分块:输入数据被分割成多个独立的数据块。
- 并行压缩:每个数据块在不同的CPU核心上独立压缩。
- 结果合并:压缩后的数据块按照原始顺序组合成最终的压缩文件。
优点
- 保持兼容性:生成的压缩文件完全兼容标准的gzip格式。
- 独立块压缩:每个数据块使用独立的压缩字典,避免块间依赖。
- :自动平衡各核心的工作负载。
- 流式处理:支持标准输入输出,便于管道操作。
pigz命令参数详解
基本用法
代码语言:bash
AI代码解释
pigz [选项] [文件...]
参数说明
|
参数 |
长参数 |
描述 |
|---|---|---|
|
`-0` to `-9` |
压缩级别(0-9,数字越大压缩率越高但速度越慢) |
|
|
-11 |
压缩级别11(使用zopfli算法,速度极慢但压缩率更高) |
|
|
--fast |
快速压缩(相当于级别1) |
|
|
--best |
最佳压缩(相当于级别9) |
|
|
-b |
--blocksize mmm |
设置压缩块大小为mmmK(默认128K) |
|
-c |
--stdout |
将所有处理后的输出写入标准输出(不删除原文件) |
|
-d |
--decompress |
解压缩模式 |
|
-f |
--force |
强制覆盖文件,压缩.gz文件、链接和终端输出 |
|
-F |
--first |
在块分割之前先进行迭代(仅用于-11级别) |
|
-h |
--help |
显示帮助信息并退出 |
|
-i |
--independent |
独立压缩块以便损坏恢复 |
|
-I |
--iterations n |
为-11优化设置迭代次数 |
|
-J |
--maxsplits n |
为-11设置最大分割块数 |
|
-k |
--keep |
处理完成后不删除原文件 |
|
-K |
--zip |
压缩为PKWare zip格式(.zip单条目格式) |
|
-l |
--list |
列出压缩文件内容 |
|
-L |
--license |
显示pigz许可证信息并退出 |
|
-m |
--no-time |
不存储或恢复修改时间 |
|
-M |
--time |
存储或恢复修改时间 |
|
-n |
--no-name |
不存储或恢复文件名和修改时间 |
|
-N |
--name |
存储或恢复文件名和修改时间 |
|
-O |
--oneblock |
不分割为更小的块(仅用于-11级别) |
|
-p |
--processes n |
允许最多n个压缩线程(默认为在线处理器数量,未指定时为8) |
|
-q |
--quiet |
不打印任何消息,即使出错 |
|
-r |
--recursive |
递归处理所有子目录内容 |
|
-R |
--rsyncable |
为rsync设置输入确定的块位置 |
|
-S |
--suffix .sss |
使用后缀.sss代替.gz(用于压缩) |
|
-t |
--test |
测试压缩文件的完整性 |
|
-v |
--verbose |
提供更详细的输出信息 |
|
-V |
--version |
显示pigz版本信息 |
|
-Y |
--synchronous |
强制输出文件写入永久存储 |
|
-z |
--zlib |
压缩为zlib格式(.zz)而不是gzip格式 |
|
-- |
在"--"之后的所有参数都视为文件 |
压缩级别说明
- -1:最快压缩,压缩率较低。
- -6:默认级别,平衡压缩速度和压缩率。
- -9:最佳压缩,速度最慢但压缩率最高。
使用样例
基本压缩操作
代码语言:bash
AI代码解释
# 压缩单个文件
pigz filename.txt
# 压缩并保留原文件
pigz -k filename.txt
# 指定压缩级别
pigz -9 largefile.iso
# 使用所有可用核心
pigz -p $(nproc) bigfile.tar
解压缩操作
代码语言:bash
AI代码解释
# 解压缩文件
pigz -d filename.txt.gz
# 解压缩并保留压缩文件
pigz -dk filename.txt.gz
高级用法
代码语言:bash
AI代码解释
# 结合tar进行目录压缩
tar cf - directory/ | pigz > directory.tar.gz
# 列出压缩文件信息
pigz -l archive.gz
# 测试压缩文件完整性
pigz -t archive.gz
# 递归压缩目录
pigz -r project_folder/
性能对比
传统gzip压缩
代码语言:txt
AI代码解释
time gzip largefile.iso

pigz压缩(使用8个核心)
代码语言:txt
AI代码解释
time pigz -p8 largefile.iso

通过简单对比可以发现,对同一个文件进行压缩,pigz耗时为8.73秒,gzip耗时为20秒。如果是更大的文件,使用针对pigz优化后的任务执行参数,则这一差距会更大。
性能优化建议
1.核心数量选择:
- 默认使用所有可用核心。
- 对于I/O密集型任务,适当减少核心数可能更好。
- 使用`-p N`指定具体核心数。
2. 压缩级别选择:
- 追求速度:使用`-1`到`-3`。
- 平衡选择:使用`-6`(默认)。
- 追求压缩率:使用`-9`。
3. 内存考虑:
- 高级别压缩需要更多内存。
- 大文件处理时注意系统内存使用。
适用场景
- 大文件压缩:ISO镜像、等。
- 批量文件处理:日志文件归档。
- 流水线操作:与tar等命令结合使用。
- 高性能需求:需要快速压缩解压缩的环境。
说明
- pigz生成的压缩文件与gzip完全兼容。
- 在单核系统上性能提升有限。
- 压缩小文件时可能看不到明显优势。
- 内存使用量随核心数增加而增加。
更多推荐




所有评论(0)