15.1 gzip
gzip(1)
是GNU的壓縮程序。它只對單個文件進行壓縮。基本用法如下:
$ gzip filename
程序執行以后,文件名會變成filename.gz,而且一般情況下大小會比原文件要小。注意,程序并不新建一個新的文件filename.gz,
而是將filename變成filename.gz。一般來說,文本文件壓縮率會比較高。而那些jpeg圖像,mp3等類似文件的壓縮率就沒有那么好了,
因為它們本來就已經被壓縮過了的。這個基本用法考慮了壓縮時間和壓縮后文件尺寸的平衡問題(譯者注:如果要使壓縮后的文件更小,就需要用到更多的時間)。
要得到最小文件大小(最大壓縮),可以使用如下用法:
$ gzip -9 filename
這樣就可以得到gzip能夠壓縮的最小文件尺寸,但是需要更長的壓縮時間。上面的數字越小,壓縮就越快,相反壓縮率也就越小。
將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
相比有其優點,也有一些缺點。bzip2的主要優點在于它壓縮后文件的尺寸,對于相同文件,bzip2
壓縮后的尺寸幾乎總是小于gzip的壓縮結果。有些時候,這個差距會相當大。這個優點對于使用小貓下載文件的用戶來說表現得尤為突出。需要提醒的是,當在
一些公共ftp
服務器上下載文件時,在.gz和.bz2文件中盡量選擇.bz2文件是一種基本的網絡禮節,因為這樣可以減少服務器的負擔以給更多人服務。
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有很多命令行參數,你可以在手冊頁找到它們。在這一節里,我們只是討論一下那些經常用到的tar的用法。
tar
最常用的用法是將我們從網站或者ftp上下載的文件解壓縮然后在解包。a.tar.gz是我們經常看到的文件名格式,這就是我們通常說的
"tarball",它是先把一些文件用tar打包,然后在用gzip壓縮。你也有可能會看到名為a.tar.Z的文件,這也是同樣的做法,但是你一般只
會在比較老的Unix 系統里面遇到。
另外,你也會在另外一些地方看到如a.tar.bz2這樣文件。Kernel源文件就是用這種格式發布的,為的是可以讓文件更小,便于下載。你可能已經猜到,它就是先將一些文件用tar打包,然后再用bzip2壓縮。
我們可以將上述格式的文件用tar加一些命令行參數進行解包。-z參數表示在首先運行gunzip將文件解壓縮。將一個tarball解包的最常用的用法是:
$ tar -xvzf filename.tar.gz
這里有不少的參數,那么它們各自有什么意思呢?
-x表示提取文件。這是一個非常重要的參數,因為它告訴tar對輸入的文件具體怎么處理。在這里,我們要將打包的文件分離還原成打包前的狀態。
-v表示詳述。加入這個參數讓程序將解包出來的每一個文件列出來。如果覺得列出來太煩了,你完全可以把這個參數去掉來關閉這個功能。相反,如果你需要每個解包文件更詳細的信息,則可以使用-vv參數。
-z是告訴tar先運行gunzip將文件解壓縮。
-f是告訴tar在命令行輸入的下一個串字符是需要處理的文件。
上面這個命令也可以用一些其他形式的寫法。在比較老的系統里面由于缺少新版本的GNU tar程序,你可能會看到它是寫成這樣的:
$ gunzip filename.tar.gz | tar -xvf
-
這行命令先把文件解壓縮,然后把解壓的文件對輸出到tar程序。gzip可以把其處理完的數據輸到標準輸出。這里就是把gzip解壓縮的文件作為標準輸出,然后由管道把文件送到tar程序進行解包。最后的
"-"表示處理標準輸入。它將解包后的文件寫入磁盤。
還有一種寫法是將第一種命令格式的短劃線去掉,像這樣:
$ tar xvzf filename.tar.gz
你也可能會碰到bzip2壓縮的打包文件。在Slackware
Linux所帶的tar程序版本 可以像gzip壓縮的打包文件一樣,只是要把參數-z用-j代替:
$ tar -xvjf filename.tar.bz2
這里需要注意的是,tar會把解包的文件放到當前目錄。所以如果要把一個放在/tmp目錄文件解壓縮到你的家目錄的話,這里有一些做法可供選擇:
選擇一,把文件拷貝到家目錄,然后解包
選擇二,指定需要解包文件的路徑
選擇三,用-C 參數指定解包后存放文件的路徑
$ 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解包的命令,現在讓我們來看看tar是如何來打包的吧。
在大多數情況下,只需要用參數"-c"代替參數"-x"就可以了:
$ tar -cvzf filename.tar.gz .
在這行命令里面,參數-c是告訴tar來建立一個打包文件;而參數-z是將打包的文件通過gzip程序進行壓縮。filename.tar.gz
是你將要建立的文件名。(譯者添加:命令行最后的"."是告訴tar將當前目錄下的所有文件/文件夾打包)
參數"-f"不是必需的,但是通常來說加上會是一個好主意。如果不加,tar會將數據寫到標準輸出,這就需要管道將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后綴名加上,所以我們不需要在命令中加上。你也可以加上一個參數-r使zip將當前目錄下的所有文件夾目錄也加在zip文件中:
$ zip -r foo *
解壓縮文件很簡單,像這樣:
$ unzip foo.zip
這樣會解壓縮foo.zip里面的所有文件和文件夾
zip程序還有一些高級應用參數,包括建立自解壓包,壓縮是保留源文件,調節壓縮文件的尺寸等等,在這里就不一一贅述了。如果想了解更多,請查看手冊頁。