阿旺的 Linux 開竅手冊

 基礎篇    進階篇    補腦篇    指令索引  


HY-STAR's  Ads IWS's Ads


版權所有, 引用請註明出處

 基礎篇

Chapter 9 : 檔案的壓縮/搜尋

9.0 介紹壓縮檔
9.1 常見的壓縮檔
       gz 檔
           gzip 壓縮/解壓縮 gz 檔
           gunzip 解壓縮 gz 檔
           zcat 讀取 gz 壓縮檔
       bz2 檔
           bzip2 壓縮/解壓縮 bz2 檔
           bunzip2 解壓縮 bz2 檔
           bzcat 讀取 bz2 壓縮檔
           bzip2recover 修復 bz2 壓縮檔
       xz 檔
           xz 壓縮/解壓縮 xz 檔
           unxz 解壓縮 xz 檔
           xzcat 讀取 xz 壓縮檔
       Z 檔
           compress 壓縮/解壓縮 Z 檔
           uncompress 解壓縮 Z 檔
       zip 檔
           zip 壓縮檔案成 zip 檔
           unzip 解壓縮 zip 檔
           zipinfo 列出 zip 檔資訊
9.2 檔案打包
       tar 檔
           tarball 壓縮的 tar 檔
           tar 打包/還原 tar 檔
           tar 炸彈





















檔案的壓縮


9.0 介紹壓縮檔
用壓縮檔的目地為減少資料的大小,就算不接觸 PC 事實上一般 user 也常常碰到壓縮檔,如 MP3 的音樂或手機數拍的相片等。但音樂的 MP3 或相片的 jpg 檔等多為〝有損壓縮〞(lossy compression),〝有損壓縮〞為將感官不易查覺的資訊捨棄,犧牲一些品質來大幅減少檔案的大小。但有些音響發燒友號稱有〝金耳朵〞可查覺 MP3 有損壓縮的失真而不屑聽 MP3 等數位音樂,同樣的許多專業的攝影也會要求不失真的 raw 檔。

但大部份資料是不容許有失真的,如你存進銀行 1000 元,總不允許變 900 元,因要求不可有任何失真,故此種壓縮稱為〝無損壓縮〞(lossless compression)。但無損壓縮因要求還原後 100% 保真,故壓縮率通常遠不如有損壓縮。

至於資料為什麼可以壓縮?舉例來說據說美國最長的地名為〝Chargoggagoggmanchauggagoggchaubunagungamaugg〞共 45 個字母。注意觀察的話會發現字母〝gg〞和〝ago〞重覆在許多地方。如想壓縮記錄此地名,我可用〝!〞代表〝gg〞用〝@〞代表〝ago〞而壓縮為〝Chargo!@!manchau!@!chaubunagungamau! 共 36 個字母就可。 user 應還可發明其他的規則可用更少的 byte 來儲存此一地名。

因要壓縮的資料規則不一,有些對文字檔的壓縮等特別有效率,有些對執行檔壓縮率較高。但對於已壓縮過的檔案不論是有損或無損的壓縮檔,強行再壓縮檔案反而可能會變大哦。也因不同的壓縮軟體對壓縮的演算法(algorithm)不一,才會有許多的壓縮軟體。


^ back on top ^



9.1 常見的壓縮檔

解鈴還需繫鈴人,用那一個軟體來壓縮就用那軟體來解壓縮,但我怎知檔案是用那種軟體來壓縮的呢?還好可根據其副檔名。一般來說 UNIX/Linux 的副檔名只供〝參考〞,例如全用 ASCII 組成的純文字檔, UNIX/Linux 不一定用〝.txt〞為副檔名,精確的判斷檔案的類型,通常用 file 指令。但UNIX/Linux 的壓縮檔卻非常倚重副檔名。

不同的壓縮指令所壓縮的檔案通常有其專屬的副檔名好讓 user 一眼便知是否為壓縮檔和那種壓縮檔。UNIX/Linux 中時常見的壓縮檔副檔名有〝.gz〞、〝.bz2〞、〝.zip〞、〝.Z〞、〝.xz〞等以自由軟體或開放源碼軟體為主流,一些有著作權疑慮的壓縮檔如〝.rar〞、〝.arj〞就盡量不用。

此外 UNIX/Linux 的世界還流行將檔案〝打包〞(Archive file),打包的目的為把許多的檔案或目錄包裝成單一檔案,好方便傳輸或保存;但打包本身並不具有壓縮的功能,為了減少體積大部分打包後的檔案會再壓縮。 最普遍的打包工具是 tar,故以〝.tar〞為副檔名,如經打包再壓縮的檔案稱 tarball,副檔名可能為〝.tgz〞、〝.tbz〞、〝.taz〞、〝.tzx 等。

gz 檔
〝.gz〞檔為 gzip 所壓縮的檔案,在 UNIX/Linux 系統中很常見。 bz2 檔
副檔名〝.bz2〞檔為 bzip2 所壓縮的檔案 ,bzip2gzip 的進階版.有更高的壓縮率而漸流行,且用法幾乎和 gzip 一樣外加有修復功能可視為 gzip 取代品(但無 gzip -r 遞回目錄選項,故如要連目錄一起壓縮一般做成 tarball)。

xz 檔
副檔名〝.xz〞檔為 xz 所壓縮的檔案,比 bzip2 有更高的壓縮率可視為 bzip2 取代品。


Z 檔
〝.Z〞檔為 compress 所壓縮的檔案,compress 是古董級的壓縮軟體,曾很流行,但以現今的眼光來看壓縮率不高而逐漸被淘汰。許多比較新的 Linux 發行版可能不再收錄 compress 了,萬一有〝.Z〞檔要解壓縮怎麼辦呢? 不用擔心,介紹過的 gzip 可解壓縮〝.Z〞檔。可能還有不少人還在用很古老的 UNIX/Linux,故還是有必要介紹正統的 compress 指令。 zip 檔
〝.zip〞是一跨平台的壓縮格式,不但在 UNIX/Linx 中常遇到,在 DOS/Windows 和蘋果的 MacOS 或早已安樂死的 IBM OS/2 中也常見。Microsoft Windows XP 以上版本的 Windows 還內建了 zip 的解壓縮功能, Andoird 手機的 App 安裝檔〝.apk〞骨子裡就是 zip 檔, zip 檔真是五湖四海。

〝.zip〞檔還有另一特色是 .gz.bz2.Z 等壓縮格式所沒有的,即〝.zip〞檔除了壓縮功能外還有打包(Archive file)的功能,也就是可把許多檔案(包含目錄)壓縮成一個檔案。



^ back on top ^




9.2 檔案打包

雖然跨平台的 zip 檔或 Windows 下流行的 rar 檔等目前主流的壓縮格式本身已直接支援壓縮和打包雙重功能,但正統的 UNIX/Linux 還是堅持一馬歸一馬,壓縮和打包是各自獨立的。好處是一看到檔名便知是那些檔案是壓縮檔或打包的檔案或是打包再壓縮的檔案 (tarball)。

tar 檔
〝.tar〞檔最初的目的為將多個檔案(可包含目錄)打包成一個檔案好方便備份到磁帶上,故稱〝tape archive〞即 tar 檔,tar 檔一般會用〝.tar〞作為副檔名。


^ back on top ^













[註73]在文字界面下輸入 echo $PATH 可查詢環境變數 PATH 在那些路徑下搜索執行檔。