1. 程式人生 > >linux解壓縮命令

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 解壓