在Linux中使用gzip和gunzip
1. 概述
之前,我们已经了解了 Linux 中的 Zip 和 7-Zip 。在这个简短的教程中,我们将重点介绍**gzip和gunzip 用于从 Linux 命令行压缩和解压缩文件**。
2. 为什么使用gzip?
与gzip相比,Zip 有两个优点:
- Zip 是跨平台的,可在所有计算平台上使用。gzip首先是一个 Linux 工具。它也可以在 macOS 上开箱即用,但在 Windows 上不可用
- Zip 可以压缩多个文件甚至整个目录层次结构。另一方面,*gzip只压缩一个文件。*这就是为什么我们通常将它与tar 一起使用,它将多个文件/目录打包到一个存档文件中
那么,如果 Zip 有这些优势,那我们为什么要在 Linux 中使用gzip呢?一个词:无处不在。无论我们使用哪个 Linux 发行版,**总是会安装tar和 gzip**。在 Linux 中,Zip 是两个不同的程序:zip和unzip。我们不能依赖任何一个来安装。
当然,我们可以使用yum 和 apt 在大多数 Linux 系统上轻松安装zip和unzip。但是在Docker 容器中运行我们的 Spring Boot 应用程序 的时代,我们希望保持我们的 Docker 镜像很小。这意味着安装尽可能少的附加软件。
3. 对单个文件使用gzip和gunzip
让我们使用gzip压缩单个文件:
gzip -v data.csv
这会压缩文件data.csv并将其替换为文件data.csv.gz。-v选项让gzip显示压缩率。
gzip的压缩级别为 1-9,其中 9 为我们提供了最大的压缩率,但速度最慢。默认压缩级别为 6,是速度和压缩比之间的良好折衷。
使用更高级别的压缩会显着增加压缩时间,但通常压缩比只会略微增加(如果有的话)。
以下是我们如何以最大压缩级别压缩文件:
gzip -v9 data.csv
现在,让我们使用gunzip从gzip文件中解压缩单个文件:
gunzip -v data.csv.gz
这将解压缩文件data.csv.gz并将其替换为data.csv。
与gzip一样,-v选项显示 文件解压缩后的压缩率。
4. 使用tar和gzip处理多个文件和目录
gzip只压缩一个文件。这就是为什么我们必须将gzip与tar归档实用程序一起使用来压缩多个文件或整个目录。我们可以一步完成使用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更快的压缩和解压
gzip和gunzip与大多数 Linux 工具一样,仅使用单个 CPU 内核。因此,压缩大文件可能需要一段时间。 这就是*pigz 存在的原因,它是“ gzip的并行实现”。 pigz利用多个 CPU 和多个 CPU 内核来实现更高的压缩和解压缩速度**。pigz是gzip的变位词,发音为“pig-zee”。我们可以使用yum或apt 安装它。
** pigz与gzip 兼容,而 unpigz 与 gunzip 兼容。**因此, pigz生成gunzip可以解压缩的文件,并使用与gzip相同的选项。同样, unpigz解压缩gzip创建的文件,并使用与gunzip相同的选项。
** pigz快多少?**
为了找出答案,我们在具有六个 CPU 内核和超线程的现代计算机上进行了快速测试。测试数据是一个 818 MB 的 CSV 文件。我们对gzip和pigz使用了最大压缩级别 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. 使用pigz和tar
要将pigz与tar一起使用,我们指定 ** –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