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