Linux常用的壓縮及解壓縮命令如表1所示。
表1 Linux常用的壓縮及解壓縮命令說(shuō)明
常用命令 | 簡(jiǎn)要中文說(shuō)明 | 程序所在目錄 |
gzip | 壓縮成文件名為 .gz 的壓縮文件(也可用 –d 選項(xiàng)變成解壓) | /bin |
gunzip | 將 .gz 壓縮文件解壓(可用 gzip 加 –d 參數(shù)代替) | /bin |
tar | 打包為 .tar 的打包文件或解開(kāi)(也可配合 –z 選項(xiàng)呼叫 gzip進(jìn)行 .gz 文件的壓縮或解壓) | /bin |
compress | 壓縮成文件名為 .Z 的壓縮文件(也可用 –d 選項(xiàng)變成解壓) | /usr/bin |
uncompress | 將 .Z 壓縮文件解壓(可用compress加 –d 選項(xiàng)代替) | /usr/bin |
zip | 打包并壓縮成文件名為 .zip 的文件(本身沒(méi)有解壓能力,一定要用unzip來(lái)解壓才行) | /usr/bin |
unzip | 將 .zip 文件解壓 | /usr/bin |
bzip2 | 壓縮成文件名為 .bz2 的壓縮文件(也可用 –d 選項(xiàng)變成解壓) | /bin |
bunzip2 | 將 .bz2 壓縮文件解壓(可用 bzip2 加 –d 選項(xiàng)代替) | /bin |
gzip [-選項(xiàng)] [文件名]
壓縮成文件名為 .gz 的壓縮文件
如果您看到 .gz, .tar.gz 的文件,都是 gzip 程序壓縮的杰作。
gzip 是 GNU 組織開(kāi)發(fā)的一種壓縮程序,跟 Windows 上的 ZIP 不太一樣(稍后會(huì)介紹一個(gè)一樣的)。
我們先介紹壓縮的方法。當(dāng)我們有一個(gè)文件叫做 big1.bmp,由于點(diǎn)陣圖文件通常都很大,要用 gzip 壓縮,命令要怎么下呢?
最簡(jiǎn)單的可以這樣:
gzip big1.bmp
但是如果您希望它壓出“最小的文件”,那么就加一個(gè) -9 選項(xiàng):
gzip -9 big1.bmp
當(dāng)然,“最小的文件”的代價(jià),就是花最久的時(shí)間壓縮,如果您希望它在最快時(shí)間壓縮好,而不計(jì)較壓縮的比例,那就相反,加一個(gè) -1 (注意,是數(shù)字,不是小寫(xiě)英文l)選項(xiàng):
gzip -1 big1.bmp
而如果您沒(méi)有加 -1也沒(méi)有加 -9,它的默認(rèn)相當(dāng)于 -6。
另外常用的選項(xiàng)還有:
l -v 壓縮過(guò)程當(dāng)中顯示進(jìn)度。
l -r 將子目錄中的文件全部壓縮。
至于它還有解壓縮的選項(xiàng),我們刻意將它挪到下一個(gè)命令中gunzip 再說(shuō)明。
------------------------------------------------------------------------------------------------------------
gunzip [-選項(xiàng)] [文件名.gz]
將 .gz 壓縮文件解壓
gunzip 命令與 gzip 命令相對(duì),專(zhuān)門(mén)把 gzip 壓縮的 .gz 文件解壓縮。如果您有已經(jīng)壓縮過(guò)的文件,例如 big1.gz,這時(shí)就可以用解壓縮:
gunzip big1.gz
這個(gè)命令也可以用 gzip 自己來(lái)完成,效果完全一樣:
gzip -d big1.gz
其實(shí)在有些版本的Linux 上,gunzip是去調(diào)用 gzip,順便幫您加上個(gè) -d 選項(xiàng)罷了(用鏈接文件做的)!但是有些版本不是,是一個(gè)真的程序。不過(guò)無(wú)論 gunzip到底是一個(gè)實(shí)在的程序,還是僅是一個(gè)連接,都不重要了。因?yàn)?/span> gzip 這個(gè)程序,本身可以負(fù)責(zé)壓縮,也可以解壓縮,一物兩用。(不見(jiàn)得每種壓縮和解壓縮程序都是這樣。)所以,如果您記得 -d 選項(xiàng),就可以根本不用記 gunzip 這個(gè)命令了。
gunzip甚至還可以去解其他壓縮程序如 Compress 或 ZIP 壓縮出來(lái)的文件。不過(guò)我們不建議您這樣做,這樣會(huì)讓您自己很亂。而且它自己也承認(rèn),用它來(lái)解 zip 的文件并不是每一種情形都能完成。所以既然如此,何必這樣麻煩呢?哪一種工具就固定做什么用,不是比較有條理又好記嗎?
gunzip 有幾個(gè)選項(xiàng)較常使用:
l -f 當(dāng)解壓時(shí)如果遇到有同名的文件存在,就直接覆蓋,不必再詢問(wèn)。
l -r 將子目錄中的文件全部解壓縮。
l -v 解壓縮過(guò)程當(dāng)中顯示進(jìn)度。
同樣,這些選項(xiàng)也可以再加在 gzip -d 上,效果一樣。
------------------------------------------------------------------------------------------------------------
tar [-選項(xiàng)] [打包文件名] [文件]
打包為 .tar 的打包文件或解開(kāi)
如果您真的認(rèn)真試過(guò) gzip,或者您有使用 DOS, Windows的 ARJ, ZIP 一類(lèi)程序的經(jīng)驗(yàn)的話,就會(huì)發(fā)覺(jué) gzip 有一個(gè)致命的缺點(diǎn):它僅能壓縮一個(gè)文件。即使針對(duì)子目錄壓縮,它也是針對(duì)子目錄里的個(gè)別文件壓縮,并沒(méi)有把它們壓成緊緊的一“包”。
于是在 Linux上,這個(gè)打“包”的任務(wù)習(xí)慣由 tar 程序來(lái)代勞。請(qǐng)注意,tar 并不是壓縮程序,因?yàn)樗虬蟮拇笮「瓉?lái)一樣大。所以它不是壓縮程序,而是打包程序。而我們習(xí)慣上會(huì)先打包,產(chǎn)生一個(gè) .tar 文件,再把這個(gè)包裹拿去壓縮。.tar.gz 的文件名就是這么來(lái)的。
也有人覺(jué)的 .tar.gz 這樣的名稱(chēng)太長(zhǎng)了,其實(shí)濃縮為 .tgz,意思也是一樣的。
tar 的選項(xiàng)高達(dá)53個(gè)。(您用 man tar看就知道了)但是實(shí)用上沒(méi)有那么多,而且同樣幾個(gè)每天重復(fù)使用。因此我們直接舉例:
tar -cf new1.tar my1*.doc
把所有 my1*.doc 的文件打包成一個(gè) new1.tar文件。其中,-c 是產(chǎn)生新文件;-f 是輸出到默認(rèn)的設(shè)備,您可以把它當(dāng)做一定要加的選項(xiàng)就好。
tar -rf new1.tar my2*.doc
new1.tar 是一個(gè)已經(jīng)存在的打包文件了。我們?cè)侔?/span> my2*.doc 的所有文件也打包進(jìn)去。-r 是再增加文件的意思。
tar -uf new1.tar my18.doc
方才 my1*.doc 已經(jīng)打包進(jìn)去了,但是其中的 my18.doc 后來(lái)又做了更改,我們把新改過(guò)的文件再重新打包進(jìn)去,-u 是更新的意思。
說(shuō)到這里,如果您是用過(guò) ARJ 程序的人可能會(huì)嫌它有點(diǎn)笨。因?yàn)?/span> ARJ 程序類(lèi)似上述3個(gè)過(guò)程,都只要用一個(gè) a 選項(xiàng)就都可以操作了,不是嗎?如果您沒(méi)用過(guò) ARJ,就繼續(xù)往下看。
tar -tf new1.tar
列出來(lái) new1.tar 中有哪些文件被打包在里面。-t 是列出的意思。這個(gè)選項(xiàng)很像 ARJ 程序的 l 選項(xiàng)。
tar -xf new1.tar
把 new1.tar打包文件中的全部文件解出來(lái),-x 是解開(kāi)。
tar -xf new1.tar my2*.doc
只把 new1.tar打包文件中的所有 my2*.doc 文件解出來(lái),-x 是解開(kāi)。這個(gè)選項(xiàng)很像 ARJ 程序的 x 選項(xiàng)。
您注意到了嗎?它也與 ARJ 程序很像,自己就可以負(fù)責(zé)打包,也可以負(fù)責(zé)解開(kāi),無(wú)需另外一個(gè)解壓的程序。而它與ARJ的差別再?gòu)?qiáng)調(diào)一次,就是沒(méi)有壓縮能力!
但是,我可以向 gzip 程序借!就像便利店雖然沒(méi)有面包房,還是可以代賣(mài)面包!對(duì)消費(fèi)者來(lái)說(shuō),還是一樣的嘛。-z 選項(xiàng)就是這個(gè)秘密進(jìn)貨管道!
tar -zcf new1.tar.gz my1*.doc
請(qǐng)注意這道命令與方才一道類(lèi)似命令的不同之處。第一,加了 z 選項(xiàng),它會(huì)向 gzip 借用壓縮能力;第二,注意產(chǎn)生出來(lái)的文件名是 new1.tar.gz,兩個(gè)過(guò)程,一次完成!
如果您想配合 Compress 程序(后面會(huì)介紹),壓縮出另一種 .tar.Z 文件,那么只要把 -z 選項(xiàng)改為 -Z 選項(xiàng)就可以。
tar -Zcf new1.tar.Z my1*.doc
最后,我們?cè)偌右粋€(gè)選項(xiàng)-v,就是打包兼壓縮或者解壓的過(guò)程。因此,您最??吹降慕鈮菏掷m(xù)就是這樣了(因?yàn)?/span> Linux 上最常見(jiàn)的軟件包裝文件就是 .tar.gz 文件了):
tar -zxvf onepackage.tar.gz
如果是 .tgz 的文件名也是一樣的,因?yàn)樾再|(zhì)一樣,只是文件名簡(jiǎn)單一點(diǎn)而已:
tar -zxvf onepackage.tgz
這個(gè) -zxvf 的選項(xiàng)幾乎可以是固定的,值得您背下來(lái)的。而這種文件當(dāng)初是怎么生成的呢?可能是這樣(您也可以背起來(lái),以后就方便自己制造 .tar.gz 文件了):
tar -zcvf onepackage.tar.gz *.*
或者
tar -zcvf onepackage.tgz *.*
------------------------------------------------------------------------------------------------------------
compress [-選項(xiàng)] [文件名]
壓縮成文件名為 .Z 的壓縮文件
compress 跟 gzip 很近似,是一個(gè)壓縮兼解壓縮工具。如果您看到 .Z 、.tar.Z 的文件,都是compress 程序壓縮的杰作。
我們先介紹壓縮的方法。假設(shè)我們有一個(gè)字形文件叫做 taipei24.pcf ,字形文件通常都很大,要用 compress 壓縮,命令要怎么下呢?
最簡(jiǎn)單的是這樣:
compress taipei24.pcf
它就會(huì)產(chǎn)生一個(gè) taipei24.pcf.Z 的壓縮文件。
另外常用的選項(xiàng)還有:
l -v 壓縮過(guò)程當(dāng)中顯示進(jìn)度和比例。
至于它還有解壓縮的選項(xiàng),我們刻意將它挪到下一個(gè)命令uncompress中再說(shuō)明。
練習(xí):
?。?/span>1)用gzip 和用 compress 壓縮同樣一個(gè)文件,哪一種的壓縮效果比較好?
?。?/span>2)要把所有 a*.pcf 的文件經(jīng)過(guò) tar 命令打包,再經(jīng)過(guò) compress 壓縮而變成一個(gè) afont.tar.Z 的文件,需要哪些命令?
uncompress [-選項(xiàng)] [文件名.Z]
將 .Z 壓縮文件解壓
uncompress 命令與compress 命令相對(duì),專(zhuān)門(mén)把 compress 壓縮出的 .Z 文件解壓縮。如果您有已經(jīng)壓縮過(guò)的文件,例如 one.Z,這時(shí)就可以用
uncompress one.Z
也可以用 compress 自己來(lái)完成,效果完全一樣:
compress -d one.Z
目前大部分版本的Linux中,uncompress其實(shí)只是去調(diào)用 compress,順便幫您加上個(gè) -d 選項(xiàng)罷了(用鏈接文件做的),并不是一個(gè)真的程序。
由于 compress 這個(gè)程序本身可以負(fù)責(zé)壓縮,也可以解壓縮,一物兩用。(不見(jiàn)得每種壓縮和解壓縮程序都是這樣。)所以,如果您記得 -d 選項(xiàng),那就可以根本不用記 uncompress命令了。
uncompress 一般會(huì)用到的選項(xiàng)大概就一個(gè):
-v 解壓縮過(guò)程當(dāng)中顯示進(jìn)度。
同樣,這些選項(xiàng)也可以再加在 compress -d 上,效果一樣。
------------------------------------------------------------------------------------------------------------
zip [-選項(xiàng)] [文件名.zip] [文件名]
打包并壓縮成文件名為 .zip 的文件
zip與gzip雖然只差一個(gè)字母,但是用法差多了。
zip 所使用的格式其實(shí)與 DOS 和 Windows 上的 .zip 是完全一樣的!也就是說(shuō),它無(wú)需經(jīng)過(guò)打包和壓縮兩道手續(xù),就可以產(chǎn)生兼有兩種效用的“壓縮文件包”。而且,如果使用這種格式的話,就可以和 .bmp, .jpg, .gif 等文件一樣,自由地通行于 Windows 和 Linux 之間,多方便??!例如,可以在 Windows中用WinZip 程序解開(kāi),或者用WinZip 壓成 .zip 直接給 Linux 用。
既然這么好,為什么大家不常用它?不要問(wèn)我,我也不知道。電腦的世界里常常存在一種怪現(xiàn)象,好的東西不見(jiàn)得大家都用,大家都在用的往往并不是最佳的選擇,或者只是聽(tīng)前輩這樣用,他就跟著這樣用。
總之,如果您認(rèn)為大家沒(méi)在用的東西,就是不好的,那很可能是錯(cuò)。到最后,找人來(lái)分析為什么用某某那樣?xùn)|西??jī)?yōu)點(diǎn)為何?“普遍”!居然也可成為優(yōu)點(diǎn)之一,奇怪!
zip 打包兼壓縮的命令像是這樣下達(dá)的(它高達(dá)36個(gè)選項(xiàng),但是相信下面這些應(yīng)該夠您用了):
zip new1.zip my1*.doc
把所有 my1*.doc 的文件打包成一個(gè) new1.zip文件。new1.zip 可以省略擴(kuò)展名簡(jiǎn)寫(xiě)成 new1,它會(huì)自行默認(rèn) .zip 的擴(kuò)展名。
zip -d new1.zip my18.doc
如果當(dāng)初my18.doc 是壓縮在 new1.zip 中的一個(gè)文件,現(xiàn)在這條命令把它從壓縮文件中抽走并刪掉。-d 是刪除的意思。
zip -g new1.zip my32.doc
如果當(dāng)初并沒(méi)有把 my32.doc 壓在 new1.zip 里面,現(xiàn)在把它加進(jìn)去。-g 選項(xiàng)是增加而不要重新產(chǎn)生的意思(grow,長(zhǎng)大,這個(gè)字母用得比較特別一點(diǎn))。
zip -u new1.zip my2*.doc
如果當(dāng)初 my2*.doc都已經(jīng)壓縮進(jìn) new1.zip 里面了,但是后來(lái) my2*.doc中有幾個(gè)文件有更改,又不想去找出到底是哪些文件更改了,這條命令請(qǐng)系統(tǒng)自行幫助檢查,更改過(guò)的才更新到壓縮,否則就不必動(dòng)。-u 是更新的意思。
zip -r new2.zip mydir
如果 mydir 是一個(gè)目錄名稱(chēng),它會(huì)把整個(gè)目錄的所有文件壓縮成一個(gè) new2.zip 文件。-r 選項(xiàng)是壓縮子目錄的意思。
那么解壓縮的選項(xiàng)呢?抱歉,zip只能壓縮,沒(méi)有兼職解壓縮的功能。解壓縮請(qǐng)用unzip。
------------------------------------------------------------------------------------------------------------
unzip [-選項(xiàng)] [文件名.zip] [文件名]
將 .zip 壓縮文件解壓
zip 和 unzip這組程序真正是一對(duì)搭檔。zip 程序本身沒(méi)有解壓能力,一定要用unzip 程序來(lái)解壓才行。unzip 是一個(gè)真正的程序,并不是 zip 的替身。
因?yàn)?/span> zip 程序會(huì)把一大堆文件壓縮在一起,而解壓時(shí),有可能這一大堆文件的其中一些已經(jīng)存在了(如果都不存在,當(dāng)然很簡(jiǎn)單),于是產(chǎn)生了一些錯(cuò)綜復(fù)雜、糾葛纏綿的解壓情況,您要有心里準(zhǔn)備!例如,我們要把這些已經(jīng)存在的文件通通無(wú)條件地覆蓋過(guò)去呢,還是只有把比它新才覆蓋過(guò)去?或者無(wú)論新舊,只有不存在的文件才壓縮加上去,還是每次遇到已有文件存在時(shí),都要詢問(wèn)我,由我來(lái)決定?所謂已經(jīng)存在,是用 UNIX 的判別法則,還是 DOS 的判別法則?也就是說(shuō),如果壓縮文件里有一個(gè)大寫(xiě)的MYFILE,它和現(xiàn)有的小寫(xiě)myfile算同名文件,還是算不同名文件?
還有,因?yàn)?/span> zip可以把整個(gè)子目錄壓縮起來(lái),那么解壓縮的時(shí)候,又會(huì)遇到無(wú)可避免的抉擇情況:您是要解壓回與原來(lái)目錄一樣的位置,還是在現(xiàn)有目錄上解壓并產(chǎn)生目錄?
因?yàn)樯厦媲闆r太復(fù)雜了,所以我們只列一道范例命令,然后其他都直接列出選項(xiàng)了:
unzip onepackage.zip a*.doc
把 onepackage.zip 里面凡是 a*.doc 的都解壓出來(lái)。如果 a*.doc文件名沒(méi)有輸入,就會(huì)把onepackage.zip 全部解壓。但是最好配合下面的選項(xiàng),決定您遇到現(xiàn)有相同文件名時(shí)的8個(gè)處理決策:
-f 只解壓更新已存在的文件,其他文件不解壓(但更新時(shí)會(huì)一一詢問(wèn))。
-u 解壓更新已存在的文件,并把不存在的文件也解壓(但更新時(shí)會(huì)一一詢問(wèn))。
-fo 只解壓更新已存在的文件,其他文件不解壓(但不詢問(wèn)直接覆蓋更新)。
-uo 解壓更新已存在的文件,并把不存在的文件也解壓(但不詢問(wèn)直接覆蓋更新)。
-o 不論文件是新是舊,一律從壓縮文件中解壓,并直接覆蓋。
-n 只把不存在的文件解壓,已存在的文件則無(wú)論新舊一律保留原狀。
-C 不計(jì)較大小寫(xiě)的不同,視為相同文件名(默認(rèn)是視為不同)。
-L 解壓時(shí)一律將文件名轉(zhuǎn)為小寫(xiě)。
還有,遇到有子目錄時(shí)的處理決策:
-j 不管原來(lái)壓縮時(shí)的目錄為何,均全部解開(kāi)于現(xiàn)行目錄。
-d 后面接一個(gè)目錄名稱(chēng)??梢灾付ń鈮旱皆撃夸?。
一個(gè)其他的常用選項(xiàng):
-l 只列出壓縮包里面有哪些文件,而不真的解開(kāi)壓縮。
------------------------------------------------------------------------------------------------------------
bzip2 [-選項(xiàng)] [文件名]
壓縮成文件名為 .bz2 的壓縮文件
bzip2 是新一代的壓縮程序,但是仍然改不掉 gzip 的老毛病:只能壓縮一個(gè)文件,要打包還得靠 tar幫忙。所以您還是會(huì)看到 tar.bz2 這種文件。
bzip2 引用的是一套稱(chēng)為Burrows-Wheeler block sorting的文字壓縮演算法,以及有名的霍夫曼編碼法(Huffman coding),所以名稱(chēng)為B字開(kāi)頭。這種壓縮法在壓縮的過(guò)程會(huì)用到稱(chēng)為block的內(nèi)存單位,您可以自定義這個(gè)block內(nèi)存單位的大小,block用得越大,壓縮的效果越好,當(dāng)然用的內(nèi)存就越多。我們可以給定1~9的選項(xiàng),它所用的內(nèi)存算法如下。
壓縮時(shí):
內(nèi)存用量=400KB+(block 大小×7)
block 大小=選項(xiàng)×100KB
解壓時(shí):
內(nèi)存用量=400KB+(block 大小×4)
解壓時(shí)的block 大小已經(jīng)在壓縮時(shí)決定了,所以不用選項(xiàng)決定。所以,壓縮時(shí)可以這樣下達(dá)命令:
bzip2 -9 -k myfile.doc
把 myfile.doc 命令壓縮成最小的文件,-9選項(xiàng)其實(shí)是默認(rèn)的。它會(huì)產(chǎn)生myfile.doc.bz2 文件。加上 -k 選項(xiàng)表示雖然產(chǎn)生了 myfile.doc.bz2,但仍要保留 myfile.doc 原文件,這就是 gzip 程序所做不到的了。
------------------------------------------------------------------------------------------------------------
bunzip2 [-選項(xiàng)] [文件名.bz2]
將 .bz2 壓縮文件解壓
bunzip2 命令與 bzip 命令相對(duì),專(zhuān)門(mén)把 bzip 壓縮出的 .bz2 文件解壓縮。如果您有已經(jīng)壓縮過(guò)的文件,例如 myfile.bz2,這時(shí)就可以用:
bunzip2 myfile.bz2
也可以用 bzip2 自己來(lái)完成,效果完全一樣:
bzip2 -d myfile.bz2
目前大部分版本的Linux中,bunzip2其實(shí)只是去調(diào)用bzip2,順便幫您加上個(gè) -d 選項(xiàng)罷了(用鏈接文件做的),并不是一個(gè)真的程序。
由于bzip2本身可以負(fù)責(zé)壓縮,也可以解壓縮,一物兩用(不見(jiàn)得每種壓縮和解壓縮程序都是這樣。)。所以,如果您記得 -d 選項(xiàng),那就可以根本不用記 bunzip2 這個(gè)命令了。
但記得我們?cè)?/span> bzip2 命令時(shí)提過(guò),bunzip2/bzip2程序解壓時(shí)所需的內(nèi)存為:
內(nèi)存用量=400KB+(block 大小×4)
因?yàn)榻鈮簳r(shí)的block 大小已經(jīng)在壓縮時(shí)決定了,所以不用選項(xiàng)決定。但是,我們有改變那個(gè)“×4”倍的機(jī)會(huì)。如果我們?cè)诮鈮簳r(shí)加了 -s 的選項(xiàng),它會(huì)這樣去計(jì)算:
內(nèi)存用量=400KB+(block大小×2.5)
很顯然,-s 是 small的意思,它可以節(jié)省一半內(nèi)存用量。
表2所示為bzip2 和 bunzip2 壓縮和解壓縮時(shí)的內(nèi)存用量總表。
表2 內(nèi)存用量總表
壓縮時(shí)的選項(xiàng) | 壓縮時(shí)用量 | 解壓時(shí)用量 | 加了-s選項(xiàng)解壓時(shí)用量 |
-1 | 1 100 KB | 500 KB | 350 KB |
-2 | 1 800 KB | 900 KB | 600 KB |
-3 | 2 500 KB | 1 300 KB | 850 KB |
-4 | 3 200 KB | 1 700 KB | 1 100 KB |
-5 | 3 900 KB | 2 100 KB | 1 350 KB |
-6 | 4 600 KB | 2 500 KB | 1 600 KB |
-7 | 5 400 KB | 2 900 KB | 1 850 KB |
-8 | 6 000 KB | 3 300 KB | 2 100 KB |
-9 | 6 700 KB | 3 700 KB | 2 350 KB |
另外,bunzip2一般常用到的選項(xiàng)如下:
-v 解壓縮過(guò)程當(dāng)中顯示進(jìn)度。
-k 解壓縮,但保留原壓縮文件。
同樣,這些選項(xiàng)也可以再加在 bzip2 -d 上,效果一樣。
聯(lián)系客服