1. 程式人生 > >Linux下壓縮、解壓命令、壓縮比介紹說明

Linux下壓縮、解壓命令、壓縮比介紹說明

Linux下壓縮、解壓命令很多靈活度很大,不像在windows下winrar或360壓縮幾乎各佔版比江山,清一色的.rar .zip格式。Linux下常用的tar tar.gz tar.bz2 .Z等等格式種類繁多。而每種壓縮和解壓方式所耗CPU時間和壓縮比率也差異甚大。在此我一一列舉,希望不當之處,敬請各位指教。

1 各種壓縮 解壓命令Demo

(1) tar

僅僅做打包動作,相當於歸檔處理,不做壓縮;解壓也一樣,只是把歸檔檔案釋放出來。

打包歸檔:
tar -cvf examples.tar examples   (examples為shell執行路徑下的目錄)
釋放解壓:
tar -xvf examples.tar (解壓至當前shell執行目錄下)
tar -xvf examples.tar  -C /path (/path 解壓至其它路徑)
(2)tar.gz tgz (tar.gz和tgz只是兩種不同的書寫方式,後者是一種簡化書寫,等同處理)

Linux下使用非常普遍的一種壓縮方式,兼顧了壓縮時間(耗費CPU)和壓縮空間(壓縮比率) 其實這是對(1)的tar包進行gzip演算法的壓縮

打包壓縮:
tar -zcvf examples.tgz examples   (examples為shell執行路徑下的目錄)

釋放解壓:
tar -zxvf examples.tar (解壓至當前shell執行目錄下)
tar -zxvf examples.tar  -C /path (/path 解壓至其它路徑)
(3)tar.bz

Linux下壓縮比率較tgz大,即壓縮後佔用更小的空間,使得壓縮包看起來更小。但同時在壓縮,解壓的過程卻是非常耗費CPU時間。

打包壓縮:
tar -jcvf examples.tar.bz examples   (examples為shell執行路徑下的目錄)

釋放解壓:
tar -jxvf examples.tar.bz (解壓至當前shell執行目錄下)
tar -jxvf examples.tar.bz  -C /path (/path 解壓至其它路徑)
(4) tar.bz2

較tar.bz有著更快速的效率。所使用的命令與(3)相同,不再贅述。

(5) .gz
壓縮:
gzip-d examples.gz examples

解壓:
gunzip examples.gz
(6) .Z
壓縮:
compress files

解壓:
uncompress examples.Z
(7) tar.Z
壓縮:
tar -Zcvf examples.tar.Z examples

解壓:
tar -Zxvf examples.tar.Z
(8) .zip
壓縮:
zip -r examples.zip examples (examples為目錄)

解壓:
zip examples.zip
(9) .rar
壓縮:
rar -a examples.rar examples

解壓:
rar -x examples.rar
----------------------------------------------------------------------------------------

2 各種壓縮比率,佔用時間對比

為了保證能夠讓壓縮比率較為明顯,需選取一個內容較多、佔用空間較大的目錄作為Demo。我將自己Ubuntu 9.10中/user/local整個目錄作為範例,/user/local內所有檔案總計大小為877.7MB。

在此,我們定義 壓縮比率=原內容大小/壓縮後大小,壓縮比率越大,則表明壓縮後佔用空間的壓縮包越小

(1).tar
tar -cvf local.tar /usr/local

打包後 local.tar: 892.6MB, 耗費時間:55 s (秒)。此實驗打包後.tar後反倒比原來檔案內容更大,出乎意料! 壓縮比率為877.7/892.6=0.98(居然不是相同,等於1!)

 tar -xvf local.tar

釋放877.7MB(與原/usr/local大小完全相同,符合預期),耗費時間:78 s,比打包耗時

對於.tar而言,打包比釋放較為快速,但打包後的.tar比原目錄內容所佔空間要大。

(2) .tgz
tar -zcvf local.tgz /usr/local

打包後 local.tgz: 344.1MB, 耗費時間: 146 s (秒)。此實驗說明.tgz壓縮到50%以下的空間,具體為 壓縮比率=877.7/344.1 =2.55

tar -zxvf local.tar

解壓877.7MB,耗費時間: 56 s。 此與.tar 正相反,解壓比打包省時了很多,接近到打包時間的三分之一。

(3) .tar.bz
tar -jcvf local.tar.bz /usr/local

打包後local.tar.bz: 318.4 MB 耗費時間:330 s(即5 m 30 s,非常之漫長!) 壓縮比率為877.7/318.4=2.76

相對於.tgz的壓縮得更小巧,但優勢並不大,CPU耗費時間卻多了兩倍多。

tar -xcvf local.tar.bz

解壓877.7 MB,耗費時間: 128 s。 此與.tgz相似,解壓比打包省時很多,接近打包時間的三分之一。

(4) .tar.bz2
tar -jcvf local.tar.bz2 /usr/local

打包後local.tar.bz: 318.4 MB 耗費時間: 302 s 壓縮比率為877.7/318.4=2.76

與.tar.bz打包後大小完全一致,但CPU耗費時間稍少一點。因此從此實驗說明,網上一些言論稱tar.bz2比tar.bz有著更大的壓縮比率似乎說不通,只是速度稍快,高效了一些而已。

tar -xcvf local.tar.bz

解壓877.7 MB,耗費時間: 123 s。 此與.tar.bz相差不大,略有優勢。

由此可見,對於tar.bz 與tar.bz2打包後並無差異,只是tar.bz2較為快速,時間上略佔上風。

其它如.zip .Z .rar等壓縮方式在Linux下使用不是非常廣泛,在此不做進一步探討實驗。

綜合起來,在壓縮比率上: tar.bz=tar.bz2>tgz>tar 佔用空間與壓縮比率成反比: tar.bz=tar.bz2 耗費時間(打包,解壓) 打包:tar.bz>tar.bz2>tgz>tar 解壓: tar.bz>tar.bz2>tar>tgz 從效率角度來說,當然是耗費時間越短越好

因此,Linux下對於佔用空間與耗費時間的折衷多選用tgz格式,不僅壓縮率較高,而且打包、解壓的時間都較為快速,是較為理想的選擇。

如果對效率很關切,非常在乎時間的話,選擇tgz tar的方式都不錯。當然,如果disk空間較為緊張,非常在乎空間的話,選擇高壓縮比率的tar.bz2則更為適宜。

結論:

再一次印證了物理空間與時間的矛盾(想佔用更小的空間,得到高壓縮比率,肯定要犧牲較長的時間;反之,如果時間較為寶貴,要求快速,那麼所得的壓縮比率一定較小,當然會佔用更大的空間了)。

via:http://blog.sina.com.cn/s/blog_407abb0d0100lajg.html