在Linux中有很多的壓縮公用程式,本文主要介紹gzip/gunzip/zcat、bzip2/bunzip2/bzcat、tar、zip/unzip。
為了方便示範。我們首先建立一個名為“test.txt”的文字檔,其內容如下所示:
Hello!This is a test!End of file.
1. gzip/gunzip/zcat
gzip用於壓縮普通檔案;gunzip用於解壓縮 gzip 所建立的壓縮檔;gcat用於查看gzip建立的壓縮檔源內容。
gzip只能用於壓縮普通檔案,注意,是普通檔案。不能將整個目錄壓縮為單個檔案,如果我們以遞迴形式壓縮目錄,則gzip會遞迴的進入每個子目錄並依次壓縮其中的普通檔案。gzip建立的壓縮檔預設以.gz、-gz和.z為副檔名,具體為哪個要視檔案系統類型而定,表1展示了不同尾碼名所對應的檔案系統。
| 副檔名 |
檔案系統 |
| .gz |
Linux上的EXT檔案系統 |
| -gz |
VFS(虛擬檔案系統) |
| .z |
MS-DOS(微軟磁碟作業系統)、Windows NT FAT、OS/2 FAT、Atari |
gzip的參數選項如下所示:
-c:將壓縮後的資料輸出都螢幕(不產生壓縮檔)。-d:解壓縮檔案-f:強制覆蓋已有的檔案-k:保留源檔案(預設是不保留的)-t:測試壓縮檔的完整性(與-v選項一起使用)-r:遞迴的壓縮所有檔案-v:詳細的輸出執行過程(預設不輸出)-1:以速度最快壓縮。-9:以壓縮率最好壓縮。(可以從1-9變化,預設是6)
例如我們要壓縮之前建立的”test.txt”檔案,可以輸入以下指令:
$ gzip -krv test.txttest.txt: 0.0% -- replaced with test.txt.gz
注意,gzip壓縮公用程式預設是將源檔案替換為壓縮檔,如果要保留源檔案,需要顯式的指定’-k’參數,以上-krv表示保留源檔案、遞迴的壓縮所有檔案並詳細的輸出壓縮過程。
從輸出中可以看到有三個參數:源檔案–test.txt,壓縮比–0.0%和輸出檔案–test.gz。
如果我們要解壓縮剛剛建立的檔案,只需輸入以下指令
$ gzip -dv test.txtgzip: test.txt already exists; do you wish to overwrite (y or n)? ytest.txt.gz: 0.0% -- replaced with test.txt
從輸出可以看到,由於目前的目錄下存在”test.txt”檔案, 所以會出現是否覆蓋的提示,如果我們不想讓它輸出次內容。可以加上”-f”參數。
gunzip是gzip的解壓縮版,也就是只提供解壓縮功能,其參數與gzip一樣(不包括”-d”參數),比如我們要解壓縮剛剛建立的test.txt.gz可以如下輸入:
$ gunzip -v test.txt.gztest.txt.gz: 0.0% -- replaced with test.txt
zcat是用來查看gzip壓縮檔對應的源檔案的內容。使用如下:
$ zcat test.txt.gzThis is a test!
2. bizp2/bunzip2/bcat
bzip2 相比 gzip 具有更好的壓縮比, 它的用法幾乎與gzip 相同。bzip2建立的壓縮檔以.bz2為副檔名,下面是bzip2的常用參數:
-c:將壓縮後的資料輸出都螢幕(不產生壓縮檔)。-d:解壓縮檔案-f:強制覆蓋已有的檔案-k:保留源檔案(預設是不保留的)-t:測試壓縮檔的完整性(與-v選項一起使用)-r:遞迴的壓縮所有檔案-v:詳細的輸出執行過程(預設不輸出)-z:壓縮檔(預設參數)
bunzip2用於解壓縮bzip2建立的壓縮檔,bcat則是查看bzip2壓縮檔對應源檔案的內容。它們的使用方法與gzip/gunzip/zcat類似,不在這裡贅述,請參照gzip/gunzip/zcat的用法。 3. tar
上面的gzip和bizp2命令大多隻針對單一的檔案進行壓縮,雖然也可以對目錄進行遞迴的壓縮,但是是基於單個檔案進行壓縮的,也就是說會為該目錄下每一個檔案建立一個壓縮檔,而不是建立一整個歸檔檔案,這時,就要使用到tar命令了,它即可單簡單的將多個目錄打包(不進行壓縮),也可以通過gzip和bzip2對打包的內容加以壓縮。tar命令有多個參數支援多種操作。下面就來看看tar命令的使用吧。
tar命令的參數分為多個種類,包括主操作、操作修飾、重寫控制、裝置分塊、選擇歸檔格式、裝置分塊、壓縮選項和提示選項等等。本文指介紹主操作、選擇歸檔格式、壓縮選項和提示選項。這些參數如下:
/* 主操作選項 */-A:追加tar格式的歸檔檔案到歸檔-c:建立一個新的歸檔-r:追加檔案到歸檔結尾-t:列出歸檔檔案的內容-u:更新歸檔中的檔案,如果歸檔中不存在則添加。-x:從歸檔中解出檔案/* 選擇歸檔格式選項 */-H:後接文檔格式,文檔格式有以下幾種 gnu-- 1.13.x(預設格式也是常用的) oldgnu--GNU format as per tar <=1.12 pax--POSIX 1003.1-2001(pax) posix--等同於 pax ustar-- POSIX 1003.1-1988 (ustar) 格式 V7--old V7 tar 格式/* 壓縮選項 */-a:根據副檔名自動確定壓縮程式-j:通過bizp2來壓縮-z:通過gzip來壓縮-Z:通過compress來壓縮/* 其他選項 */-v:詳細的輸出壓縮過程-f:指定壓縮後的檔案名稱或要解壓縮的檔案名稱
比如我麼要壓縮上述的test.txt檔案,可以輸入如下命令:
$ tar -jcf test.txt.tar.bz2 test.txt
或者
$ tar -zcf test.txt.tar.gz test.txt
或者
$ tar -acf test.txt.tar.gz test.txt
上面第一種和第二種分別使用不同的壓縮公用程式進行壓縮,第三種是根據副檔名自動確定壓縮公用程式。如果我們要解壓,只用將”-c”參數換成”-x”參數即可。
當然我們也可以不進行壓縮,只是將多個檔案進行簡單的歸檔,可以如下輸入:
$ tar -cf [output-file] [input-file]
其中output-file和input-file分別指定輸出檔案名和要進行歸檔的檔案的名字。