Linux常見壓縮格式Tar、Zip和Gz格式之不同
Linux 中大家在下載文件時常見的壓縮文件有 .tar、.zip 或 .gz 等擴展名,大多數(shù)用戶都已經(jīng)見怪不怪了。那 Linux 中為什么要搞出這么多種壓縮格式,Tar、Zip 和 Gz 之間到底有什么區(qū)別與不同呢?本文系統(tǒng)極客就為大家一一道來。
Tar、Zip和Gz格式的不同
Tar、Zip 和 Gz 之間的不同用最為簡潔的描述來說可歸納為:
- tar 未壓縮的歸檔文件
- zip (通常)壓縮歸檔文件
- gz 使用gzip壓縮的文件(歸檔或不歸檔)
存檔文件的歷史
與 Unix 和類 Unix 系統(tǒng)一樣,故事開始于很久之前的七十年代。1979 年 1 月的一個清晨,Tar 實用程序***作為 Unix V7 的一部分正式面世。Tar 程序當時主要被設(shè)計為往磁帶上批量高效寫入文件的一種方式?,F(xiàn)在,雖然現(xiàn)在大多數(shù) Linux 用戶都已經(jīng)不知道磁帶驅(qū)動器是什么鬼了,但 tarballs(tar 的昵稱)仍被常用于將多個文件甚至整個目錄樹打包到單一文件當中。
需要 Linux/Unix 用戶注意的是,普通的 tar 格式文檔只進行歸檔操作而不進行壓縮。換句話說就是,如果你 tar 100 個 50kb 的文件得到的 tar 歸檔文件大小應該為 5000kb 左右。
使用 Tar 進行文件歸檔的唯一好處就是減少某種粒度磁盤空間的分配。(例如在簇大小為 4kb 的磁盤上 1 字節(jié)的文件也要占用 4kb 磁盤空間,若有 1000 個 1 字節(jié)的文件分散在此磁盤上的話,則會占用 4MB 大小,而使用 Tar 歸檔之后則只占用 1MB 左右大小。)
值得一提的是,tar 并非 Linux/Unix 中創(chuàng)建歸檔文件的唯一方式。程序員朋友應該知道 ar,它大多情況下主要用于創(chuàng)建靜態(tài)庫,實際它也是可用來創(chuàng)建其它種類歸檔的,例如 Debian 系統(tǒng)中使用的 .deb 包文件就是 ar 存檔。而 macOS 的 mpkg 包是使用 gzip 壓縮的 cpio 檔。不過 ar 和 cpio 用起來不像 Tar 這樣友好、簡單,所以 tar 的受歡迎程度更高,普及更廣。
雖然歸檔是種不錯的選擇,但隨著時間的推移和個人 PC 時代的到來,人們意識到可通過壓縮數(shù)據(jù)的方式來大量節(jié)省存儲成本。所以 10 年后隨 MS-DOS 出現(xiàn)的 zip 文檔便是支持壓縮的歸檔格式,zip 最常見的壓縮方式是采用 LZ77 算法實現(xiàn)的 deflate。由于它由 PKWARE 商業(yè)開發(fā),所以 zip 格式也受專利保護多年。因此,為不侵犯到 PKWARE 的專利,同樣采用 LZ77 算法的 gzip 格式被推出并廣泛使用。
Unix 的哲學就是把某事做到***,所以 gzip 只被設(shè)計為壓縮文件。因此,為了創(chuàng)建壓縮歸檔,必需先使用 tar 創(chuàng)建歸檔,之后再對歸檔文件進行壓縮,因此才有了 .tar.gz 文件(為遵循 8.3 MS-DOS 文件名稱限制,又被簡稱為.tgz)。
隨著技術(shù)的不斷發(fā)展,具有更高壓縮比的壓縮算法也一一被實現(xiàn),例如:在 bzip2 中實現(xiàn)的 Burrows-Wheeler 算法(.tar.bz2 存檔)和 LZMA 算法實現(xiàn)的 .xz 存檔。
現(xiàn)在,用戶已經(jīng)可以在 Linux 和 Windows 中自由使用任何歸檔文件格式。由于 zip 格式已經(jīng)被 Windows 操作系統(tǒng)原生支持,因此這種格式特別適合跨平臺環(huán)境。
Tar、Zip和Gz格式效率測試
下面我們所討論的是 Tar、Zip 和 Gz 文件格式壓縮、歸檔后的磁盤空間效率而不是時間效率,如下是對 100MB 流行格式文件的測試對比:
由于 jpg、mp3、mp4 已經(jīng)是壓縮封裝的文件,所以再打包壓縮的效果一定不會太好。