gzip 代表 GNU zip,是基于 Unix 的系统上用于压缩和解压缩文件的流行工具。
该工具不仅仅压缩单个文件;与其他工具(例如tar
用于压缩目录。
命令结构和选项
基本结构为gzip
命令如下:
gzip [option] [file...]
以下是一些基本选项:
-
-c
:写入标准输出,不改变原文件。
-
-d
: 解压。
-
-f
:强制压缩,即使文件已经有.gz
扩大。
-
-k
:保留原文件(不要删除)。
-
-l
:列表理解统计。
-
-r
:对目录进行递归操作。
-
-v
:以详细模式操作。
-
-#
:设置压缩级别(从1到9,其中9最好)。
压缩和解压文件
要使用压缩文件gzip
,只需运行:
gzip filename.txt
原始文件filename.txt
被替换为filename.txt.gz
.
解压缩文件:
gzip -d filename.txt.gz
The .gz
文件被替换为原始未压缩的文件filename.txt
.
了解 gzip 中使用的压缩算法
gzip
使用 DEFLATE 算法。该算法结合了 LZ77 (Lempel-Ziv 1977) 和 Huffman 编码。它的工作原理:
- LZ77 使用对未压缩数据流中较早存在的数据的单个副本的引用来替换重复出现的数据。
- 然后,霍夫曼编码通过使用较短的代码对频繁出现的位序列进行编码,进一步减小了生成的数据流的大小。
压缩级别(从 1 到 9)
With gzip
,您可以选择 1 到 9 之间的压缩级别:
gzip -# backup.txt
Replace #
1 到 9 之间的数字。
-
1
提供最快的压缩速度,但会产生较大的压缩文件。
-
9
提供最佳压缩(最小输出)但花费最多时间。
默认情况下,不指定级别,gzip
使用级别6
其目的是在压缩速度和压缩文件的大小之间取得平衡。
使用 –fast 和 –best 调整压缩速度
虽然您可以使用指定压缩级别-1
to -9
, gzip
还提供了两个描述性选项来调整压缩:
-
--fast
: 相当于-1
,此选项提供最快的压缩。
-
--best
: 相当于-9
,它的目标是最高的压缩比,无论花费的时间如何。
Usage:
gzip --fast filename.txt # For fast compression
gzip --best filename.txt # For best compression ratio
当您优先考虑速度或压缩比而不需要记住特定的级别编号时,这些选项非常有用。
将多个文件压缩在一起(使用 tar)
如果需要压缩多个文件或目录,gzip
其本身并不支持这一点。
然而,结合tar
,您可以将多个文件和目录压缩为一个.tar.gz
file:
tar -czf archive_name.tar.gz directory_or_file
-
c
:创建一个新的存档。
-
z
:使用 gzip 压缩存档。
-
f
:使用存档文件。
该命令将指定的目录或文件打包到archive_name.tar.gz
.
分别压缩多个文件
您可以压缩多个单独的文件而不存档:
gzip file1.txt file2.txt file3.txt
该命令将分别压缩每个文件,从而产生file1.txt.gz
, file2.txt.gz
, and file3.txt.gz
.
如果你想将它们压缩在一起,你可以使用gzip
with tar
正如我们上面所做的。
使用管道压缩其他命令的输出
您可以通过将其他命令的输出通过管道直接压缩gzip
:
command | gzip > output.gz
例如,压缩输出ls -l
:
ls -l | gzip > listing.gz
这会将当前目录中的文件压缩列表保存到listing.gz
.
解压无需删除原件
如果您想解压缩文件而不更改或删除原始文件.gz
文件,您可以使用-c
选项与gzip
:
gzip -dc backup.txt.gz > backup.txt
该命令解压backup.txt.gz
到标准输出并将其重定向到backup.txt
,保持原始压缩文件不变。
使用 gzip 进行递归操作
对于压缩目录或对目录中的多个文件进行操作,-r
选项变得有用:
gzip -r directory_name/
该命令将递归压缩所有文件directory_name
及其子目录,将其替换为它们的.gz
同行。
保留原始文件名
要在压缩或解压缩时保留原始文件,您可以使用-k
option:
gzip -k backup.txt
这创造了backup.txt.gz
但也保留了原来的样子backup.txt
。相同的选项在减压过程中起作用,确保您保留.gz
版本与解压文件一起。
连接压缩文件
要连接压缩文件,请使用-c
选项与gzip
写入标准输出。
然后您可以使用以下命令将此输出重定向到文件>
对于第一个文件和>>
用于后续文件。执行此操作的方法如下:
gzip -c file1 > backup.gz
gzip -c file2 >> backup.gz
这将创建一个名为的串联 gzip 文件backup.gz
。解压后,它将输出以下内容的组合file1
and file2
按顺序。
注意backup.gz
仍然是单个 gzip 流。因此,您无法提取file1
or file2
单独从中。
查看压缩文件
有一些工具可以让您查看压缩文件的内容而不解压它们:
-
zcat filename.txt.gz
:这会在终端中显示压缩文件的内容。
-
zless filename.txt.gz
:这使您可以上下滚动查看压缩文件。
-
zmore filename.txt.gz
:它提供了一种简单的方式来浏览压缩文件,类似于标准more
命令。
这些实用程序可以方便地快速检查压缩文件,而无需先解压缩它们。
阅读更多有关如何使用的信息zcat、zless 和 zmore.
检查压缩文件的完整性
要验证压缩文件的完整性而不解压缩它,请使用-t
option:
gzip -t backup.txt.gz
如果文件完好无损,该命令不会返回任何输出。但是,如果文件有问题,gzip
将通过错误消息通知您。
分析压缩统计数据
如果您对压缩细节感到好奇,-l
选项列出统计信息:
gzip -l backup.txt.gz
Output:
compressed uncompressed ratio uncompressed_name
291473268 301343120 3.3% backup.txt
这将显示列,包括:
-
compressed size
:压缩文件的大小。
-
uncompressed size
:原始文件压缩前的大小。
-
ratio
:达到压缩比。
-
uncompressed_name
:原始未压缩文件的名称。
该信息对于评估压缩的有效性至关重要。
了解 -v(详细)选项
当使用-v
or --verbose
选项与gzip
,该命令提供有关其操作的详细输出:
gzip -v backup.txt
Output:
backup.txt: 3.3% -- replaced with backup.txt.gz
Here, 3.3%
表示达到的压缩比。当您想要观察压缩性能而不使用-l
option.
不同级别压缩所需的时间
使用以下命令测量不同级别压缩文件所需的时间gzip
,您可以使用time
命令。
以下是每个级别的操作方法:
# Measure time for compression level 1
time gzip -1 -k backup.txt
Output:
real 0m11.463s
user 0m11.172s
sys 0m0.288s
要测量压缩级别 9 的时间:
time gzip -9 -k backup.txt
Output:
real 0m13.803s
user 0m13.465s
sys 0m0.321s
The time
命令将显示压缩过程中实际经过的时间。用于测试的文件大小为 300 MB。
如您所见,级别 9 的压缩需要更多时间。
使用 –rsyncable 选项
The --rsyncable
选项使压缩文件更适合使用同步rsync
:
gzip --rsyncable backup.txt
压缩会被稍微修改,因此未压缩文件中的微小变化会导致压缩版本中的微小变化。
这可以使后续的同步操作使用rsync
速度更快,因为如果仅对源文件进行较小的修改,则需要传输的数据更少。
资源
https://www.gnu.org/software/gzip/manual/gzip.html