8.9 压缩解压工具

zip

压缩和解压工具是计算机文件管理中不可或缺的基础工具。本节将介绍 FreeBSD 系统上常用的压缩解压工具的安装和使用方法。

在使用 zip 压缩中文或非英文字符时出现乱码是正常现象,因为编码方式不同。一般国产操作系统(如 UOS、Ubuntu Kylin)通过打补丁解决了此问题。关于该补丁未提交到上游的原因,如有了解者可提交 PR。

安装 zip

  • 使用 pkg

# pkg install zip
  • 使用 Ports

# cd /usr/ports/archivers/zip/
# make install clean

zip 压缩

$ zip test.zip test # 压缩成 zip 文件

zip 解压

zip 文件解压时,系统通常自带 unzip 工具,无需额外安装。

$ unzip test.zip # 解压 zip 文件到当前路径
$ unzip test.zip -d /home/ykla/test # 解压到指定路径,-d 即 directory,目录的意思

tar

基本系统自带 tar,不用安装。

tar 是“tape archive”(磁带归档)的缩写,最初用于在磁带上进行文件存储。

思考题

归档文件包是指压缩率为 0 的文件集合,即将多个文件或目录打包成单一文件以便存储。单纯使用 tar 只进行打包而不压缩。压缩的本质是通过算法减小文件占用的存储空间,而不是针对目录本身。因此,常见压缩软件通常先将目录归档为文件,然后再进行压缩。

如何理解归档与压缩的关系?

tar 压缩

tar 解压

选项说明:

  • x:Extract 解压的意思

  • v:verbose 输出详细信息模式

  • f:file 指定文件

  • Ccd 的意思,即指定路径

xz

基本系统自带 xzunxz,同样也不用安装。

xz 压缩

unxz 解压

7z

在 FreeBSD 操作系统中,7z 命令可通过安装 archivers/7-zip 包使用。

安装 7-zip

  • 使用 pkg:

  • 通过 Ports:

7z 压缩

-a 表示 add,将要压缩的文件添加到 test.7z。

7z 解压

-o 即 Output,指定输出路径。

警告

-o/home/ykla/下载/test-o 与路径之间没有空格,这并非拼写错误,而是 7z 命令的设计方式。如有意者可提交 PR 改进。

rar

rar 是 Windows 上常见的压缩工具。

安装 rar

  • 通过 pkg 安装:

  • 通过 Ports:

rar 压缩

-a 表示 add(添加),将文件添加到 archive.rar

rar 解压

zstd

基本系统内置 zstd,无需安装。参见:Add support for zstd-compressed user and kernel core dumps.[EB/OL]. [2026-03-26]. https://svnweb.freebsd.org/base?view=revision&revision=329240arrow-up-right。该修订记录了 zstd 压缩转储支持的实现细节。

zstd 压缩

  • 使用 zstd 压缩单个文件

  • 使用 zstd 压缩文件夹

zstd 不直接支持压缩文件夹(参见:How can I compress a directory?[EB/OL]. [2026-03-26]. https://github.com/facebook/zstd/issues/1526arrow-up-right )。该 Issue 讨论了 zstd 不支持直接压缩目录的技术原因与替代方案,因此需要先将文件夹打包为 tar 文件。

思考题

zstd 为什么不支持压缩文件夹?有哪些可能性?

再将 test.tar 压缩成 test.tar.zst

zstd 解压

解压到当前路径

注意

这样解压出来的是 test.tar,还需要再使用 tar 解压一遍。

解压到指定路径

注意

这样解压出来的是 test.tar,还需要再使用 tar 解压一遍。

课后习题

  1. 使用 zip、tar、xz、7z、rar、zstd 等多种工具分别压缩和解压包含中文文件名的文件,对比各种工具的编码处理方式,分析不同压缩格式对国际化支持的设计差异。

  2. 尝试修改 zip 工具或使用其他补丁方案解决中文文件名乱码问题,验证修改后的效果。

  3. 使用不同压缩算法(gzip、bzip2、xz、zstd)压缩同一组文件,对比压缩率、压缩时间和解压时间,分析算法设计如何在压缩效率与性能之间做权衡。

最后更新于