Pigz-在Linux中并行压缩和解压缩文件
Pigz是gzip并行实现(parallel implementation of gzip)的缩写,是一种免费的开源多线程压缩实用程序,用于在Linux中压缩和解压缩文件。
Pigz,发音为pig-zee,使用zlib和pthread库,并且在压缩数据时充分利用了多个处理器和多个内核。
由于Pigz使用线程进行压缩以利用多个处理器和内核,因此与gzip相比,它能够更快地归档较大的文件。
简而言之,Pigz做了gzip的工作,但是在压缩时它将工作分配给多个处理器和内核,并显着加快了压缩/解压缩过程。
在本教程中,让我们学习在Linux中使用Pigz并行压缩和解压缩文件。
在Linux上安装Pigz
在流行的Linux操作系统的官方存储库中可以找到Pigz。
在Arch Linux及其类似Manjaro Linux的变体上,启用[Community]存储库并使用以下命令安装Pigz:
$sudo pacman -S pigz
在CentOS 8/7/6上:
$sudo yum install pigz
在Debian上:
$sudo apt-get install pigz
在Fedora上:
$sudo dnf install pigz
在Ubuntu上,Linux Mint:
$sudo add-apt-repository universe
$sudo apt install pigz
在openSUSE上:
$sudo zypper install pigz
在其他Linux发行版中,如下所示从源代码进行编译和安装。
首先,请确保我们已安装以下先决软件:
- make
- gcc
- zlib-devel
例如,在基于Debian的系统上,我们可以使用以下命令安装上述软件包:
$sudo apt install make gcc zlib-devel
在基于RPM的系统上:
$sudo yum install make gcc zlib-devel
然后从官方下载最新的Pigz版本:
$wget https://zlib.net/pigz/pigz-2.4.tar.gz
提取Pigz tar文件:
$tar -xzvf pigz-2.4.tar.gz
此命令将把内容提取到当前工作目录中名为Pigz-2.4的文件夹中。
光盘进入“ pigz-2.4”目录:
$cd pigz-2.4
使用以下命令编译并安装它:
$make
将Pigz二进制文件复制到$PATH中,例如/usr/local/bin:
$sudo cp pigz /usr/local/bin/
注销并重新登录以开始使用Pigz。
使用Pigz并行压缩和解压缩文件
Pigz将给定的输入划分为128 KB的块,并并行压缩每个块。
使用deflate压缩方法生成的压缩数据格式为gzip,zlib或者单项zip格式。
默认情况下,它压缩文件gzip(.gz)格式。
让我为我们展示一些实际的例子。
出于本教程的目的,我将使用archlinux.iso文件(大小为677.4 MB)进行测试。
压缩档案
要使用默认选项压缩文件,只需运行:
pigz <path-to-file>
例子:
$pigz archlinux.iso
上面的命令将压缩给定的文件,例如:archlinux.iso,并将其另存为当前工作目录中的archlinux.iso.gz。
请注意,上面的命令在压缩后将删除原始文件,例如:archlinux.iso。
如果我们不想删除原始文件,请使用-k(保持)指示Pigz在处理原始文件后不要删除它。
$pigz -k archlinux.iso
列出存档文件的内容
要列出上述归档文件的内容而不提取它,请使用-l标志。
$pigz -l archlinux.iso.gz compressed original reduced name 654901763 677380096 3.3% archlinux.iso
从上面的输出中可以看到,输入文件已比其原始大小减少了3.3%。
指定压缩方法
Pigz支持以下压缩方法:
- 最慢和最佳压缩(-9)
- 最快且压缩更少(-1)
- 无压缩(-0)
- 默认压缩(-6)
例如,要使用最佳压缩方法(慢速)压缩文件,请运行:
$pigz -9 archlinux.iso
以较少的压缩率压缩文件(快速):
$pigz -1 archlinux.iso
无压缩:
$pigz -0 archlinux.iso
更改压缩格式
默认情况下,它将输出文件保存为gzip格式。
但是,我们可以将其更改为其他格式。
以下命令将给定文件压缩为zlib(.zz),而不是gzip格式:
$pigz -k -z archlinux.iso
其中我们使用-k(小写)在压缩原始文件后将其保留。
同样,要以zip格式压缩文件,请使用-K(大写)标志:
$pigz -k -K archlinux.iso
压缩目录
Pigz没有任何直接压缩文件夹的选项。
但是,我们可以通过将tar命令与Pigz结合使用来实现此目标,如下所示。
$tar cf - Pictures/| pigz > pictures.tar.gz
上面的命令将压缩Pictures文件夹并将其另存为pictures.tar.gz文件。
就像我们的读者Wazz在下面的注释部分中所说的那样,我们也可以在tar中使用“ use-compress-program”参数来运行Pigz而不是通过管道进行输出。
例子:
$tar --use-compress-program=pigz -cf yourfile.tar.gz folder1 folder2
压缩时限制处理器数量
就像我已经说过的,Pigz在压缩文件时会利用多个处理器和内核。
我们可以使用-p标志更改此行为。
例如,以下命令将使用最佳压缩方法和4个处理器来压缩文件,并保留原始文件:
$pigz -9 -k -p4 archlinux.iso
解压缩文件
我们可以使用pigz -d或者unpigz命令将压缩文件解压缩为原始格式。
$pigz -d archlinux.iso.gz
或者,
$unpigz archlinux.iso.gz
有关更多详细信息,请参见帮助部分和手册页:
$pigz --help
$ man pigz
Gzip vs Pigz-性能比较
我使用Pigz和Gzip实用程序测试了archlinux.iso(大小为677.4 MB)文件。
结果如下:
使用Gzip压缩:
$time gzip archlinux.iso real 0m35.086s user 0m32.719s sys 0m1.333s
使用Pigz压缩:
$time pigz archlinux.iso real 0m12.545s user 0m46.376s sys 0m1.520s
用Gzip解压缩:
$time gzip -d archlinux.iso.gz real 0m6.847s user 0m5.621s sys 0m0.783s
使用Pigz进行减压:
$time unpigz archlinux.iso.gz real 0m2.398s user 0m2.370s sys 0m1.931s
从上面的输出中可以看到,Pigz可以压缩和解压缩677.4 MB的单个文件,速度是使用gzip的两倍。
因此,如果我们拥有现代的多处理器,多核系统,并希望通过使用所有可用的CPU核来尽可能快地压缩较大的文件,pigz将是一个不错的选择!尝试一下,在下面的注释部分中让我们知道我们对Pigz压缩实用程序的想法。