天天看點

Linux常見壓縮指令 - gzip,zcat,bzip2,bzcat

幾個常見的壓縮檔案擴充名

*.Z         compress 程式壓縮的檔案;
*.gz        gzip 程式壓縮的檔案;
*.bz2       bzip2 程式壓縮的檔案;
*.tar       tar 程式打包的資料,并沒有壓縮過;
*.tar.gz    tar 程式打包的檔案,其中并且經過 gzip 的壓縮
*.tar.bz2   tar 程式打包的檔案,其中并且經過 bzip2 的壓縮
      

compress

[[email protected] ~]# yum install ncompress
base        100% |=========================| 1.1 kB    00:00
updates     100% |=========================|  951 B    00:00
addons      100% |=========================|  951 B    00:00
extras      100% |=========================| 1.1 kB    00:00
Setting up Install Process
Parsing package install arguments
Resolving Dependencies              <==開始分析相依性
--> Running transaction check
---> Package ncompress.i386 0:4.2.4-47 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================
 Package       Arch   Version     Repository     Size
=======================================================
Installing:
 ncompress     i386   4.2.4-47    base            23 k

Transaction Summary
=======================================================
Install      1 Package(s)  <==最後分析所要安裝的軟體數
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 23 k
Is this ok [y/N]: y    <==這裡請按下 y 來确認安裝
Downloading Packages:
(1/1): ncompress-4.2.4-47 100% |=========================|  23 kB    00:00
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
Importing GPG key 0xE8562897 "CentOS-5 Key (CentOS 5 Official Signing Key) 
<[email protected]>" from http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
Is this ok [y/N]: y    <==這裡則是與數位簽章有關
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: ncompress          ######################### [1/1]

Installed: ncompress.i386 0:4.2.4-47
Complete!
      
[[email protected] ~]# compress [-rcv] 檔案或目錄  <==這裡是壓縮
[[email protected] ~]# uncompress 檔案.Z           <==這裡是解壓縮
選項與參數:
-r  :可以連同目錄下的檔案也同時給予壓縮呢!
-c  :将壓縮資料輸出成為 standard output (輸出到螢幕)
-v  :可以秀出壓縮後的檔案資訊以及壓縮過程中的一些檔名變化。

範例一:将 /etc/man.config 複制到 /tmp ,并加以壓縮
[[email protected] ~]# cd /tmp
[[email protected] tmp]# cp /etc/man.config .
[[email protected] tmp]# compress -v man.config
man.config:  -- replaced with man.config.Z Compression: 41.86%
[[email protected] tmp]# ls -l /etc/man.config /tmp/man*
-rw-r--r-- 1 root root 4617 Jan  6  2007 /etc/man.config   <==原有檔案
-rw-r--r-- 1 root root 2684 Nov 10 17:14 /tmp/man.config.Z <==經過壓縮的檔案!
      

        不知道你有沒有發現,複制到 /tmp 的 man.config 不見了!因為被壓縮成為 man.config.Z 羅 也就是說,在預設的情況中,被 compress 壓縮的原始檔案會不見,而壓縮檔案會被建立起來, 而且擴充名會是 *.Z。仔細看一下,檔案由原本的 4617bytes 降低到 2684bytes左右,确實有減少一點。

範例二:将剛剛的壓縮檔解開
[[email protected] tmp]# uncompress man.config.Z
[[email protected] tmp]# ll man*
-rw-r--r-- 1 root root 4617 Nov 10 17:14 man.config
      
範例三:将 man.config 壓縮成另外一個檔案來備份
[[email protected] tmp]# compress -c man.config > man.config.back.Z
[[email protected] tmp]# ll man*
-rw-r--r-- 1 root root 4617 Nov 10 17:14 man.config
-rw-r--r-- 1 root root 2684 Nov 10 17:24 man.config.back.Z
# 這個 -c 的選項比較有趣!他會将壓縮過程的資料輸出到螢幕上,而不是寫入成為 
# *.Z 的壓縮檔。是以,我們可以透過資料流重導向的方法将資料輸出成為另一個檔名。
# 關於資料流重導向,我們會在第十一章 bash 詳細談論的啦!
      

        再次強調,compress 已經很少人在使用了,因為這支程式無法解開 *.gz 的檔案,而 gzip 則可以解開 *.Z 的檔案, 是以,如果你的 distribution 上面沒有 compress 的話,那就不要進行上面的練習。

