歸檔與壓縮
根據 Unix 哲學,歸檔與壓縮工具應當是分離的:
這些工具通常按順序使用,首先創建一個歸檔文件,然後壓縮它。
當然,也有一些工具可以同時實現這兩個功能,它們往往還提供加密、錯誤檢測和恢復功能。
僅歸檔[編輯 | 編輯原始碼]
名稱 | 包 | 手冊 | 說明 |
---|---|---|---|
GNU tar | tar包 | tar(1), info | 用於處理無處不在的 tar 歸檔文件(tarball)的核心工具,pacman 和 AUR 使用這些文件。 |
libarchive | libarchive包 | bsdtar(1) bsdcpio(1) |
tar 和 cpio 的實現,同時也提供了一個庫。pacman 和 mkinitcpio 使用該庫。 |
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(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包 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 部分 |
- 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 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 — 用於管理各種類型的文件歸檔的腳本。
- dtrx — 一個智能歸檔提取工具。
- J7Z — 用 Java 寫得 Linux GUI 工具,嘗試簡化數據壓縮和備份。它可以創建 7z, BZip2, Zip, GZip, Tar 歸檔。
- http://j7z.xavion.name/ || j7zAUR
- unp — 命令行工具,可以輕鬆解包歸檔文件。
- unpack — 用於處理多種歸檔格式的包裝器腳本。
- zutils — 用 C++ 編寫,包含 zcat(1)/zgrep(1)/zdiff(1),以像 bsdcat(1) 一樣透明地透明地處理壓縮和未壓縮文件的任何組合。支持 bzip2、gzip、lzip、xz和zstd。通常與常見(解)壓縮器的並行變體(如 pixz(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。 |
shar | sharutils包 | .shar | 用於創建自提取歸檔。這些自提取歸檔是有效的 shell 腳本。 |
Zoo | zooAUR | .zoo | 在 PKZIP 流行之前,在 OpenVMS 作業系統上流行。 |
文件系統壓縮[編輯 | 編輯原始碼]
有些文件系統支持動態壓縮文件數據:
設備映射器壓縮[編輯 | 編輯原始碼]
目前正在將開源的 VDO 項目主線化(集成到 Linux 內核項目中),該項目為提高存儲效率提供了一個重複數據消除和壓縮設備映射器層。以下包可供選擇:
- vdo — 用於管理 VDO 卷的用戶空間工具
- kvdo — 兩個內核模塊,提供重複數據消除和/或壓縮塊存儲池
壓縮庫[編輯 | 編輯原始碼]
- Brotli — 使用LZ77算法、霍夫曼編碼和二階上下文建模的數據流壓縮算法。
- libzip — 提供ZIP文件的創建和提取。由 KDE 和 Deepin 代替 zip/unzip 工具使用。
- zlib — 壓縮庫中實現了 gzip 和 PKZIP 中的 deflate 壓縮方法。
- Zopfli — Google 提供的高壓縮比文件壓縮器,使用了一種名為 zopfli 的 deflate 兼容算法。
故障排除[編輯 | 編輯原始碼]
日語文件名亂碼[編輯 | 編輯原始碼]
Windows 的日文版本使用 Shift-JIS 編碼 ZIP 歸檔。默認情況下,這些歸檔在解壓縮時會受到亂碼文件名的影響。要正確解壓縮,請在命令行中使用 shift-jis 選項解壓縮。
$ unzip -O shift-jis nihongo.zip
或者也可以使用社區提供的 unzip-natspecAUR 包。