15.1 gzip
gzip(1) 是GNU的壓縮程序。它只對單個文件進行壓縮?;居梅ㄈ缦拢?br>$ gzip filename
程序執(zhí)行以后,文件名會變成filename.gz,而且一般情況下大小會比原文件要小。注意,程序并不新建一個新的文件filename.gz,而是將filename變成filename.gz。一般來說,文本文件壓縮率會比較高。而那些jpeg圖像,mp3等類似文件的壓縮率就沒有那么好了,因為它們本來就已經被壓縮過了的。這個基本用法考慮了壓縮時間和壓縮后文件尺寸的平衡問題(譯者注:如果要使壓縮后的文件更小,就需要用到更多的時間)。要得到最小文件大?。ㄗ畲髩嚎s),可以使用如下用法:
$ gzip -9 filename
這樣就可以得到gzip能夠壓縮的最小文件尺寸,但是需要更長的壓縮時間。上面的數(shù)字越小,壓縮就越快,相反壓縮率也就越小。
將gzip壓縮的文件解壓縮,有兩個命令可以使用,但實際上它們是同一個程序。只要壓縮文件的后綴名被gzip程序認到,它就可以解壓縮。后綴名可以是:.gz, -gz, .z, -z, .Z 和 ?Z??梢允褂玫牡谝粋€命令是:
$ gunzip filename.gz
使用上面的命令后,filename.gz會被解壓縮并去掉后綴名.gz變成filename。gunzip實際上是gzip程序的一部分,它跟gzip ?d 這個命令有等同效果。但是我們使用的時候,經常使用gunzip, 因為這個用法似乎更酷些。: ^)
15.2 bzip2
bzip2(1)是 Slackware Linux里面壓縮程序的另一個選擇。它的壓縮算法不同于gzip。與gzip相比有其優(yōu)點,也有一些缺點。bzip2的主要優(yōu)點在于它壓縮后文件的尺寸,對于相同文件,bzip2壓縮后的尺寸幾乎總是小于gzip的壓縮結果。有些時候,這個差距會相當大。這個優(yōu)點對于使用小貓下載文件的用戶來說表現(xiàn)得尤為突出。需要提醒的是,當在一些公共ftp服務器上下載文件時,在.gz和.bz2文件中盡量選擇.bz2文件是一種基本的網絡禮節(jié),因為這樣可以減少服務器的負擔以給更多人服務。
bzip2的缺點在于,它占用的CPU的使用率會比gzip更多。這就是說,壓縮同一個文件,bzip2要比gzip使用更長的時間,占用更多的CPU資源。所以,當你在兩者之中考慮選用哪種壓縮程序的時候,需要衡量的是速度和壓縮后的文件尺寸哪個對你來說更重要些。
bzip2的使用方法和gzip是一樣的,所以我們不再花時間討論了。像gunzip一樣,bunzip2的效果等同于bzip2?d。與gzip最大的不同是bzip2使用后綴名.bz2.
$ bzip2 filename
$ bunzip2 filename.bz2
$ gunzip -9 filename
15.3 tar
tar(1)是一個GNU的磁帶歸檔程序。它可以將幾個文件或者目錄打包壓縮成一個文件。這個特點讓我們可以壓縮整個目錄樹,而單使用gzip和bzip2是無法做到的。tar有很多命令行參數(shù),你可以在手冊頁找到它們。在這一節(jié)里,我們只是討論一下那些經常用到的tar的用法。
tar 最常用的用法是將我們從網站或者ftp上下載的文件解壓縮然后在解包。a.tar.gz是我們經??吹降奈募袷?,這就是我們通常說的“tarball”,它是先把一些文件用tar打包,然后在用gzip壓縮。你也有可能會看到名為a.tar.Z的文件,這也是同樣的做法,但是你一般只會在比較老的Unix 系統(tǒng)里面遇到。
另外,你也會在另外一些地方看到如a.tar.bz2這樣文件。Kernel源文件就是用這種格式發(fā)布的,為的是可以讓文件更小,便于下載。你可能已經猜到,它就是先將一些文件用tar打包,然后再用bzip2壓縮。
我們可以將上述格式的文件用tar加一些命令行參數(shù)進行解包。-z參數(shù)表示在首先運行gunzip將文件解壓縮。將一個tarball解包的最常用的用法是:
$ tar -xvzf filename.tar.gz
這里有不少的參數(shù),那么它們各自有什么意思呢?
-x表示提取文件。這是一個非常重要的參數(shù),因為它告訴tar對輸入的文件具體怎么處理。在這里,我們要將打包的文件分離還原成打包前的狀態(tài)。
-v表示詳述。加入這個參數(shù)讓程序將解包出來的每一個文件列出來。如果覺得列出來太煩了,你完全可以把這個參數(shù)去掉來關閉這個功能。相反,如果你需要每個解包文件更詳細的信息,則可以使用-vv參數(shù)。
-z是告訴tar先運行gunzip將文件解壓縮。
-f是告訴tar在命令行輸入的下一個串字符是需要處理的文件。
上面這個命令也可以用一些其他形式的寫法。在比較老的系統(tǒng)里面由于缺少新版本的GNU tar程序,你可能會看到它是寫成這樣的:
$ gunzip filename.tar.gz | tar -xvf -
這行命令先把文件解壓縮,然后把解壓的文件對輸出到tar程序。gzip可以把其處理完的數(shù)據(jù)輸?shù)綐藴瘦敵?。這里就是把gzip解壓縮的文件作為標準輸出,然后由管道把文件送到tar程序進行解包。最后的 “-”表示處理標準輸入。它將解包后的文件寫入磁盤。
還有一種寫法是將第一種命令格式的短劃線去掉,像這樣:
$ tar xvzf filename.tar.gz
你也可能會碰到bzip2壓縮的打包文件。在Slackware Linux所帶的tar程序版本可以像gzip壓縮的打包文件一樣,只是要把參數(shù)-z用-j代替:
$ tar -xvjf filename.tar.bz2
這里需要注意的是,tar會把解包的文件放到當前目錄。所以如果要把一個放在/tmp目錄文件解壓縮到你的家目錄的話,這里有一些做法可供選擇:
選擇一,把文件拷貝到家目錄,然后解包
選擇二,指定需要解包文件的路徑
選擇三,用-C 參數(shù)指定解包后存放文件的路徑
$ cd $HOME
$ cp /tmp/filename.tar.gz
$ tar -xvzf filename.tar.gz
$ cd $HOME
$ tar -xvzf /tmp/finename.tar.gz
$ cd /
$ tar -xvzf /tmp/filename.tar.gz -C $HOME
上面所有的命令都是等效的。每一種做法都是把文件解包到你的家目錄,源文件則留在原來的地方。
上面講了那么多用tar解包的命令,現(xiàn)在讓我們來看看tar是如何來打包的吧。
在大多數(shù)情況下,只需要用參數(shù)”-c”代替參數(shù)”-x”就可以了:
$ tar -cvzf filename.tar.gz .
在這行命令里面,參數(shù)-c是告訴tar來建立一個打包文件;而參數(shù)-z是將打包的文件通過gzip程序進行壓縮。filename.tar.gz是你將要建立的文件名。(譯者添加:命令行最后的”.”是告訴tar將當前目錄下的所有文件/文件夾打包)
參數(shù)”-f”不是必需的,但是通常來說加上會是一個好主意。如果不加,tar會將數(shù)據(jù)寫到標準輸出,這就需要管道將tar輸出到另外一個程序,像這樣:
$ tar -cv filename.tar . | gpg –encrypt
這行命令把當前目錄下的所有文件打包建立一個沒有被壓縮的tar歸檔文件,通過管道輸出到gpg程序進行加密,讓不知道密鑰的人無法讀到文件內容。
15.4 zip
最后,討論一下處理zip文件的兩個程序。zip文件在Windows世界里面是極為常用的,所以Linux也有相應的程序來處理它們。zip文件的壓縮程序叫做zip(1),解壓縮程序叫做unzip(1).
$ zip foo *
這行命令會建立一個包涵當前目錄所有文件的的zip文件 foo.zip。zip會自動將
.zip后綴名加上,所以我們不需要在命令中加上。你也可以加上一個參數(shù)-r使zip將當前目錄下的所有文件夾目錄也加在zip文件中:
$ zip -r foo *
解壓縮文件很簡單,像這樣:
$ unzip foo.zip
這樣會解壓縮foo.zip里面的所有文件和文件夾
zip程序還有一些高級應用參數(shù),包括建立自解壓包,壓縮是保留源文件,調節(jié)壓縮文件的尺寸等等,在這里就不一一贅述了。如果想了解更多,請查看手冊頁。