归档和压缩
外观
(从 Extract 重定向而来)
传统的 Unix 归档和压缩工具遵循 Unix 哲学分开。
这些工具通常按顺序使用,首先创建一个归档文件,然后对其进行压缩。
当然也有 兼具两种功能的工具,它们通常还提供加密、错误检测和恢复功能。
仅归档
| 名称 | 软件包 (Package) | 手册 | 描述 |
|---|---|---|---|
| GNU tar | tar | tar(1), info | 核心工具,用于处理普遍存在的 tar 归档文件(tarballs)。 |
| libarchive | libarchive | bsdtar(1) bsdcpio(1) |
tar 和 cpio 的实现,也提供了一个库。被 pacman 和 mkinitcpio 使用。 |
| 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 | 是 | 否 | 是 | 是 | 是 | 否 | 否 | 否 | 否 |
- gzip 的 gunzip 只能解压缩单成员 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 filelrztar folder |
lrzip -d file.lrzlrztar -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 |
便捷工具
- atool — 用于管理各种类型文件归档的脚本。
- dtrx — 一个智能的归档提取工具。
- J7Z — Java 编写的 Linux GUI,旨在简化数据压缩和备份。它可以创建 7z、BZip2、Zip、GZip、Tar 归档。
- ouch — 一个方便压缩和解压缩文件和目录的命令行实用程序。
- patool — 允许创建、提取、测试、列出、比较、搜索和重新打包各种归档类型。
- python-unp — 一个可以轻松解压归档文件的命令行工具。
- unp — 一个用于解压多种归档格式的脚本。
- unpack — 用于处理多种归档格式的包装脚本。
确定归档格式
要解压一个归档文件,需要先确定其文件格式。如果文件命名正确,你可以从文件扩展名推断出其格式。
冷门、稀有或已弃用的工具
| 名称 | 软件包 | 扩展名 | 描述 |
|---|---|---|---|
| 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 操作系统上流行。 |
文件系统压缩
一些 文件系统支持对文件数据进行即时压缩。
设备映射器压缩
开源 VDO 项目已集成到 Linux 内核项目中,该项目提供了一个重复数据删除和压缩的设备映射器层,以提高存储效率。AUR 中提供了用于管理 VDO 卷的用户空间工具:vdoAUR
压缩库
- Brotli — 使用 LZ77 算法、霍夫曼编码和二阶上下文建模的数据流压缩算法。
- libzip — 提供 ZIP 文件的创建和提取。KDE 和 Deepin 使用它来代替 zip/unzip 工具。
- zlib — 实现 gzip 和 PKZIP 中使用的 deflate 压缩方法的压缩库。
故障排除
解压缩时文件名乱码
请参阅 字符编码#故障排除。