?
在Windows下,我們接觸最多的壓縮文件是.rar格式的,但在Linux下,不能識別這種格式,它有自己獨特的壓縮工具。但.zip格式的文件在Windows和Linux下都能使用。使用壓縮文件,不僅能節(jié)省磁盤空間,而且在傳輸時還能節(jié)省網(wǎng)絡帶寬。
Linux下最常見的壓縮文件通常都是.tar.gz格式的,除此之外,還有.tar、.gz、.bz2、.zip等格式。阿銘曾介紹過Linux下的文件后綴名可加可不加,但壓縮文件最好加上后綴名。這是為了判斷壓縮文件是由哪種壓縮工具所壓縮的,而后才能正確地解壓縮這個文件。下面介紹Linux下常見的后綴名所對應的壓縮工具。
.gz:表示由gzip壓縮工具壓縮的文件。
.bz2:表示由bzip2壓縮工具壓縮的文件。
.tar:表示由tar打包程序打包的文件(tar并沒有壓縮功能,只是把一個目錄合并成一個文件)。
.tar.gz:可以理解為先由tar打包,然后再由gzip壓縮。
.tar.bz2:可以理解為先由tar打包,然后再由bzip2壓縮。
.tar.xz:可以理解成先由tar打包,然后再xz壓縮。
9.1 gzip壓縮工具
gzip命令的格式為gzip [-d#] filename,其中#為1~9的數(shù)字。
-d:該參數(shù)在解壓縮時使用。
-#:這里的#為數(shù)字,表示壓縮等級,-1為最差,-9為最好,-6為默認。
下面阿銘通過一個小例子來說明gzip的用法,示例命令如下:
?
#?mkdir?/tmp/8 #?cd?/tmp/8 #?mkdir?test #?mv?/tmp/1.txt?test/ #?cd?test #?ls 1.txt #?gzip?1.txt #?ls 1.txt.gz
?
gzip后面直接跟文件名,表示在當前目錄下壓縮該文件,而原文件也會消失。解壓該壓縮文件的方法如下所示:
?
#?gzip?-d?1.txt.gz #?ls 1.txt
?
命令gzip -d后面跟壓縮文件表示解壓壓縮文件。gzip不支持壓縮目錄,壓縮目錄時會報錯,如下所示:
?
#?cd?.. #?gzip?test gzip: test is a directory -- ignored #?ls?test 1.txt
?
關于-#選項,我們平時很少用到,使用默認壓縮級別足夠了。
9.2 bzip2壓縮工具
bzip2命令的格式為bzip2 [-dz] filename,它只有-z(壓縮)和-d(解壓縮)兩個常用選項。壓縮級別有1~9,默認級別是9。壓縮時,加或不加-z選項都可以壓縮文件。示例命令如下:
?
#?cd?test #?bzip2?1.txt #?ls 1.txt.bz2 #?bzip2?-d?1.txt.bz2 #?bzip2?-z?1.txt #?ls 1.txt.bz2
?
bzip2命令也不可以壓縮目錄,壓縮目錄時會報錯,如下所示:
?
#?cd?.. #?bzip2?test bzip2: Input file test is a directory.
?
9.3 xz壓縮工具
xz命令的格式為xz [-dz] filename,和bzip2類似,阿銘只介紹-z(壓縮)和-d(解壓縮)這兩個常用選項。壓縮時,加或不加-z選項都可以壓縮文件。示例命令如下:
?
#?bzip2?–d?1.txt.bz2 #?xz?1.txt #?ls 1.txt.xz #?xz?-d?1.txt.xz #?xz?-z?1.txt #?ls 1.txt.xz
?
xz命令同樣也不可以壓縮目錄,壓縮目錄時會報錯,如下所示:
?
#?cd?.. #?xz?test xz: test: Is a directory, skipping
?
8.4 tar打包工具
tar本身就是一個打包工具,可以把目錄打包成一個文件,它把所有文件整合成一個大文件,方便復制或者移動。該命令的格式為tar [-zjxcvfpP] filename tar,它有多個選項,其中不常用的阿銘做了標注。
-z:表示同時用gzip壓縮。
-j:表示同時用bzip2壓縮。
-J:表示同時用xz壓縮。
-x:表示解包或者解壓縮。
-t:表示查看tar包里的文件。
-c:表示建立一個tar包或者壓縮文件包。
-v:表示可視化。
-f:后面跟文件名(即-f filename,表示壓縮后的文件名為filename,或者解壓文件filename。需要注意的是,如果是多個參數(shù)組合的情況下,請把-f參數(shù)寫到最后面。
-p:表示使用原文件的屬性,壓縮前什么屬性壓縮后還什么屬性。(不常用)
-P:表示可以使用絕對路徑。(不常用)
--exclude filename:表示在打包或壓縮時,不要將filename文件包括在內(nèi)。(不常用)
具體操作過程如下:
?
#?cd?test #?xz?–d?1.txt.xz #?mkdir?test111 #?touch?test111/2.txt #?echo?"nihao"?>?!$ echo "nihao" > test111/2.txt #?cp?1.txt?test111/ #?yum?install?tree?//安裝tree命令,用來查看目錄樹形結(jié)構(gòu) #?tree?. . |-- 1.txt `-- test111 |-- 1.txt `-- 2.txt 1 directory, 3 files # tar -cvf test111.tar test111 test111/ test111/2.txt test111/1.txt #?ls 1.txt test111 test111.tar
?
首先,在test目錄下建立test111目錄,然后在test111目錄下建立2.txt文件,并寫入nihao到2.txt中。接著,用tar命令把test111打包成test111.tar(請記住,-f參數(shù)后緊跟打包后的文件名,然后再跟需要打包的目錄或者文件)。使用tar命令打包后,原文件不會消失。在上例中,阿銘使用了一個特殊符號!$,它表示上一條命令的最后一個參數(shù),這里是指test111/2.txt。
tar命令不僅可以打包目錄,也可以打包文件,打包時可不加-v選項,表示不可視化。示例命令如下:
?
#?rm?-f?test111.tar #?tar?-cf?test.tar?test111?1.txt #?ls 1.txt test111 test.tar
?
其實不管是打包還是解包,原來的文件是不會刪除的,而且它會覆蓋當前已經(jīng)存在的文件或者目錄。下面我們先刪除原來的test111目錄,然后解包test.tar,如下所示:
?
#?rm?-rf?test111 #?ls 1.txt test.tar #?tar?-xvf?test.tar test111/ test111/2.txt test111/1.txt 1.txt
?
在日常管理工作中,你也許會用到--exclude選項,下面就來簡單介紹一下它的用法,示例命令如下:
?
#?tar?-cvf?test111.tar?--exclude?1.txt?test111//不用刪除test111.tar,會自動覆蓋 test111/ test111/2.txt
?
請注意,上例中test111.tar放到了--exclude選項的前面。該選項除了可以排除文件,也可以排除目錄,示例命令如下:
?
#?mkdir?test111/test222 #?tar?-cvf?test111.tar?--exclude?test222?test111 test111/ test111/2.txt test111/1.txt
?
9.4.1 打包的同時使用gzip壓縮
tar命令非常好用的一個功能就是可以在打包時直接壓縮,它支持gzip壓縮、bzip2壓縮和xz壓縮。使用-z選項,可以壓縮成gzip格式的文件,示例命令如下:
?
#?tar?-czvf?test111.tar.gz?test111 test111/ test111/2.txt test111/1.txt #?ls 1.txttest111 test111.tar.gz test.tar
?
使用-tf選項,可以查看包或者壓縮包的文件列表,示例命令如下:
?
#?tar?-tf?test111.tar.gz test111/ test111/2.txt test111/1.txt #?tar?-tf?test.tar test111/ test111/2.txt test111/1.txt 1.txt
?
使用-zxvf選項,可以解壓.tar.gz格式的壓縮包,示例命令如下:
?
#?rm?-rf?test111 #?ls 1.txt test111.tar.gz test.tar #?tar?-zxvf?test111.tar.gz test111/ test111/2.txt test111/1.txt #?ls 1.txttest111 test111.tar.gz test.tar
?
8.4.2 打包的同時使用bzip2壓縮
和gzip壓縮不同的是,這里使用-cjvf選項來壓縮,壓縮過程如下:
?
# tar -cjvf test111.tar.bz2 test111 test111/ test111/2.txt test111/1.txt #?ls 1.txttest111 test111.tar.bz2 test111.tar.gz test.tar
?
使用-tf選項來查看壓縮包的文件列表,示例命令如下:
?
#?tar?-tf?test111.tar.bz2 test111/ test111/2.txt test111/1.txt
?
使用-jxvf選項來解壓.tar.bz2格式的壓縮包,示例命令如下:
?
#?tar?-jxvf?test111.tar.bz2 test111/ test111/2.txt test111/1.txt
?
關于打包的同時使用xz壓縮工具壓縮,阿銘不再介紹,方法同9.4.1節(jié)和9.4.2節(jié)。
9.5 使用zip壓縮
zip壓縮包在Windows和Linux中都比較常用,它可以壓縮目錄和文件,壓縮目錄時,需要指定目錄下的文件。示例命令如下:
?
#?zip?1.txt.zip??1.txt adding: 1.txt (deflated 64%) #?zip?test111.zip?test111/* adding: test111/1.txt (deflated 64%) adding: test111/2.txt (stored 0%) adding: test111/test222/ (stored 0%)
?
說明: zip后面先跟目標文件名,即壓縮后的自定義壓縮包名,然后跟要壓縮的文件或者目錄。若你的Linux沒有該命令,需要使用yum工具安裝它,如下所示:
?
#?yum?install?-y??zip
?
做完試驗后就會發(fā)現(xiàn),當目錄下還有二級目錄甚至更多級目錄時,zip命令僅僅是把二級目錄本身壓縮而已。如果想要一并壓縮二級目錄下的文件,必須加上-r選項,如下所示:
?
#?zip?-r?test111.zip?test111/ updating: test111/ (stored 0%) updating: test111/1.txt (deflated 64%) updating: test111/2.txt (stored 0%) updating: test111/test222/ (stored 0%)
?
這樣就不需要用test111/*了。
解壓.zip格式文件時并不用zip命令,而是用unzip命令。例如,解壓1.txt.zip的命令為:
?
# unzip 1.txt.zip
?
若系統(tǒng)中沒有unzip命令,需要使用yum工具安裝它,如下所示:
?
#?yum?install?-y?unzip
?
9.6 zcat、bzcat命令的使用
上面介紹了使用-t選項可以查看tar壓縮包的文件列表。對于gzip2或者bzip2壓縮格式的文本文檔,我們也可以使用zcat、bzcat命令直接查看文檔內(nèi)容。示例命令如下:
?
#?cp?/etc/passwd?./11.txt #?cp?11.txt?22.txt #?gzip?11.txt #?bzip2?22.txt #?zcat?11.txt.gz #?bzcat?22.txt.bz2
?
這樣就可以查看11.txt或22.txt文件的內(nèi)容了,大家猜一猜用什么命令可以查看xz壓縮文件的內(nèi)容呢?
審核編輯:湯梓紅
評論
查看更多