跳转至内容

归档和压缩

来自 ArchWiki
(从 Extract 重定向而来)

传统的 Unix 归档和压缩工具遵循 Unix 哲学分开。

  • 一个 文件归档器将多个文件合并到一个归档文件中,例如 tar
  • 一个 压缩工具压缩和解压缩数据,例如 gzip

这些工具通常按顺序使用,首先创建一个归档文件,然后对其进行压缩。

当然也有 兼具两种功能的工具,它们通常还提供加密、错误检测和恢复功能。

仅归档

名称 软件包 (Package) 手册 描述
GNU tar tar tar(1), info 核心工具,用于处理普遍存在的 tar 归档文件(tarballs)。
libarchive libarchive bsdtar(1)
bsdcpio(1)
tarcpio 的实现,也提供了一个库。被 pacmanmkinitcpio 使用。
ar binutils ar(1) tar 之前的传统 Unix 归档器。如今仅用于创建 静态库文件。
GNU cpio cpio cpio(1)info 通过 stdin/stdout 进行文件归档,支持 cpio 和 tar 格式。
提示 GNU 和 BSD 的 tar 都会自动委托解压缩 bzip2、compress、gzip、lzip、lzma、lzop、zstd 和 xz 压缩的归档。只有 BSD tar 支持 lz4 原生(但 GNU tar 可以通过 --use-compress-program=lz4/-Ilz4 实现类似功能)。创建归档时,两者都支持 -a 开关,根据文件扩展名自动通过正确的压缩程序过滤创建的归档。BSD tar 根据格式识别压缩格式,而 GNU tar 则仅根据文件扩展名进行猜测。

另见 #仅归档用法

压缩工具

仅压缩

这些压缩程序实现自己的文件格式。

名称 软件包 (Package) 手动 扩展名 Tar 扩展名 描述 并行实现
bzip2 bzip2 bzip2(1) .bz2, .bz .tbz2, .tbz 使用 Burrows–Wheeler 算法 lbzip2, pbzip2
bzip3 bzip3 bzip3(1) .bz3 .tbz3 使用 Burrows–Wheeler 算法
gzip gzip gzip(1) .gz, .z .tgz, .taz GNU zip,基于 DEFLATE 算法。 pigz, bgzip(1) (包含在 htslibAUR 中), crabzAUR, python-rapidgzipAUR
lrzip lrzip lrzip(1) .lrz rzip 的改进版本,使用多种算法。 默认支持多线程
LZ4 lz4 lz4(1) .lz4 用 C 语言编写,专注于压缩和解压缩速度。 默认支持多线程。另请参见 https://lz4.org/ 以获取其他选项。
lzip lzip lzip(1) .lz 使用 LZMA plzipAUR
lzop lzop lzop(1) .lzo .tzo 使用 LZO 库 (lzo)。
xz xz xz(1) .xz, .lzma .txz, .tlz 使用 LZMA2。GNU coreutils 和内核归档文件的默认格式。 默认支持多线程。另一个选择是 pixz
zstd zstd zstd(1) .zst 使用 Zstandard 算法。 支持多线程
  • 并行实现通过使用多个 CPU 核心来提高速度。
  • Tar 扩展名指的是压缩归档,其中使用了 tar 和压缩工具,例如 .tzo.tar.lzo
  • 另见 #仅压缩用法

归档和压缩

名称 软件包 手册 扩展名 描述
7-Zip 7zip 官方手册 .7z 一个压缩率很高的文件归档器。
DAR darAUR dar(1) .dar 用于备份大型实时文件系统的归档器,能够处理硬链接、扩展属性、稀疏文件和 inode 类型。
GNU tar tar tar(1), info .tar.compression-type 支持将归档文件传递给 bzip2(1), xz(1), lzip(1), lzma(1), lzop(1), gzip(1), compress(1), zstd(1), 以及任何其他自定义压缩程序进行压缩。参见 tar(1) § 压缩选项
libarchive libarchive bsdtar(1) .tar.compression-type 内置了对 bzip2、gzip、lrzip、lzma、lzop、lz4、zstd 和 xz 的压缩选项。
RAR rarAUR, unrar rar(1) .rar 该格式和 rar 工具都是专有的。
t2sz t2szAUR .tar.zst .tzst 用 C 语言编写的 Tar 归档工具,具有成员对齐的 zstd 压缩功能。
tarlz tarlzAUR tarlz(1) .tar.lz .tlz 用 C++ 编写的 Tar 归档工具,具有成员对齐的 lzip 压缩功能。
ZIP zip, unzip zip(1), unzip(1) .zip 在 Linux 世界以外被广泛使用。
Unarchiver unarchiver unar(1), lsar(1) many Mac 应用程序的命令行工具,支持超过 40 种归档格式。
ZPAQ zpaqAUR zpaq(1) .zpaq 一个用 C++ 编写的高压缩率归档器,使用多种算法。
LHa lhasa, lhaAUR lha(1) .lzh (在 Amiga 上: .lha) LZH/LHA 归档器,支持 lh7 方法。
WinAce unace unace(1) .ace ACE 文件格式和归档工具都是专有的。

另见 #归档和压缩用法

功能图表

上面的一些工具能够处理多种格式,从而减少所需的已安装软件包数量。

解压缩

名称 文件 归档
gzip bzip2 LZMA xz zstd ZIP RAR 7z CAB
gzip 部分1
7zip
unarchiver
zstd
  1. gzipgunzip 只能解压缩单成员 ZIP 文件。

