2021-05-12 14:32:11
Linux常見壓縮格式Tar、Zip和Gz格式之不同
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
相關文章