如何在 Linux 中压缩和解压缩文件
创始人
2024-03-02 00:13:16
0

当在备份重要文件和通过网络发送大文件的时候,对文件进行压缩非常有用。请注意,压缩一个已经压缩过的文件会增加额外开销,因此你将会得到一个更大一些的文件。所以,请不要压缩已经压缩过的文件。在 GNU/Linux 中,有许多程序可以用来压缩和解压缩文件。在这篇教程中,我们仅学习其中两个应用程序。

在类 Unix 系统中,最常见的用来压缩文件的程序是:

  1. gzip
  2. bzip2

1. 使用 gzip 程序来压缩和解压缩文件

gzip 是一个使用 Lempel-Ziv 编码(LZ77)算法来压缩和解压缩文件的实用工具。

1.1 压缩文件

如果要压缩一个名为 ostechnix.txt 的文件,使之成为 gzip 格式的压缩文件,那么只需运行如下命令:

$ gzip ostechnix.txt

上面的命令运行结束之后,将会出现一个名为 ostechnix.txt.gz 的 gzip 格式压缩文件,代替了原始的 ostechnix.txt 文件。

gzip 命令还可以有其他用法。一个有趣的例子是,我们可以将一个特定命令的输出通过管道传递,然后作为 gzip 程序的输入来创建一个压缩文件。看下面的命令:

$ ls -l Downloads/ | gzip > ostechnix.txt.gz

上面的命令将会创建一个 gzip 格式的压缩文件,文件的内容为 Downloads 目录的目录项。

1.2 压缩文件并将输出写到新文件中(不覆盖原始文件)

默认情况下,gzip 程序会压缩给定文件,并以压缩文件替代原始文件。但是,你也可以保留原始文件,并将输出写到标准输出。比如,下面这个命令将会压缩 ostechnix.txt 文件,并将输出写入文件 output.txt.gz

$ gzip -c ostechnix.txt > output.txt.gz

类似地,要解压缩一个 gzip 格式的压缩文件并指定输出文件的文件名,只需运行:

$ gzip -c -d output.txt.gz > ostechnix1.txt

上面的命令将会解压缩 output.txt.gz 文件,并将输出写入到文件 ostechnix1.txt 中。在上面两个例子中,原始文件均不会被删除。

1.3 解压缩文件

如果要解压缩 ostechnix.txt.gz 文件,并以原始未压缩版本的文件来代替它,那么只需运行:

$ gzip -d ostechnix.txt.gz

我们也可以使用 gunzip 程序来解压缩文件:

$ gunzip ostechnix.txt.gz

1.4 在不解压缩的情况下查看压缩文件的内容

如果你想在不解压缩的情况下,使用 gzip 程序查看压缩文件的内容,那么可以像下面这样使用 -c 选项:

$ gunzip -c ostechnix1.txt.gz

或者,你也可以像下面这样使用 zcat 程序:

$ zcat ostechnix.txt.gz

你也可以通过管道将输出传递给 less 命令,从而一页一页的来查看输出,就像下面这样:

$ gunzip -c ostechnix1.txt.gz | less
$ zcat ostechnix.txt.gz | less

另外,zless 程序也能够实现和上面的管道同样的功能。

$ zless ostechnix1.txt.gz

1.5 使用 gzip 压缩文件并指定压缩级别

gzip 的另外一个显著优点是支持压缩级别。它支持下面给出的 3 个压缩级别:

  • 1 – 最快 (最差)
  • 9 – 最慢 (最好)
  • 6 – 默认级别

要压缩名为 ostechnix.txt 的文件,使之成为“最好”压缩级别的 gzip 压缩文件,可以运行:

$ gzip -9 ostechnix.txt

1.6 连接多个压缩文件

我们也可以把多个需要压缩的文件压缩到同一个文件中。如何实现呢?看下面这个例子。

$ gzip -c ostechnix1.txt > output.txt.gz
$ gzip -c ostechnix2.txt >> output.txt.gz

上面的两个命令将会压缩文件 ostechnix1.txtostechnix2.txt,并将输出保存到一个文件 output.txt.gz 中。

你可以通过下面其中任何一个命令,在不解压缩的情况下,查看两个文件 ostechnix1.txtostechnix2.txt 的内容:

$ gunzip -c output.txt.gz
$ gunzip -c output.txt
$ zcat output.txt.gz
$ zcat output.txt

如果你想了解关于 gzip 的更多细节,请参阅它的 man 手册。

$ man gzip

2. 使用 bzip2 程序来压缩和解压缩文件

bzip2gzip 非常类似,但是 bzip2 使用的是 Burrows-Wheeler 块排序压缩算法,并使用 哈夫曼 Huffman 编码。使用 bzip2 压缩的文件以 “.bz2” 扩展结尾。

正如我上面所说的, bzip2 的用法和 gzip 几乎完全相同。只需在上面的例子中将 gzip 换成 bzip2,将 gunzip 换成 bunzip2,将 zcat 换成 bzcat 即可。

要使用 bzip2 压缩一个文件,并以压缩后的文件取而代之,只需运行:

$ bzip2 ostechnix.txt

如果你不想替换原始文件,那么可以使用 -c 选项,并把输出写入到新文件中。

$ bzip2 -c ostechnix.txt > output.txt.bz2

如果要解压缩文件,则运行:

$ bzip2 -d ostechnix.txt.bz2

或者,

$ bunzip2 ostechnix.txt.bz2

如果要在不解压缩的情况下查看一个压缩文件的内容,则运行:

$ bunzip2 -c ostechnix.txt.bz2

或者,

$ bzcat ostechnix.txt.bz2

如果你想了解关于 bzip2 的更多细节,请参阅它的 man 手册。

$ man bzip2

总结

在这篇教程中,我们学习了 gzipbzip2 程序是什么,并通过 GNU/Linux 下的一些例子学习了如何使用它们来压缩和解压缩文件。接下来,我们将要学习如何在 Linux 中将文件和目录归档。

干杯!


via: https://www.ostechnix.com/how-to-compress-and-decompress-files-in-linux/

作者:SK 选题:lujun9972 译者:ucasFL 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

首尔大学团队突破:让AI&...
这项由首尔大学IPAI实验室的郑妍硕(Yeonseok Jeong...
2025-06-16 20:22:44
如何压缩jpg大小?jpg...
我们日常的学习、工作中,经常需要收发很多jpg图片。...
2025-06-01 04:50:50
bzip2支持的文件类型
要确定bzip2支持的文件类型,可以使用以下代码示例:import...
2025-01-12 23:02:07
bzip2解压是否可以继续...
可以使用python中的bz2模块来实现继续bzip2解压。具体代...
2025-01-12 23:01:50
bzip2是否允许在块或流...
bzip2不支持在块或流级别进行随机访问解压缩。bzip2压缩算法...
2025-01-12 23:01:46
不重新压缩的情况下反转二进...
我们可以使用Python的Pillow库来处理TIFF图像文件。为...
2025-01-12 14:01:40

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
从 Yum 更新中排除特定/某... 作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。如果是,如...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...
如何检查你的 Linux 系统... 不知道在使用哪个初始化系统?以下是方法。每个主流 Linux 发行版(包括 Ubuntu、Fedor...