Contents

在Linux中使用gzip和gunzip

1. 概述

之前,我们已经了解了 Linux 中的 Zip 和 7-Zip 。在这个简短的教程中,我们将重点介绍**gzipgunzip 用于从 Linux 命令行压缩和解压缩文件**。

2. 为什么使用gzip

gzip相比,Zip 有两个优点:

  • Zip 是跨平台的,可在所有计算平台上使用。gzip首先是一个 Linux 工具。它也可以在 macOS 上开箱即用,但在 Windows 上不可用
  • Zip 可以压缩多个文件甚至整个目录层次结构。另一方面,*gzip只压缩一个文件。*这就是为什么我们通常将它与tar 一起使用,它将多个文件/目录打包到一个存档文件中

那么,如果 Zip 有这些优势,那我们为什么要在 Linux 中使用gzip呢?一个词:无处不在。无论我们使用哪个 Linux 发行版,**总是会安装tar和 gzip**。在 Linux 中,Zip 是两个不同的程序:zipunzip。我们不能依赖任何一个来安装。

当然,我们可以使用yum apt 在大多数 Linux 系统上轻松安装zipunzip。但是在Docker 容器中运行我们的 Spring Boot 应用程序 的时代,我们希望保持我们的 Docker 镜像很小。这意味着安装尽可能少的附加软件。

3. 对单个文件使用gzipgunzip

让我们使用gzip压缩单个文件

gzip -v data.csv

这会压缩文件data.csv并将其替换为文件data.csv.gz-v选项让gzip显示压缩率。

gzip的压缩级别为 1-9,其中 9 为我们提供了最大的压缩率,但速度最慢。默认压缩级别为 6,是速度和压缩比之间的良好折衷。

使用更高级别的压缩会显着增加压缩时间,但通常压缩比只会略微增加(如果有的话)。

以下是我们如何以最大压缩级别压缩文件

gzip -v9 data.csv

现在,让我们使用gunzipgzip文件中解压缩单个文件:

gunzip -v data.csv.gz

这将解压缩文件data.csv.gz并将其替换为data.csv

gzip一样,-v选项显示 文件解压缩后的压缩率。

4. 使用targzip处理多个文件和目录

gzip只压缩一个文件。这就是为什么我们必须将gziptar归档实用程序一起使用来压缩多个文件或整个目录。我们可以一步完成使用tar 归档并使用gzip压缩

tar czvf archive.tar.gz *.csv
  • 我们将当前目录中所有带有csv扩展名的文件压缩到压缩存档中,archive.tar.gz
  • z选项启用gzip压缩
  • 由于v选项,tar 显示哪些文件被添加到存档
  • gzip不同,tar在创建存档后不会删除输入文件

正如我们从上一节中回忆的那样,gzip提供了各种压缩级别。tar选择哪种压缩级别 ?这取决于我们的tar版本,但它可能是默认的压缩级别 6。

** tar允许通过*–use-compress-program选项设置压缩程序。**我们还使用此选项来设置压缩级别。在这里,**我们指定最大gzip*压缩级别为 9**:

tar cvf archive.tar.gz --use-compress-program='gzip -9' *.csv

请注意,我们必须在此处删除z选项,因为*–use-compress-program* 已经设置了压缩程序。

使用gzip解压缩tar存档也是一个步骤

tar xvf archive.tar.gz
  • 我们解压文件archive.tar.gz并将其内容解压到当前目录
  • 我们不必告诉tar使用gunzip解压缩-  tar通过检查文件并检测gzip压缩来自动执行此操作
  • 由于v选项,tar 显示从存档中提取的文件
  • gunzip不同,tar在解压完成后不会删除存档文件

5. 使用pigz更快的压缩和解压

gzipgunzip与大多数 Linux 工具一样,仅使用单个 CPU 内核。因此,压缩大文件可能需要一段时间。 这就是*pigz 存在的原因,它是“ gzip的并行实现”。 pigz利用多个 CPU 和多个 CPU 内核来实现更高的压缩和解压缩速度**。pigzgzip的变位词,发音为“pig-zee”。我们可以使用yumapt 安装它。

** pigzgzip 兼容,而 unpigzgunzip 兼容。**因此, pigz生成gunzip可以解压缩的文件,并使用与gzip相同的选项。同样, unpigz解压缩gzip创建的文件,并使用与gunzip相同的选项。

** pigz快多少?**

为了找出答案,我们在具有六个 CPU 内核和超线程的现代计算机上进行了快速测试。测试数据是一个 818 MB 的 CSV 文件。我们对gzippigz使用了最大压缩级别 9 。

首先,我们用pigz压缩了一个文件:

pigz -v9 data.csv

然后,我们使用unpigz解压这个文件:

unpigz -v data.csv.gz
  • 使用gzip的最快压缩耗时 112 秒,文件大小减少了 88.3%,降至 95 MB
  • ** pigz只需 15 秒即可压缩同一个文件,因此速度提高了 7.5 倍**,压缩文件比gzip创建
  • 使用gunzip解压需要 3 秒,而pigz需要大约 1 秒来解压相同的文件,只是快了大约 3 倍;请注意,在此设置中测量仅几秒钟的持续时间并不是很精确

因此,pigz/unpigz确实可以显着加快使用多个 CPU 或多个 CPU 内核压缩和解压缩文件的速度!

6. 使用pigztar

要将pigztar一起使用,我们指定 ** –use-compress-program 以与 pigz一起压缩**:

tar cvf archive.tar.gz --use-compress-program=pigz *.csv

使用tar解压缩压缩档案时,我们无法指定解压缩程序。这就是为什么如果我们想使用unpigz进行解压,我们必须执行两个单独的步骤:

unpigz -v archive.tar.gz
tar xvf archive.tar