Linux 中最佳的壓縮格式:為什麼 bzip2 會被 xz 取代?那 gzip 又如何?

這裡討論為什麼 bzip2 壓縮格式會漸漸被 xz 取代?那 gzip 又如何?

在 UNIX/Linux 社群中,傳統上如果要壓縮檔案通常都是使用 tar 加上 gzip 的壓縮方式,而後來 gzip 漸漸被 bzip2 所取代,而現在有越來越多人改用以 LZMA2 為基礎的 xz 來壓縮 tar 檔,連 kernel.org 也從 2013 年的年底開始,同時採用 tar.gztar.xz 兩種壓縮格式釋出 Linux 核心原始碼,而位於首頁的超連結則是直接使用 tar.xz 這個格式,以往的 tar.bz2 則是直接被捨棄。


放在網路上提供大家下載的資料,在選擇壓縮格式的時候,通常都會考慮以下幾點因素:

  • 壓縮率(compression ratio),也就是能夠將檔案壓到多小。
  • 解壓縮所需要的時間,也就是需要的 CPU 計算量。
  • 解壓縮所需要的記憶體空間。
  • 相容性(compatibility),亦即解壓縮程式的普遍性,是不是大部分人都可以有辦法解壓縮這種格式?

解壓縮所需要的時間與記憶體空間通常不是重點,因為使用者可以選擇比較好的電腦來解壓縮,而且解壓縮的動作只需要一次,就算解壓縮的過程比較慢一些,通常也都是在可接受的範圍之內。

剩下的就是壓縮率以及相容性的問題,傳統上的 gzip 無庸置疑是相容性最好的壓縮格式,現在應該每一種 UNIX/Linux 系統都可以解壓縮這種格式,所以如果若要確保每一位使用者都可以解壓縮,gzip 是首選。

而在壓縮率上,最新的 tar.xz 壓縮率是最好的,不過它跟 tar.bz2 比較起來,雖然 CPU 用的比較少,不過卻需要較大的記憶體空間 (當然需要的記憶體跟壓縮的參數會有相關,壓縮率設定比較高時,所需要的記憶體也會比較多),而且普及率也比較低。

如果要看詳盡的壓縮格式測試報告,可以參考 Quick Benchmark

基於以上的原因,我們會有以下的結論:

  • 需要在記憶體很小的機器(如小於 128 MB)上解壓縮時,則選擇 gzip 格式。
  • 需要在很簡單、沒有什麼工具可用的機器上解壓縮時,則選擇 gzip 格式。
  • 需要節省網路頻寬、縮短下載所需要的時間時,則選擇 xz 格式。

由於在這幾種狀況下,bzip2 通常都不是首選,所以後來 bzip2 就被淘汰了。

以下是三種壓縮格式的指令,給大家參考。

tar.gz

壓縮 tar.gz

tar zcvf file_name.tar.gz dir_name

解壓縮 tar.gz

tar zxvf file_name.tar.gz

tar.bz2

壓縮 tar.bz2

tar jcvf file_name.tar.bz2 dir_name

解壓縮 tar.bz2

tar jxvf file_name.tar.bz2

tar.xz

壓縮 tar.xz

tar Jcvf file_name.tar.xz dir_name

解壓縮 tar.xz

tar Jxvf file_name.tar.xz

參考資料:Stack Exchange

Linux

1 Comment

  1. 学习了,谢谢分享

Leave a Reply