如何在 Linux 上使用 Gzip 压缩和解压缩文件如何在 Linux 上使用 Gzip 压缩和解压缩文件如何在 Linux 上使用 Gzip 压缩和解压缩文件如何在 Linux 上使用 Gzip 压缩和解压缩文件
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上使用 Gzip 压缩和解压缩文件

有许多文件压缩实用程序,但您肯定会在每个 Linux 发行版中找到的是 gzip。如果你只学习使用一种压缩工具,那应该是gzip。

算法和树

gzip 数据压缩工具编写于 1990 年代初期,至今仍存在于每个 Linux 发行版中。还有其他可用的压缩工具,但无论您发现自己需要在哪台 Linux 计算机上工作,您都会在上面找到 gzip。因此,如果您知道如何使用 gzip,则无需安装任何东西就可以开始使用。

gzip 是 DEFLATE 算法的一种实现,它是由 PKZIP 名人菲尔·卡茨发明并获得专利的。 DEFLATE 算法改进了早期的压缩算法,这些算法都对主题的变体进行操作。扫描要压缩的数据,识别唯一字符串并将其添加到二叉树中。

唯一的字符串根据它们在树中的位置分配一个唯一的 ID 标记。标记用于替换数据中的字符串,并且由于标记小于它们替换的数据,因此文件被压缩。用标记替换原始字符串会将数据重新膨胀回其未压缩状态。

DEFLATE 算法添加了一个转折点,即最常遇到的字符串分配给最小的标记,而最不经常遇到的字符串分配给较大的标记。 DEFLATE 算法还结合了两种早期压缩方法的思想,霍夫曼编码和 LZ77 压缩。

在撰写本文时,DEFLATE 算法已有将近 30 年的历史。三十年前,数据存储成本很高,传输速度很慢。数据压缩非常重要。

今天的数据存储便宜得多,传输速度快了几个数量级。但是我们要存储的数据太多了,全世界的人都在访问云存储和流媒体服务。数据压缩仍然至关重要非常重要,即使您所做的只是压缩需要上传或传输的内容,或者您正试图收回本地硬盘驱动器上的一些空间。

gzip 命令

文件越大,压缩效果越好。这是因为两个原因。一是整个大文件中会有许多重复的、相同的字节序列。第二个原因是字符串列表和标记需要存储在压缩文件中,以便可以进行解压缩。对于非常小的文件,这种开销会抵消压缩带来的好处。但即使是相当小的文件,大小也可能会有所减小。

压缩文件

要压缩(或 zip)文件,您需要做的就是将文件名传递给 gzip 命令。我们将检查文件的原始大小,将其压缩,然后检查压缩文件的大小。

ls -lh calc-sheet.ods
gzip calc-sheet.ods
ls -lh cal-*

原始文件是一个名为“calc-sheet.ods”的电子表格,大小为 11 KB,压缩文件(也称为存档文件)大小为 9.3 KB。请注意,存档文件的名称是原始文件的名称加上“.gz”。

ls 命令的第一次使用针对特定文件,即电子表格。第二次使用 ls 查找所有以“calc-”开头的文件,但它只找到压缩文件。这是因为,默认情况下,gzip 会创建存档文件并删除原始文件。

这不是问题。如果您需要原始文件,您可以从存档文件中检索它。但是,如果您希望保留原始文件,则可以使用 -k(保留)选项。

gzip -k calc-sheet.ods
ls -lh calc-sheet.*

这次保留了原始 ODS 文件。

解压缩文件

要解压缩(或解压缩)GZ 存档文件,请使用 -d(解压缩)选项。这将从存档中提取压缩文件并将其解压缩,以便它与原始文件没有区别。

ls calc-sheet.*
gzip -d calc-sheet.ods.gz
ls calc-sheet.*

这一次,我们可以看到 gzip 在提取原始文件后删除了存档文件。要保留存档文件,我们需要再次使用-k(保留)选项,以及-d(解压缩)选项。

ls calc-sheet.*
gzip -d calc-sheet.ods.gz
ls calc-sheet.*

这一次,gzip 不会删除存档文件。

解压和覆盖

如果您尝试在原始文件或具有相同文件的不同文件所在的目录中提取文件,gzip 会提示您选择放弃提取或覆盖现有文件。

gzip -d text-file.txt.gz

如果您事先知道您很高兴目录中的文件被存档中的文件覆盖,请使用 -f(强制)选项。

gzip -df text-file.txt.gz

该文件被覆盖,您将静静地返回到命令行。

压缩目录树

-r(递归)选项使 gzip 压缩整个目录树中的文件。但结果可能不是你所期望的。

这是我们将在此示例中使用的目录树。每个目录都包含一个文本文件。

tree level1

让我们在目录树上使用 gzip 看看会发生什么。

gzip -r level1/
tree level1

结果是 gzip 为目录结构中的每个文本文件创建了一个归档文件。它没有创建整个目录树的存档。事实上,gzip 只能将单个文件放入存档中。

我们可以创建一个包含目录树及其所有文件的存档文件,但我们需要使用另一个命令。 tar 程序用于创建许多文件的存档,但它没有自己的压缩例程。但是通过对 tar 使用适当的选项,我们可以使 tar 通过 gzip 推送归档文件。这样我们就得到了一个压缩归档文件和一个多文件或多目录归档。

tar -czvf level1.tar.gz level1

tar 选项是:

  • c:创建存档。
  • z:通过gzip推送文件。
  • v:详细模式。在终端窗口中打印 tar 正在做什么。
  • f level1.tar.gz:用于存档文件的文件名。

这将归档目录树结构和目录树中的所有文件。

获取有关档案的信息

-l(列表)选项提供有关存档文件的一些信息。它向您显示存档中文件的压缩和未压缩大小、压缩率和文件名。

gzip -l leve1.tar.gz
gzip -l text-file.txt.gz

您可以使用 -t(测试)选项检查存档文件的完整性。

gzip -t level1.tar.gz

如果一切顺利,您将静静地返回到命令行。没有消息就是好消息。

如果存档已损坏或不是存档,您会被告知。

gzip -t not-an-archive.gz

速度与压缩

您可以选择优先考虑存档的创建速度或压缩程度。为此,您可以提供一个数字作为选项,从 -1 到 top -9。 -1 选项在牺牲压缩的情况下提供最快的速度,而 -9 选项在牺牲速度的情况下提供最高的压缩。

除非您提供这些选项之一,否则 gzip 使用 -6。

gzip -1 calc-sheet.ods
ls -lh calc-sheet.ods.gz
gzip -9 calc-sheet.ods
ls -lh calc-sheet.ods.gz
gzip -6 calc-sheet.ods
ls -lh calc-sheet.ods.gz

对于这么小的文件,我们没有看到执行速度有任何显着差异,但压缩方面存在微小差异。

有趣的是,使用 9 级压缩和 6 级压缩没有区别。您只能从任何给定文件中压缩这么多,在这种情况下,6 级压缩已达到该限制。将其调到 9 不会进一步减少文件大小。对于更大的文件,第 6 级和第 9 级之间的差异会更加明显。

压缩,不受保护

不要将压缩误认为是加密或任何形式的保护。压缩文件不会给它任何安全性或增强的隐私。任何有权访问您的文件的人都可以使用 gzip 来解压缩它。

©2015-2025 艾丽卡 support@alaica.com