归档与压缩

来自 ArchWiki
(重定向自 Archiver

传统的 Unix 归档和压缩工具根据 Unix 哲学 分离

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

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

当然,也有 兼具两者功能的工具,这些工具往往还额外提供加密、错误检测和恢复功能。

仅归档

名称 软件包 手册 描述
GNU tar tar tar(1), info 用于操作无处不在的 tar 归档文件(tarball)的核心实用程序
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 仅根据文件扩展名猜测。

另请参阅 #仅归档用法

压缩工具

仅压缩

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

名称 软件包 手册 扩展名 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 类型。
tar tar tar(1), info .tar.压缩类型 tar 具有内置的压缩选项。请参阅 tar(1) § Compression_options
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

仅压缩用法

名称 压缩 解压缩 解压缩到标准输出
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

归档与压缩用法

名称 压缩 解压缩 解压缩到标准输出 列出内容
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

便捷工具

  • atool — 用于管理各种类型的归档文件的脚本。
https://www.nongnu.org/atool/ || atool
  • dtrx — 一种智能归档提取工具。
https://github.com/brettcs/dtrx || dtrxAUR
  • J7Z — Linux 下的 Java GUI,旨在简化数据压缩和备份。它可以创建 7z、BZip2、Zip、GZip、Tar 归档文件。
http://j7z.xavion.name || j7zAUR
  • ouch — 一种命令行实用程序,用于轻松压缩和解压缩文件和目录
https://github.com/ouch-org/ouch || ouch
  • 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
  • patool — 允许创建、提取、测试、列出、比较、搜索和重新打包各种归档类型。
https://wummel.github.io/patool/ || patoolAUR

确定归档格式

要提取归档文件,需要确定其文件格式。如果文件命名正确,您可以从文件扩展名推断其格式。

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

深奥、罕见或已弃用的工具

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

文件系统压缩

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

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

设备映射器压缩

本文或章节已过时。

原因: kvdo 已从 AUR 中删除,因为它已在上游内核 6.9 中实现。(在 Talk:Archiving and compression 中讨论)

正在进行将开源 VDO 项目(在 Linux 内核项目中集成)到主线的工作,该项目在提高存储效率方面提供了重复数据删除和压缩设备映射器层。以下软件包可用

  • vdo — 用于管理 VDO 卷的用户空间工具
https://github.com/dm-vdo/vdo || vdoAUR
  • kvdo — 一对内核模块,提供重复数据删除和/或压缩块存储池
https://github.com/dm-vdo/kvdo || kvdo-dkmsAUR[broken link: package not found]

压缩库

  • Brotli — 使用 LZ77 算法、Huffman 编码和二阶上下文建模的数据流压缩算法。
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 兼容算法。
https://github.com/google/zopfli || zopfli-gitAUR

故障排除

解压时文件名乱码

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

参见