linux解壓縮命令
一、gzip
gzip [-選項] [檔名]
-v 壓縮過程當中顯示進度
-r 將子目錄中的檔案全部壓縮
-d 解壓.gz檔案
-9 最長的時間壓縮最小的檔案
-1 與 -9 相反
各選項可以做相應的結合使用
gzip壓縮命令:
不能對目錄進行壓縮,只能對檔案或子目錄中的檔案進行壓縮:
gzip text.txt // 對檔案text.txt檔案進行壓縮,生成text.txt.gz
gzip -v text.txt // 對檔案text.txt檔案進行壓縮,生成text.txt.gz。其中-v顯示壓縮過程
gzip -v *.txt // 在但前目錄下將所有的以後綴名為txt的壓縮,使每個字尾為txt的檔案全變成 字尾為txt.gz,支援萬用字元
gzip -vr text //將text目錄中的所有檔案壓縮成字尾為.gz ; 必須帶個r
gzip解壓縮命令(必須跟d):
gzip -d text.txt.gz // 對檔案text.txt.gz檔案進行解壓縮,生成text.txt 加 v 顯示解壓進度 如 gzip -vd 檔名
gzip -rd text //將text目錄中的所有檔案字尾為.gz的解壓 ; 必須帶個r
gzip [選項] 多個檔案以空格隔開
Linux常用的壓縮及解壓縮命令如表2-5所示。
表2-5 Linux常用的壓縮及解壓縮命令說明
常用命令 |
簡要中文說明 |
程式所在目錄 |
gzip |
壓縮成檔名為 .gz 的壓縮檔案(也可用 –d 選項變成解壓) |
/bin |
gunzip |
將 .gz 壓縮檔案解壓(可用 gzip 加 –d 引數代替) |
/bin |
tar |
打包為
.tar
的打包檔案或解開(也可配合
–z
選項呼叫
gzip
進行
.gz |
/bin |
compress |
壓縮成檔名為 .Z 的壓縮檔案(也可用 –d 選項變成解壓) |
/usr/bin |
uncompress |
將 .Z 壓縮檔案解壓(可用 compress 加 –d 選項代替) |
/usr/bin |
zip |
打包並壓縮成檔名為 .zip 的檔案(本身沒有解壓能力,一定要用 unzip 來解壓才行) |
/usr/bin |
unzip |
將 .zip 檔案解壓 |
/usr/bin |
bzip2 |
壓縮成檔名為 .bz2 的壓縮檔案(也可用 –d 選項變成解壓) |
/bin |
bunzip2 |
將 .bz2 壓縮檔案解壓(可用 bzip2 加 –d 選項代替) |
/bin |
gzip [-選項] [檔名]
壓縮成檔名為 .gz 的壓縮檔案
如果您看到 .gz, .tar.gz 的檔案,都是 gzip 程式壓縮的傑作。
gzip 是 GNU 組織開發的一種壓縮程式,跟 Windows 上的 ZIP 不太一樣(稍後會介紹一個一樣的)。
我們先介紹壓縮的方法。當我們有一個檔案叫做 big1.bmp,由於點陣圖檔案通常都很大,要用 gzip 壓縮,命令要怎麼下呢?
最簡單的可以這樣:
gzip big1.bmp
但是如果您希望它壓出“最小的檔案”,那麼就加一個 -9 選項:
gzip -9 big1.bmp
當然,“最小的檔案”的代價,就是花最久的時間壓縮,如果您希望它在最快時間壓縮好,而不計較壓縮的比例,那就相反,加一個 -1 (注意,是數字,不是小寫英文l)選項:
gzip -1 big1.bmp
而如果您沒有加 -1也沒有加 -9,它的預設相當於 -6。
另外常用的選項還有:
l -v 壓縮過程當中顯示進度。
l -r 將子目錄中的檔案全部壓縮。
至於它還有解壓縮的選項,我們刻意將它挪到下一個命令中gunzip 再說明。
gunzip [-選項] [檔名.gz]
將 .gz 壓縮檔案解壓
gunzip 命令與 gzip 命令相對,專門把 gzip 壓縮的 .gz 檔案解壓縮。如果您有已經壓縮過的檔案,例如 big1.gz,這時就可以用解壓縮:
gunzip big1.gz
這個命令也可以用 gzip 自己來完成,效果完全一樣:
gzip -d big1.gz
其實在有些版本的Linux 上,gunzip是去呼叫 gzip,順便幫您加上個 -d 選項罷了(用連結檔案做的)!但是有些版本不是,是一個真的程式。不過無論 gunzip到底是一個實在的程式,還是僅是一個連線,都不重要了。因為 gzip 這個程式,本身可以負責壓縮,也可以解壓縮,一物兩用。(不見得每種壓縮和解壓縮程式都是這樣。)所以,如果您記得 -d 選項,就可以根本不用記 gunzip 這個命令了。
gunzip甚至還可以去解其他壓縮程式如 Compress 或 ZIP 壓縮出來的檔案。不過我們不建議您這樣做,這樣會讓您自己很亂。而且它自己也承認,用它來解 zip 的檔案並不是每一種情形都能完成。所以既然如此,何必這樣麻煩呢?哪一種工具就固定做什麼用,不是比較有條理又好記嗎?
gunzip 有幾個選項較常使用:
l -f 當解壓時如果遇到有同名的檔案存在,就直接覆蓋,不必再詢問。
l -r 將子目錄中的檔案全部解壓縮。
l -v 解壓縮過程當中顯示進度。
同樣,這些選項也可以再加在 gzip -d 上,效果一樣。
tar [-選項] [打包檔名] [檔案]
打包為 .tar 的打包檔案或解開
如果您真的認真試過 gzip,或者您有使用 DOS, Windows的 ARJ, ZIP 一類程式的經驗的話,就會發覺 gzip 有一個致命的缺點:它僅能壓縮一個檔案。即使針對子目錄壓縮,它也是針對子目錄裡的個別檔案壓縮,並沒有把它們壓成緊緊的一“包”。
於是在 Linux上,這個打“包”的任務習慣由 tar 程式來代勞。請注意,tar 並不是壓縮程式,因為它打包之後的大小跟原來一樣大。所以它不是壓縮程式,而是打包程式。而我們習慣上會先打包,產生一個 .tar 檔案,再把這個包裹拿去壓縮。.tar.gz 的檔名就是這麼來的。
也有人覺的 .tar.gz 這樣的名稱太長了,其實濃縮為 .tgz,意思也是一樣的。
tar 的選項高達53個。(您用 man tar看就知道了)但是實用上沒有那麼多,而且同樣幾個每天重複使用。因此我們直接舉例:
tar -cf new1.tar my1*.doc
把所有 my1*.doc 的檔案打包成一個 new1.tar檔案。其中,-c 是產生新檔案;-f 是輸出到預設的裝置,您可以把它當做一定要加的選項就好。
tar -rf new1.tar my2*.doc
new1.tar 是一個已經存在的打包檔案了。我們再把 my2*.doc 的所有檔案也打包進去。-r 是再增加檔案的意思。
tar -uf new1.tar my18.doc
方才 my1*.doc 已經打包進去了,但是其中的 my18.doc 後來又做了更改,我們把新改過的檔案再重新打包進去,-u 是更新的意思。
說到這裡,如果您是用過 ARJ 程式的人可能會嫌它有點笨。因為 ARJ 程式類似上述3個過程,都只要用一個 a 選項就都可以操作了,不是嗎?如果您沒用過 ARJ,就繼續往下看。
tar -tf new1.tar
列出來 new1.tar 中有哪些檔案被打包在裡面。-t 是列出的意思。這個選項很像 ARJ 程式的 l 選項。
tar -xf new1.tar
把 new1.tar打包檔案中的全部檔案解出來,-x 是解開。
tar -xf new1.tar my2*.doc
只把 new1.tar打包檔案中的所有 my2*.doc 檔案解出來,-x 是解開。這個選項很像 ARJ 程式的 x 選項。
您注意到了嗎?它也與 ARJ 程式很像,自己就可以負責打包,也可以負責解開,無需另外一個解壓的程式。而它與ARJ的差別再強調一次,就是沒有壓縮能力!
但是,我可以向 gzip 程式借!就像便利店雖然沒有面包房,還是可以代賣麵包!對消費者來說,還是一樣的嘛。-z 選項就是這個祕密進貨管道!
tar -zcf new1.tar.gz my1*.doc
請注意這道命令與方才一道類似命令的不同之處。第一,加了 z 選項,它會向 gzip 借用壓縮能力;第二,注意產生出來的檔名是 new1.tar.gz,兩個過程,一次完成!
如果您想配合 Compress 程式(後面會介紹),壓縮出另一種 .tar.Z 檔案,那麼只要把 -z 選項改為 -Z 選項就可以。
tar -Zcf new1.tar.Z my1*.doc
最後,我們再加一個選項-v,就是打包兼壓縮或者解壓的過程。因此,您最常看到的解壓手續就是這樣了(因為 Linux 上最常見的軟體包裝檔案就是 .tar.gz 檔案了):
tar -zxvf onepackage.tar.gz
如果是 .tgz 的檔名也是一樣的,因為性質一樣,只是檔名簡單一點而已:
tar -zxvf onepackage.tgz
這個 -zxvf 的選項幾乎可以是固定的,值得您背下來的。而這種檔案當初是怎麼生成的呢?可能是這樣(您也可以背起來,以後就方便自己製造 .tar.gz 檔案了):
tar -zcvf onepackage.tar.gz *.*
或者
tar -zcvf onepackage.tgz *.*
compress [-選項] [檔名]
壓縮成檔名為 .Z 的壓縮檔案
compress 跟 gzip 很近似,是一個壓縮兼解壓縮工具。如果您看到 .Z 、.tar.Z 的檔案,都是compress 程式壓縮的傑作。
我們先介紹壓縮的方法。假設我們有一個字形檔案叫做 taipei24.pcf ,字形檔案通常都很大,要用 compress 壓縮,命令要怎麼下呢?
最簡單的是這樣:
compress taipei24.pcf
它就會產生一個 taipei24.pcf.Z 的壓縮檔案。
另外常用的選項還有:
l -v 壓縮過程當中顯示進度和比例。
至於它還有解壓縮的選項,我們刻意將它挪到下一個命令uncompress中再說明。
uncompress [-選項] [檔名.Z]
將 .Z 壓縮檔案解壓
uncompress 命令與compress 命令相對,專門把 compress 壓縮出的 .Z 檔案解壓縮。如果您有已經壓縮過的檔案,例如 one.Z,這時就可以用
uncompress one.Z
也可以用 compress 自己來完成,效果完全一樣:
compress -d one.Z
目前大部分版本的Linux中,uncompress其實只是去呼叫 compress,順便幫您加上個 -d 選項罷了(用連結檔案做的),並不是一個真的程式。
由於 compress 這個程式本身可以負責壓縮,也可以解壓縮,一物兩用。(不見得每種壓縮和解壓縮程式都是這樣。)所以,如果您記得 -d 選項,那就可以根本不用記 uncompress命令了。
uncompress 一般會用到的選項大概就一個:
-v 解壓縮過程當中顯示進度。
同樣,這些選項也可以再加在 compress -d 上,效果一樣。
zip [-選項] [檔名.zip] [檔名]
打包並壓縮成檔名為 .zip 的檔案
zip與gzip雖然只差一個字母,但是用法差多了。
zip 所使用的格式其實與 DOS 和 Windows 上的 .zip 是完全一樣的!也就是說,它無需經過打包和壓縮兩道手續,就可以產生兼有兩種效用的“壓縮檔案包”。而且,如果使用這種格式的話,就可以和 .bmp, .jpg, .gif 等檔案一樣,自由地通行於 Windows 和 Linux 之間,多方便啊!例如,可以在 Windows中用WinZip 程式解開,或者用WinZip 壓成 .zip 直接給 Linux 用。
既然這麼好,為什麼大家不常用它?不要問我,我也不知道。電腦的世界裡常常存在一種怪現象,好的東西不見得大家都用,大家都在用的往往並不是最佳的選擇,或者只是聽前輩這樣用,他就跟著這樣用。
總之,如果您認為大家沒在用的東西,就是不好的,那很可能是錯。到最後,找人來分析為什麼用某某那樣東西?優點為何?“普遍”!居然也可成為優點之一,奇怪!
zip 打包兼壓縮的命令像是這樣下達的(它高達36個選項,但是相信下面這些應該夠您用了):
zip new1.zip my1*.doc
把所有 my1*.doc 的檔案打包成一個 new1.zip檔案。new1.zip 可以省略副檔名簡寫成 new1,它會自行預設 .zip 的副檔名。
zip -d new1.zip my18.doc
如果當初my18.doc 是壓縮在 new1.zip 中的一個檔案,現在這條命令把它從壓縮檔案中抽走並刪掉。-d 是刪除的意思。
zip -g new1.zip my32.doc
如果當初並沒有把 my32.doc 壓在 new1.zip 裡面,現在把它加進去。-g 選項是增加而不要重新產生的意思(grow,長大,這個字母用得比較特別一點)。
zip -u new1.zip my2*.doc
如果當初 my2*.doc都已經壓縮排 new1.zip 裡面了,但是後來 my2*.doc中有幾個檔案有更改,又不想去找出到底是哪些檔案更改了,這條命令請系統自行幫助檢查,更改過的才更新到壓縮,否則就不必動。-u 是更新的意思。
zip -r new2.zip mydir
如果 mydir 是一個目錄名稱,它會把整個目錄的所有檔案壓縮成一個 new2.zip 檔案。-r 選項是壓縮子目錄的意思。
那麼解壓縮的選項呢?抱歉,zip只能壓縮,沒有兼職解壓縮的功能。解壓縮請用unzip。
unzip [-選項] [檔名.zip] [檔名]
將 .zip 壓縮檔案解壓
zip 和 unzip這組程式真正是一對搭檔。zip 程式本身沒有解壓能力,一定要用unzip 程式來解壓才行。unzip 是一個真正的程式,並不是 zip 的替身。
因為 zip 程式會把一大堆檔案壓縮在一起,而解壓時,有可能這一大堆檔案的其中一些已經存在了(如果都不存在,當然很簡單),於是產生了一些錯綜複雜、糾葛纏綿的解 壓情況,您要有心裡準備!例如,我們要把這些已經存在的檔案通通無條件地覆蓋過去呢,還是隻有把比它新才覆蓋過去?或者無論新舊,只有不存在的檔案才壓縮 加上去,還是每次遇到已有檔案存在時,都要詢問我,由我來決定?所謂已經存在,是用 UNIX 的判別法則,還是 DOS 的判別法則?也就是說,如果壓縮檔案裡有一個大寫的MYFILE,它和現有的小寫myfile算同名檔案,還是算不同名檔案?
還有,因為 zip可以把整個子目錄壓縮起來,那麼解壓縮的時候,又會遇到無可避免的抉擇情況:您是要解壓回與原來目錄一樣的位置,還是在現有目錄上解壓併產生目錄?
因為上面情況太複雜了,所以我們只列一道範例命令,然後其他都直接列出選項了:
unzip onepackage.zip a*.doc
把 onepackage.zip 裡面凡是 a*.doc 的都解壓出來。如果 a*.doc檔名沒有輸入,就會把onepackage.zip 全部解壓。但是最好配合下面的選項,決定您遇到現有相同檔名時的8個處理決策:
-f 只解壓更新已存在的檔案,其他檔案不解壓(但更新時會一一詢問)。
-u 解壓更新已存在的檔案,並把不存在的檔案也解壓(但更新時會一一詢問)。
-fo 只解壓更新已存在的檔案,其他檔案不解壓(但不詢問直接覆蓋更新)。
-uo 解壓更新已存在的檔案,並把不存在的檔案也解壓(但不詢問直接覆蓋更新)。
-o 不論檔案是新是舊,一律從壓縮檔案中解壓,並直接覆蓋。
-n 只把不存在的檔案解壓,已存在的檔案則無論新舊一律保留原狀。
-C 不計較大小寫的不同,視為相同檔名(預設是視為不同)。
-L 解壓時一律將檔名轉為小寫。
還有,遇到有子目錄時的處理決策:
-j 不管原來壓縮時的目錄為何,均全部解開於現行目錄。
-d 後面接一個目錄名稱。可以指定解壓到該目錄。
一個其他的常用選項:
-l 只列出壓縮包裡面有哪些檔案,而不真的解開壓縮。
bzip2 [-選項] [檔名]
壓縮成檔名為 .bz2 的壓縮檔案
bzip2 是新一代的壓縮程式,但是仍然改不掉 gzip 的老毛病:只能壓縮一個檔案,要打包還得靠 tar幫忙。所以您還是會看到 tar.bz2 這種檔案。
bzip2 引用的是一套稱為Burrows-Wheeler block sorting的文字壓縮演演算法,以及有名的霍夫曼編碼法(Huffman coding),所以名稱為B字開頭。這種壓縮法在壓縮的過程會用到稱為block的記憶體單位,您可以自定義這個block記憶體單位的大小,block用 得越大,壓縮的效果越好,當然用的記憶體就越多。我們可以給定1~9的選項,它所用的記憶體演算法如下。
壓縮時:
記憶體用量=400KB+(block 大小×7)
block 大小=選項×100KB
解壓時:
記憶體用量=400KB+(block 大小×4)
解壓時的block 大小已經在壓縮時決定了,所以不用選項決定。所以,壓縮時可以這樣下達命令:
bzip2 -9 -k myfile.doc
把 myfile.doc 命令壓縮成最小的檔案,-9選項其實是預設的。它會產生myfile.doc.bz2 檔案。加上 -k 選項表示雖然產生了 myfile.doc.bz2,但仍要保留 myfile.doc 原檔案,這就是 gzip 程式所做不到的了。
bunzip2 [-選項] [檔名.bz2]
將 .bz2 壓縮檔案解壓
bunzip2 命令與 bzip 命令相對,專門把 bzip 壓縮出的 .bz2 檔案解壓縮。如果您有已經壓縮過的檔案,例如 myfile.bz2,這時就可以用:
bunzip2 myfile.bz2
也可以用 bzip2 自己來完成,效果完全一樣:
bzip2 -d myfile.bz2
目前大部分版本的Linux中,bunzip2其實只是去呼叫bzip2,順便幫您加上個 -d 選項罷了(用連結檔案做的),並不是一個真的程式。
由於bzip2本身可以負責壓縮,也可以解壓縮,一物兩用(不見得每種壓縮和解壓縮程式都是這樣。)。所以,如果您記得 -d 選項,那就可以根本不用記 bunzip2 這個命令了。
但記得我們在 bzip2 命令時提過,bunzip2/bzip2程式解壓時所需的記憶體為:
記憶體用量=400KB+(block 大小×4)
因為解壓時的block 大小已經在壓縮時決定了,所以不用選項決定。但是,我們有改變那個“×4”倍的機會。如果我們在解壓時加了 -s 的選項,它會這樣去計算:
記憶體用量=400KB+(block大小×2.5)
很顯然,-s 是 small的意思,它可以節省一半記憶體用量。
表2-6所示為bzip2 和 bunzip2 壓縮和解壓縮時的記憶體用量總表。
表2-6 記憶體用量總表
壓縮時的選項 |
壓縮時用量 |
解壓時用量 |
加了 -s 選項解壓時用量 |
-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一般常用到的選項如下:
-v 解壓縮過程當中顯示進度。
-k 解壓縮,但保留原壓縮檔案。
同樣,這些選項也可以再加在 bzip2 -d 上,效果一樣。
tar
-c: 建立壓縮檔案
-x:解壓
-t:檢視內容
-r:向壓縮歸檔檔案末尾追加檔案
-u:更新原壓縮包中的檔案
這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。
下面的引數是根據需要在壓縮或解壓檔案時可選的。
-z:有gzip屬性的
-j:有bz2屬性的
-Z:有compress屬性的
-v:顯示所有過程
-O:將檔案解開到標準輸出
下面的引數-f是必須的
-f: 使用檔案名字 ,切記,這個引數是最後一個引數,後面只能接檔案名。
# tar -cf all.tar *.jpg
這條命令是將所有.jpg的檔案打成一個名為all.tar的包。-c是表示產生新的包,-f指定包的檔名。
# tar -rf all.tar *.gif
這條命令是將所有.gif的檔案增加到all.tar的包裡面去。-r是表示增加檔案的意思。
# tar -uf all.tar logo.gif
這條命令是更新原來tar包all.tar中logo.gif檔案,-u是表示更新檔案的意思。
# tar -tf all.tar
這條命令是列出all.tar包中所有檔案,-t是列出檔案的意思
# tar -xf all.tar
這條命令是解出all.tar包中所有檔案,-x是解開的意思
壓縮
tar –cvf jpg.tar *.jpg // 將目錄裡所有 jpg 檔案打包成 tar.j pg
tar –czf jpg.tar.gz *.jpg // 將目錄裡所有 jpg 檔案打包成 jpg.tar 後,並且將其用 gzip 壓縮,生成一個 gzip 壓縮過的包,命名為 jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg // 將目錄裡所有 jpg 檔案打包成 jpg.tar 後,並且將其用 bzip2 壓縮,生成一個 bzip2 壓縮過的包,命名為 jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg // 將目錄裡所有 jpg 檔案打包成 jpg.tar 後,並且將其用 compress 壓縮,生成一個 umcompress 壓縮過的包,命名為 jpg.tar.Z
rar a jpg.rar *.jpg //rar 格式的壓縮,需要先下載 rar for linux
zip jpg.zip *.jpg //zip 格式的壓縮,需要先下載 zip for linux
解壓
tar –xvf file.tar // 解壓 tar 包
tar -xzvf file.tar.gz // 解壓 tar.gz
tar -xjvf file.tar.bz2 // 解壓 tar.bz2
tar –xZvf file.tar.Z // 解壓 tar.Z
unrar e file.rar // 解壓 rar
unzip file.zip // 解壓 zip
總結
1、*.tar 用 tar –xvf 解壓
2、*.gz 用 gzip -d 或者 gunzip 解壓
3、*.tar.gz 和 *.tgz 用 tar –xzf 解壓
4、*.bz2 用 bzip2 -d 或者用 bunzip2 解壓
5、*.tar.bz2 用 tar –xjf 解壓
6、*.Z 用 uncompress 解壓
7、*.tar.Z 用 tar –xZf 解壓
8、*.rar 用 unrar e 解壓
9、*.zip 用 unzip 解壓