使用比较

仅归档用法

名称 创建归档 解压缩归档 列出内容
tar(1) tar cfv archive.tar file1 file2 tar xfv archive.tar tar -tvf archive.tar
cpio(1) ls file1 file2 | cpio -o > archive.cpio cpio -i -vd < archive.cpio cpio -t < archive.cpio

仅压缩用法

名称 压缩 解压缩 解压缩到 stdout
bzip2(1) bzip2 file bzip2 -d file.bz2 bzcat file.bz2
gzip(1) gzip file gzip -d file.gz zcat file.gz
lrzip(1) lrzip file
lrztar folder
lrzip -d file.lrz
lrztar -d folder.tar.lrz
lrzcat file.lrz
lz4(1) lz4 file lz4 file.lz4 lz4cat file.lz4
xz(1) xz file xz -d file.xz xzcat file.xz
zstd(1) zstd file zstd -d file.zst zstdcat file.zst

归档和压缩用法

名称 压缩 解压缩 解压缩到 stdout 列出内容
7z 7z a archive.7z file1 file2 7z x archive.7z 7z e -so archive.7z file1 7z l archive.7z
dar(1) dar -c archive -g file1 -g file2 dar -x archive dar -l archive
tar(1) tar acvf archive.format file1 file2 tar xfv archive.format tar xfvO archive.format tar tvf archive.format
rar(1) rar a archive.rar file1 file2 rar x archive.rar rar p -inul archive.rar file1 rar l archive.rar
zip(1), unzip(1) zip archive.zip file1 file2 unzip archive.zip unzip -p archive.zip file1 unzip -l archive.zip
lha(1) lha ao7 archive.lzh file1 file2 lha x archive.lzh 最小化: lha l archive.lzh 详细: lha v archive.lzh

便捷工具

另见 Bash/Functions#Extract

  • atool — 用于管理各种类型文件归档的脚本。
https://www.nongnu.org/atool/ || atool
  • dtrx — 一个智能的归档提取工具。
https://github.com/brettcs/dtrx || dtrxAUR
  • J7Z — Java 编写的 Linux GUI,旨在简化数据压缩和备份。它可以创建 7z、BZip2、Zip、GZip、Tar 归档。
https://sites.google.com/site/xavionsj7z || j7zAUR
  • ouch — 一个方便压缩和解压缩文件和目录的命令行实用程序。
https://github.com/ouch-org/ouch || ouch
  • patool — 允许创建、提取、测试、列出、比较、搜索和重新打包各种归档类型。
https://wummel.github.io/patool/ || patoolAUR
  • python-unp — 一个可以轻松解压归档文件的命令行工具。
https://github.com/mitsuhiko/unp || python-unpAUR
  • unp — 一个用于解压多种归档格式的脚本。
https://tracker.debian.org/pkg/unp || unp
  • unpack — 用于处理多种归档格式的包装脚本。
https://github.com/githaff/unpack || unpack-gitAUR

确定归档格式

要解压一个归档文件,需要先确定其文件格式。如果文件命名正确,你可以从文件扩展名推断出其格式。

否则,你可以使用 file 工具,请参阅 file(1)

冷门、稀有或已弃用的工具

名称 软件包 扩展名 描述
ARC arcAUR .arc, .ark 在拨号 BBS 的早期非常流行。已被 ZIP 取代。
ARJ arj .arj 90 年代中期在 DOS/Windows 上使用的归档器。这是一个开源的克隆。
Cabinet cabextract, unshield .cab, .exe Windows 中的各种安装技术都使用 CAB 格式。
compress ncompress .Z 在 gzip 出现之前,它是基于 Huffman 的 pack(1) 之后的事实上的标准 UNIX 压缩实用程序。
Inno Setup innoextract .exe 由 Inno Setup 创建的安装程序。
PAR2 par2cmdline .par2 用于提高数据完整性的校验和归档器。另见 Parchive
shar sharutils .shar 创建有效的 shell 脚本的自解压归档。
Zoo zooAUR .zoo 在 PKZIP 流行之前,主要在 OpenVMS 操作系统上流行。

文件系统压缩

一些 文件系统支持对文件数据进行即时压缩。

  • Btrfs 可以配置为默认压缩单个文件、目录或整个卷。
  • ZFS 上,可以在池或文件系统上启用压缩。

设备映射器压缩

开源 VDO 项目已集成到 Linux 内核项目中,该项目提供了一个重复数据删除和压缩的设备映射器层,以提高存储效率。AUR 中提供了用于管理 VDO 卷的用户空间工具:vdoAUR

压缩库

  • Brotli — 使用 LZ77 算法、霍夫曼编码和二阶上下文建模的数据流压缩算法。
https://github.com/google/brotli || brotli
  • libzip — 提供 ZIP 文件的创建和提取。KDE 和 Deepin 使用它来代替 zip/unzip 工具。
https://libzip.org || libzip
  • zlib — 实现 gzip 和 PKZIP 中使用的 deflate 压缩方法的压缩库。
https://www.zlib.net/ || zlib
  • Zopfli — 来自 Google 的高压缩率文件压缩器,使用一种称为 zopfli 的与 deflate 兼容的算法。也可在 pigz 中作为压缩级别 11 使用。
https://github.com/google/zopfli || zopfli-gitAUR

故障排除

解压缩时文件名乱码

请参阅 字符编码#故障排除

参见