歸檔與壓縮

出自 Arch Linux 中文维基

根據 Unix 哲學,歸檔與壓縮工具應當是分離的:

  • 歸檔工具將多個文件合併為一個歸檔文件,例如 tar
  • 壓縮工具壓縮和解壓縮數據,例如 gzip

這些工具通常按順序使用,首先創建一個歸檔文件,然後壓縮它。

當然,也有一些工具可以同時實現這兩個功能,它們往往還提供加密、錯誤檢測和恢復功能。

僅歸檔[編輯 | 編輯原始碼]

名稱 手冊 說明
GNU tar tar tar(1), info 用於處理無處不在的 tar 歸檔文件(tarball)的核心工具pacmanAUR 使用這些文件。
libarchive libarchive bsdtar(1)
bsdcpio(1)
tarcpio 的實現,同時也提供了一個庫。pacmanmkinitcpio 使用該庫。
ar binutils ar(1) tar 之前的傳統 Unix 歸檔程序。現在只用於創建靜態庫文件。
cpio cpio cpio(1) 通過 stdin/stdout 進行文件歸檔,支持 cpio 和 tar 格式。
DAR darAUR dar(1) 歸檔以備份大型活動文件系統,處理硬鏈接、擴展屬性、稀疏文件和 inode 類型。
提示:GNU 和 BSD tar 都自動為 bzip2、compress、gzip、lzip、lzma、lzop、zstd 和 xz 壓縮歸檔執行解壓縮。lz4 只有 BSD tar 支持(但是 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
lrzip英語lrzip lrzip lrzip(1) .lrz 改良版的 rzip,使用多種算法。 是多線程的
LZ4 lz4 lz4(1) .lz4 用 C 語言編寫,專注於壓縮和解壓縮速度。 可以是多線程的,儘管 lz4 不是。查看 https://lz4.github.io/lz4/ 獲取替代方案。
lzip lzip lzip(1) .lz 使用 LZMA. plzipAUR
lzop lzop lzop(1) .lzo .tzo 使用 LZO 庫(lzo).
xz xz xz(1) .xz, .lzma .txz, .tlz 使用 LZMA,GNU coreutils 和內核歸檔文件的默認值。 是多線程的, pixz, pxz-gitAUR
zstd zstd zstd(1) .zst 使用 Zstandard 算法。 是多線程的
  • 並行實現通過使用多個CPU核心提高速度。
  • Tar 擴展名是指使用tar和壓縮工具的壓縮歸檔,例如.tzo相當於.tar.lzo
  • 參見#僅壓縮用法

歸檔和壓縮[編輯 | 編輯原始碼]

名稱 手冊 擴展名 說明
p7zip p7zip 7z(1) .7z 7-zip命令行的第三方POSIX移植。
7-Zip 7-zipAUR, 7-zip-fullAUR - 一個高壓縮比的文件歸檔器的上游 Linux 版本。
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 ZIP LHa/LZH RAR compress CAB ARJ
gzip 部分1
p7zip
unarchiver 部分
  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
xz(1) xz file xz -d file.xz xzcat file.xz

歸檔和壓縮用法[編輯 | 編輯原始碼]

名稱 壓縮 解壓縮 解壓縮到 stdout 列出內容
7z(1) 7z a archive.7z file1 file2 7z x archive.7z 7z e -so archive.7z file1 7z l archive.7z
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 — 用 Java 寫得 Linux GUI 工具,嘗試簡化數據壓縮和備份。它可以創建 7z, BZip2, Zip, GZip, Tar 歸檔。
http://j7z.xavion.name/ || j7zAUR
  • unp — 命令行工具,可以輕鬆解包歸檔文件。
https://github.com/mitsuhiko/unp || python-unpAUR
  • unpack — 用於處理多種歸檔格式的包裝器腳本。
https://github.com/githaff/unpack || unpack-gitAUR
  • zutils — 用 C++ 編寫,包含 zcat(1)/zgrep(1)/zdiff(1),以像 bsdcat(1) 一樣透明地透明地處理壓縮和未壓縮文件的任何組合。支持 bzip2、gzip、lzip、xz和zstd。通常與常見(解)壓縮器的並行變體(如 pixz(1))結合使用。
https://www.nongnu.org/zutils/zutils.html || zutilsAUR

確定歸檔格式[編輯 | 編輯原始碼]

要提取歸檔,需要確定其文件格式。如果文件名正確,則可以從文件擴展名推斷其格式。

否則,您可以使用 file 工具,參見 file(1)

小眾、罕見或過時的工具[編輯 | 編輯原始碼]

名稱 擴展名
ARC arcAUR .arc, .ark 在撥號 BBS 的早期非常流行。被 ZIP 取代。
ARJ arj .arj 1990年代中期在 DOS/Windows 上使用的歸檔程序,源中包為一個開源克隆。
compress ncompress .Z 在 gzip 出現之前是 UNIX 壓縮工具的事實標準,因使用哈夫曼算法而成功。Man 頁面:pack(1)
PAR2 par2cmdline .par2 用於提高數據完整性的奇偶校驗歸檔程序。參見 Parchive英語Parchive
shar sharutils .shar 用於創建自提取歸檔。這些自提取歸檔是有效的 shell 腳本。
Zoo zooAUR .zoo 在 PKZIP 流行之前,在 OpenVMS 操作系統上流行。

文件系統壓縮[編輯 | 編輯原始碼]

有些文件系統支持動態壓縮文件數據:

  • 默認情況下,Btrfs可以配置為壓縮單個文件、目錄或整個卷。
  • ZFS上,可以在池或文件系統上啟用壓縮。

設備映射器壓縮[編輯 | 編輯原始碼]

目前正在將開源的 VDO 項目主線化(集成到 Linux 內核項目中),該項目為提高存儲效率提供了一個重複數據消除和壓縮設備映射器層。以下包可供選擇:

  • vdo — 用於管理 VDO 卷的用戶空間工具
https://github.com/dm-vdo/vdo || vdoAUR
  • kvdo — 兩個內核模塊,提供重複數據消除和/或壓縮塊存儲池
https://github.com/dm-vdo/kvdo || kvdo-dkmsAUR

壓縮庫[編輯 | 編輯原始碼]

  • 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 兼容算法。
https://github.com/google/zopfli || zopfli-gitAUR

故障排除[編輯 | 編輯原始碼]

日語文件名亂碼[編輯 | 編輯原始碼]

Windows 的日文版本使用 Shift-JIS 編碼 ZIP 歸檔。默認情況下,這些歸檔在解壓縮時會受到亂碼文件名的影響。要正確解壓縮,請在命令行中使用 shift-jis 選項解壓縮。

$ unzip -O shift-jis nihongo.zip

或者也可以使用社區提供的 unzip-natspecAUR 包。

參見[編輯 | 編輯原始碼]