Pigz-在Linux中并行压缩和解压缩文件

时间:2020-03-21 11:46:33  来源:igfitidea点击:

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压缩实用程序的想法。