壓縮的用途與技術: 您是否有過文件檔案太大,導致無法以一片軟碟將他復制完成的困擾?又,您是否有過,發現一個軟體裡面有好多檔案,這些檔案要將他復制與攜帶都很不方便的問題?還有,您是否有過要備份某些重要資料,偏偏這些資料量太大了,耗掉了你很多的
壓縮的用途與技術: 您是否有過文件檔案太大,導致無法以一片軟碟將他復制完成的困擾?又,您是否有過,發現一個軟體裡面有好多檔案,這些檔案要將他復制與攜帶都很不方便的問題?還有,您是否有過要備份某些重要資料,偏偏這些資料量太大了,耗掉了你很多的硬碟與磁碟空間呢?這個時候,那個好用的『檔案壓縮』技術可就派的上用場了!因為這些比較大型的檔案透過所謂的檔案壓縮技術之後,可以將他的磁碟使用量降低,可以達到減低檔案容量的效果,此外,有的壓縮程式還可以進行容量限制,使一個大型檔案可以分割成為數個小型檔案,以方便軟碟片攜帶呢!
那麼什麼是『檔案壓縮』呢?我們來稍微談一談他的原理好了。目前我們使用的電腦系統中都是使用所謂的 bytes 單位來計量的!不過,事實上,電腦最小的計量單位應該是 bits 才對啊,此外,我們也知道 1 byte = 8 bits 。但是如果今天我們只是記憶一個數字,亦即是 1 這個數字呢?他會如何記錄?假設一個 byte 可以看成底下的模樣:(注:由於 1 byte = 8 bits ,所以每個 byte 當中會有 8 個空格,而每個空格可以是 0, 1 ,這裡僅是做為一個約略的介紹,讀者不必刻意記憶 )
□□□□□□□□
而由於我們記錄數字是 1 ,考慮電腦所謂的二進位喔,如此一來, 1 會在最右邊占據 1 個 bit ,而其他的 7 個 bits 將會自動的被填上 0 啰!你看看,其實在這樣的例子中,那 7 個 bits 應該是『空的』才對!不過,為了要滿足目前我們的作業系統資料的存取,所以就會將該資料轉為 byte 的型態來記錄了!而一些聰明的電腦工程師就利用一些復雜的計算方式,將這些沒有使用到的空間『丟』出來,以讓檔案占用的空間變小!這就是壓縮的技術啦!簡單的說,你可以將他想成,其實檔案裡面有相當多的『空間』存在,並不是完全填滿的,而『壓縮』的技術就是將這些『空間』填滿,以讓整個檔案占用的容量下降!不過,這些『壓縮過的檔案』並無法直接被我們的作業系統所使用的,因此,若要使用這些被壓縮過的檔案資料,則必須將他『還原』回來未壓縮前的模樣,那就是所謂的『解壓縮』啰!而至於壓縮前與壓縮後的檔案所占用的磁碟空間大小,就可以被稱為是『壓縮比』啰!更多的技術文件或許你可以參考一下" target=_blank>
GNU 計畫當中關於壓縮指令 gzip 的說明文件 。當然,我 這裡 也保留一份資料,做為未來參考之用呢!
這個『壓縮』與『解壓縮』的動作有什麼好處呢?最大的好處就是壓縮過的檔案容量變小了,所以你的硬碟容量無形之中就可以容納更多的資料,此外,在一些網路資料的傳輸中,也會由於資料量的降低,好讓網路頻寬可以用來作更多的工作!而不是老是卡在一些大型的檔案上面呢!目前很多的 WWW 網站也是利用檔案壓縮的技術來進行資料的傳送,好讓網站的可利用率上升喔!( 注:這種技術蠻有趣的!他讓您網站上面『看的到的資料』在經過網路傳輸時,使用的是『壓縮過的資料』,等到這些壓縮過的資料到達你的電腦主機時,再進行解壓縮,由於目前的電腦運算速度相當的快速,因此其實在http://edu.itbulo.com/tools/ll/'>網頁浏覽的時候,時間都是花在『資料的傳輸』上面,而不是 CPU 的運算啦!,如此一來,由於壓縮過的資料量降低了,自然傳送的速度就會增快不少! )若您是一位軟體工程師,那麼相信您也會喜歡將你自己的軟體壓縮之後提供大家
下載來使用,畢竟沒有人喜歡自己的網站天天都是頻寬滿載的吧?!舉個例子來說, Linux 2.4.19 完整的核心大小約有 200 MB 左右,而由於核心主要多是 ASCII code 的存文字型態檔案,這種檔案的『多余空間』最多了。而一個提供下載的壓縮過的 2.4.19 核心大約僅有 30MB 左右,差了幾倍呢?您可以自己算一算喔!
Linux 壓縮檔案的附檔名 如果您常常在網路上面捉 Linux 的資料下來玩的話,大概會曉得的是,這些供人下載的檔案通常都是『壓縮』過的!為了什麼?上面已經稍微提過啦!呵呵!壓縮過的檔案具有節省頻寬、節省磁碟空間等等的優點,並且還方便攜帶呢! ^_^ !而,您應該也會知道,這些被壓縮過的檔案,通常其附檔名都是『 *.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2 』等等的,為什麼要訂定這些壓縮檔案附檔名為這樣的模樣呢?這是因為在 Linux 上面壓縮的指令相當的多,並且,這些壓縮指令可能無法針對每種壓縮檔案都可以解的開,畢竟目前的壓縮技術五花八門,每種壓縮計算的方法都不是完全相同的,所以啰,當你捉到某個壓縮檔時,自然就需要知道壓縮他的是那個指令啦,好用來對照著解壓縮啊! ^_^!也就是說,雖然 Linux 檔案的屬性基本上是與檔名沒有絕對關系的,能不能執行與他的檔案屬性有關而已,與檔名的關系很小!但是,為了幫助我們小小的人類腦袋瓜子,所以適當的檔案名稱附檔名還是必要的!因此,目前就有一些常常見到的壓縮檔案的附檔名啦!我們僅列出常見的幾樣在底下,給大家權做參考之用:
· *.Z compress 程式壓縮的檔案;
· *.bz2 bzip2 程式壓縮的檔案;
· *.gz gzip 程式壓縮的檔案;
· *.tar tar 程式打包的資料,並沒有壓縮過;
· *.tar.gz tar 程式打包的檔案,其中並且經過 gzip 的壓縮!
目前常見的壓縮程式主要就是如同上面提到的附檔名對應的那些指令啦!最早期的要算是 compress 這個家伙了,而後,後來的 GNU 計畫
開發出新一代的壓縮指令 gzip ( GNU zip ) 用來取代 compress 這個老牌的壓縮指令,再來還有 bzip2 這個壓縮比更好的壓縮指令呢!不過,這些指令通常僅能針對一個檔案來壓縮與解壓縮,如此一來,每次壓縮與解壓縮都要一大堆檔案,豈不煩人?,此時,那個所謂的『打包軟體』就顯的很重要啦!在
Unix-Like 當中,有個軟體很好玩,他就是 tar 這支程式!這個 tar 可以將很多檔案『打包』成為一個檔案!甚至是目錄也可以這麼玩。不過,單純的 tar 功能僅是『打包』而已,亦即是將很多檔案集結成為一個檔案,事實上,他並沒有提供壓縮的功能,後來, GNU 計畫中,將整個 tar 與壓縮的功能結合在一起,如此一來提供使用者更方便並且更強大的壓縮與打包功能!
底下我們就來談一談這些在 Linux 底下基本的壓縮指令吧!
· compress:
語法:
[root @test /root ]# compress [-d] filename 參數說明: -d :解壓縮的參數! 范例: 先 copy /etc/man.config 到 root 底下,再將他壓縮看看 [root @test /root]# cp /etc/man.config /root [root @test /root]# compress man.config [root @test /root]# compress -d man.config.Z [root @test /root]# uncompress man.config.Z
·這是用來壓縮與解壓縮附檔名為 *.Z 的指令!所以看到 *.Z 的檔案時,就應該要知道他是經由 compress 這個程式壓縮的呦!這是最簡單的壓縮指令啰!不過,使用的時候需要特別留意的是,當你以 compress 壓縮之後,如果沒有下達其他的參數,那麼原本的檔案就會被後來的 *.Z 所取代!以上面的案例來說明:原本壓縮的檔案為 man.config ,那麼當壓縮完成之後,將只會剩下 man.config.Z 這個經過壓縮的檔案啰!那麼解壓縮呢?呵呵,則是將 man.config.Z 解壓縮成 man.config !使用上很簡單啦!解壓縮除了可以使用 compress –d 這個參數之外,也可以直接使用 uncompress !意思相同啦!
·
·gzip, zcat:
語法:
[root @test /root ]# gzip [-d#] filename <==壓縮與解壓縮 [root @test /root ]# zcat filename.gz <==讀取壓縮檔內容 參數說明: -d :解壓縮的參數! -# :壓縮等級, 1 最不好, 9 最好, 6 是預設值! 范例: [root @test /root]# gzip man.config 會產生 man.config.gz 這個檔案 [root @test /root]# zcat man.config.gz 會讀取出 man.config 的內容 [root @test /root]# gzip -d man.config.gz [root @test /root]# gunzip man.config.gz 解壓縮,產生 man.config 這個檔案 [root @test /root]# gzip -9 man.config 以最大壓縮比壓縮 testing 這個檔案!
·gzip 是用來壓縮與解壓縮附檔名為 *.gz 的指令!所以看到 *.gz 的檔案時,就應該要知道他是經由 gzip 這個程式壓縮的呦!另外, gzip 也提供 壓縮比的服務! -1 是最差的壓縮比,但是壓縮速度最快,而 -9 雖然可以達到較佳的壓縮比(經過壓縮之後,檔案比較小一些!),但是卻會損失一些速度!預設是 -6 這個數值! gzip 也是相當常使用的一個壓縮指令呢!至於 zcat 則是用來讀取壓縮檔資料內容的指令!假如我們剛剛壓縮的檔案是一個文字檔,那麼你還記得如何讀取文字檔嗎?!沒錯!就是使用 cat ,那麼讀取壓縮檔呢?呵呵!就是使用 zcat 啰!由於 gzip 這個壓縮指令主要想要用來取代 compress 的,所以 compress 的壓縮檔案也可以使用 gzip 來解開喔!同時, zcat 這個指令可以同時讀取 compress 與 gzip 的壓縮檔呦!
·
· bzip2, bzcat:
語法:
[root @test root]# bzip2 [-dz] filename <==壓縮解壓縮指令 [root @test root]# bzcat filename.bz2 <==讀取壓縮檔內容指令 參數說明: -d :解壓縮的意思! -z :壓縮的意思!范例: 同樣的,我們以剛剛拷貝過來的 /root/man.config 這個檔案為例 [root @test root]# bzip2 –z man.config [root @test root]# bzcat man.config.bz2 [root @test root]# bzip2 –d man.config.bz2 [root @test root]# bunzip2 man.config.bz2
·剛剛的 compress 附檔名自動建立為 .Z ,這裡的 bzip2 則是自動的將附檔名建置為 .bz2 啰!所以當我們使用具有壓縮功能的 bzip2 –z 時,那麼剛剛的 man.config 就會自動的變成了 man.config.bz2 這個檔名啰!好了,那麼如果我想要讀取這個檔案的內容呢?是否一定要解開?當然不需要啰!可以使用簡便的 bzcat 這個指令來讀取內容即可!例如上面的例子中,我們可以使用 bzcat man.config.bz2 來讀取資料而不需要解開!此外,當您要解開一個壓縮檔時,這個檔案的名稱為 .bz, .bz2, .tbz, .tbz2 等等,那麼就可以嘗試使用 bzip2 來解看看啦!當然啰,也可以使用 bunzip2 這個指令來取代 bzip2 –d 啰
·
·tar:
語法:
[root @test /root ]# tar [-zxcvfpP] filename [root @test /root ]# tar -N 'yyyy/mm/dd' /path -zcvf target.tar.gz source 參數說明: -z :是否