gzip,zcat

[[email protected] ~]# gzip [-cdtv#] 檔名
[[email protected] ~]# zcat 檔名.gz
選項與參數:
-c  :将壓縮的資料輸出到螢幕上,可透過資料流重導向來處理;
-d  :解壓縮的參數;
-t  :可以用來檢驗一個壓縮檔的一緻性~看看檔案有無錯誤;
-v  :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
-#  :壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6

範例一:将 /etc/man.config 複制到 /tmp ,并且以 gzip 壓縮
[[email protected] ~]# cd /tmp 
[[email protected] tmp]# cp /etc/man.config .
[[email protected] tmp]# gzip -v man.config
man.config:      56.1% -- replaced with man.config.gz
[[email protected] tmp]# ll /etc/man.config /tmp/man*
-rw-r--r-- 1 root root 4617 Jan  6  2007 /etc/man.config
-rw-r--r-- 1 root root 2684 Nov 10 17:24 /tmp/man.config.back.Z
-rw-r--r-- 1 root root 2057 Nov 10 17:14 /tmp/man.config.gz  <==gzip壓縮比較佳
      
範例二:由於 man.config 是文字檔,請将範例一的壓縮檔的内容讀出來!
[[email protected] tmp]# zcat man.config.gz
# 由於 man.config 這個原本的檔案是是文字檔,是以我們可以嘗試使用 zcat  去讀取!
# 此時螢幕上會顯示 man.config.gz 解壓縮之後的檔案内容!

範例三:将範例一的檔案解壓縮
[[email protected] tmp]# gzip -d man.config.gz
# 不要使用 gunzip 這個指令,不好背!使用 gzip -d 來進行解壓縮!
# 與 gzip 相反, gzip -d 會将原本的 .gz 删除,産生原本的 man.config 檔案。

範例四:将範例三解開的 man.config 用最佳的壓縮比壓縮,并保留原本的檔案
[[email protected] tmp]# gzip -9 -c man.config > man.config.gz
      

        cat 可以讀取純文字檔,那個 zcat 則可以讀取純文字檔被壓縮後的壓縮檔! 由於 gzip 這個壓縮指令主要想要用來取代 compress 的,是以不但 compress 的壓縮檔案可以使用 gzip 來解開,同時 zcat 這個指令可以同時讀取 compress 與 gzip 的壓縮檔.

bzip2,bzcat

[[email protected] ~]# bzip2 [-cdkzv#] 檔名
[[email protected] ~]# bzcat 檔名.bz2
選項與參數:
-c  :将壓縮的過程産生的資料輸出到螢幕上!
-d  :解壓縮的參數
-k  :保留原始檔案,而不會删除原始的檔案喔!
-z  :壓縮的參數
-v  :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
-#  :與 gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快!

範例一:将剛剛的 /tmp/man.config 以 bzip2 壓縮
[[email protected] tmp]# bzip2 -z man.config 
# 此時 man.config 會變成 man.config.bz2 !

範例二:将範例一的檔案内容讀出來!
[[email protected] tmp]# bzcat man.config.bz2
# 此時螢幕上會顯示 man.config.bz2 解壓縮之後的檔案内容!!

範例三:将範例一的檔案解壓縮
[[email protected] tmp]# bzip2 -d man.config.bz2

範例四:将範例三解開的 man.config 用最佳的壓縮比壓縮,并保留原本的檔案
[[email protected] tmp]# bzip2 -9 -c man.config > man.config.bz2
      

繼續閱讀