Contents

在Linux中XZ命令简介

1. 概述

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

2. 为什么使用xz

我们知道Zip 是标准的跨平台归档工具。带有targzip是 Linux 中的标准归档工具**。那么,为什么要使用xz呢?

xz创建的存档比gzip小得多,同时使用与 gzip 相同的选项。**因此,我们可以认为xzgzip 更好的替代品。我们将在后面的部分测试较小档案的声明。

xz的缺点是它没有随所有 Linux 发行版一起提供。但我们可以使用 yumapt 安装它。

3. 对单个文件使用xz

让我们使用xz 来压缩单个文件。除程序名称外,用法与gzip相同:

xz -v data.csv

此命令压缩文件data.csv并将其替换为文件data.csv.xz-v选项让xz显示 进度信息。

xzgzip 具有相同的压缩级别 1-9  。默认压缩率为 6。但与gzip不同,默认压缩级别可能不是速度和压缩比之间的良好折衷,我们将在后面的部分中看到。下面是我们如何以最低压缩级别 1 压缩文件

xz -v1 data.csv

gzip不同,没有用于解压缩文件的单独程序。相反,我们使用*-d*选项来解压缩单个文件

xz -dv data.csv.xz

这将解压缩文件data.csv.xz并将其替换为data.csv-v选项还在此处显示进度信息。

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

就像gzip一样,xz只压缩一个文件。这就是为什么我们还必须将xz 与tar归档实用程序一起使用来压缩多个文件或整个目录**:

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

tar选择哪个xz压缩级别 ?这取决于我们的tar版本,但它可能是默认的压缩级别 6。我们如何更改它?

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

tar cvf archive.tar.xz --use-compress-program='xz -1' *.csv

请注意,我们在这里删除了J选项,因为*–use-compress-program* 已经设置了压缩程序。

使用xz解压缩tar存档 也是一个步骤,并且与 gzip相同(除了不同的文件扩展名):

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

5. 使用多线程进行更快的压缩

gzip不同,xz直接支持多线程,从而加快了压缩速度。

默认情况下,xz只使用一个线程。我们可以使用*-T*选项指定线程数。值0告诉 xz为每个可用的 CPU 内核使用一个线程。这通常是一个很好的默认值:

xz -vT0 data.csv

在这里,我们将使用三个线程:

xz -vT3 data.csv

unpigz 不同,使用xz解压缩不会受益于 multithreading

6. 使用多线程与tar

以前,我们使用* –use-compress-program选项指定压缩级别 。现在,我们**通过相同的–use-compress-program*选项通过设置线程数来启用多线程。**在这里,我们再次为每个 CPU 内核使用一个线程:

tar cvf archive.tar.xz --use-compress-program='xz -1T0' *.csv

因为使用xz解压并不能从多线程中受益,所以我们不需要为使用tar解压xz档案设置特定选项。

7. 使用xz测试档案大小

之前,我们说过xz创建的档案比gzip更小。为了测试这一说法,我们使用了相同的 818 MB CSV 文件,以及具有六个 CPU 内核和超线程的同一台计算机,就像我们在 Linux 中测试 gzip 时使用的那样。

我们将 xz与 pigz进行了比较, pigz是一种使用多线程实现更快压缩和解压缩的gzip实现。

  • 在我们的测试中,这两种归档工具都使 CPU 饱和。 pigz默认执行此操作,xz因为*-T0*选项
  • 在 9 个压缩级别中的第 7 个压缩级别下,pigz在 4 秒内将 818 MB 的 CSV 文件压缩到 95 MB。更高的压缩级别不会产生有意义的更小的档案
  • 在同样的 4 秒内,  xz将文件压缩到仅 48 MB,比pigz小 49% 。 xz 为此使用了 9 级中的 1 级压缩
  • **在压缩级别 5 下,xz生成了 29 MB 的最小存档,比pigz小 69% 。**但在 70 秒时,xz也花了将近 18 倍的时间!压缩级别 6 及以上大大增加了压缩时间,存档大小减少了 1%,可忽略不计

所以我们已经证明xz确实创建了比gzip小得多的档案。