首頁 > 軟體

Linux常見壓縮格式Tar、Zip和Gz格式之不同

2020-06-16 17:21:49

Linux 中大家在下載檔案時常見的壓縮檔案有 .tar.zip.gz 等擴充套件名,大多數使用者都已經見怪不怪了。那 Linux 中為什麼要搞出這麼多種壓縮格式,Tar、Zip 和 Gz 之間到底有什麼區別與不同呢?本文系統極客就為大家一一道來。

Tar、Zip和Gz格式的不同

Tar、Zip 和 Gz 之間的不同用最為簡潔的描述來說可歸納為:

  • .tar 未壓縮的歸檔檔案
  • .zip (通常)壓縮歸檔檔案
  • .gz 使用gzip壓縮的檔案(歸檔或不歸檔)

存檔檔案的歷史

與 Unix 和類 Unix 系統一樣,故事開始於很久之前的七十年代。1979 年 1 月的一個清晨,Tar 實用程式首次作為 Unix V7 的一部分正式面世。Tar 程式當時主要被設計為往磁帶上批次高效寫入檔案的一種方式。現在,雖然現在大多數 Linux 使用者都已經不知道磁帶驅動器是什麼鬼了,但 tarballs(tar 的暱稱)仍被常用於將多個檔案甚至整個目錄樹打包到單一檔案當中。

需要 Linux/Unix 使用者注意的是,普通的 tar 格式文件只進行歸檔操作而不進行壓縮。換句話說就是,如果你 tar 100 個 50kb 的檔案得到的 tar 歸檔檔案大小應該為 5000kb 左右。

使用 Tar 進行檔案歸檔的唯一好處就是減少某種粒度磁碟空間的分配。(例如在簇大小為 4kb 的磁碟上 1 位元組的檔案也要佔用 4kb 磁碟空間,若有 1000 個 1 位元組的檔案分散在此磁碟上的話,則會占用 4MB 大小,而使用 Tar 歸檔之後則只佔用 1MB 左右大小。)

值得一提的是,tar 並非 Linux/Unix 中建立歸檔檔案的唯一方式。程式設計師朋友應該知道 ar,它大多情況下主要用於建立靜態庫,實際它也是可用來建立其它種類歸檔的,例如 Debian 系統中使用的 .deb 包檔案就是 ar 存檔。而 macOS 的 mpkg 包是使用 gzip 壓縮的 cpio 檔。不過 ar 和 cpio 用起來不像 Tar 這樣友好、簡單,所以 tar 的受歡迎程度更高,普及更廣。

雖然歸檔是種不錯的選擇,但隨著時間的推移和個人 PC 時代的到來,人們意識到可通過壓縮資料的方式來大量節省儲存成本。所以 10 年後隨 MS-DOS 出現的 zip 文件便是支援壓縮的歸檔格式,zip 最常見的壓縮方式是採用 LZ77 演算法實現的 deflate。由於它由 PKWARE 商業開發,所以 zip 格式也受專利保護多年。因此,為不侵犯到 PKWARE 的專利,同樣採用 LZ77 演算法的 gzip 格式被推出並廣泛使用。

Unix 的哲學就是把某事做到最好,所以 gzip 只被設計為壓縮檔案。因此,為了建立壓縮歸檔,必需先使用 tar 建立歸檔,之後再對歸檔檔案進行壓縮,因此才有了 .tar.gz 檔案(為遵循 8.3 MS-DOS 檔名稱限制,又被簡稱為 .tgz)。

隨著技術的不斷發展,具有更高壓縮比的壓縮演算法也一一被實現,例如:在 bzip2 中實現的 Burrows-Wheeler 演算法.tar.bz2 存檔)和 LZMA 演算法實現的 .xz 存檔。

現在,使用者已經可以在 Linux 和 Windows 中自由使用任何歸檔檔案格式。由於 zip 格式已經被 Windows 作業系統原生支援,因此這種格式特別適合跨平台環境。

Tar、Zip和Gz格式效率測試

下面我們所討論的是 Tar、Zip 和 Gz 檔案格式壓縮、歸檔後的磁碟空間效率而不是時間效率,如下是對 100MB 流行格式檔案的測試對比:

檔案型別 .jpg .mp3 .mp4 .odt .png .txt
檔案數 2163 45 279 2990 2072 4397
磁碟佔用 98M 99M 99M 98M 98M 98M
tar 94M 99M 98M 93M 92M 89M
zip (不壓縮) 92M 99M 98M 91M 91M 86M
zip (deflate) 87M 98M 93M 85M 77M 28M
tar + gzip 86M 98M 93M 82M 77M 27M
tar + bz2 87M 98M 93M 42M 71M 22M
tar + xz 70M 98M 22M 348K 51M 19M

由於 jpg、mp3、mp4 已經是壓縮封裝的檔案,所以再打包壓縮的效果一定不會太好。

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-02/140397.htm


IT145.com E-mail:sddin#qq.com