Linux(四):Linux的打包和壓縮詳解
關(guān)于Linux的文件操作,這里匯總一下打包和壓縮的一些命令,以及命令使用的詳情。

打包(歸檔)和壓縮
歸檔,也稱為打包,指的是一個(gè)文件或目錄的集合,而這個(gè)集合被存儲在一個(gè)文件中。歸檔文件沒有經(jīng)過壓縮,因此,它占用的空間是其中所有文件和目錄的總和。通常,歸檔總是會和系統(tǒng)(數(shù)據(jù))備份聯(lián)系在一起。
和歸檔文件類似,壓縮文件也是一個(gè)文件和目錄的集合,且這個(gè)集合也被存儲在一個(gè)文件中,但它們的不同之處在于,壓縮文件采用了不同的存儲方式,使其所占用的磁盤空間比集合中所有文件大小的總和要小。
壓縮是指利用算法將文件進(jìn)行處理,已達(dá)到保留最大文件信息,而讓文件體積變小的目的。其基本原理為,通過查找文件內(nèi)的重復(fù)字節(jié),建立一個(gè)相同字節(jié)的詞典文件,并用一個(gè)代碼表示。比如說,在壓縮文件中,有不止一處出現(xiàn)了 "C語言中文網(wǎng)",那么,在壓縮文件時(shí),這個(gè)詞就會用一個(gè)代碼表示并寫入詞典文件,這樣就可以實(shí)現(xiàn)縮小文件體積的目的。由于計(jì)算機(jī)處理的信息是以二進(jìn)制的形式表示的,因此,壓縮軟件就是把二進(jìn)制信息中相同的字符串以特殊字符標(biāo)記,只要通過合理的數(shù)學(xué)計(jì)算,文件的體積就能夠被大大壓縮。把一個(gè)或者多個(gè)文件用壓縮軟件進(jìn)行壓縮,形成一個(gè)文件壓縮包,既可以節(jié)省存儲空間,有方便在網(wǎng)絡(luò)上傳送。
如果你能夠理解文件壓縮的基本原理,那么很容易就能想到,對文件進(jìn)行壓縮,很可能損壞文件中的內(nèi)容,因此,壓縮又可以分為有損壓縮和無損壓縮。無損壓縮很好理解,指的是壓縮數(shù)據(jù)必須準(zhǔn)確無誤;有損壓縮指的是即便丟失個(gè)別的數(shù)據(jù),對文件也不會造成太大的影響。有損壓縮廣泛應(yīng)用于動畫、聲音和圖像文件中,典型代表就是影碟文件格式 mpeg、音樂文件格式 mp3 以及圖像文件格式 jpg。
采用壓縮工具對文件進(jìn)行壓縮,生成的文件稱為壓縮包,該文件的體積通常只有原文件的一半甚至更小。需要注意的是,壓縮包中的數(shù)據(jù)無法直接使用,使用前需要利用壓縮工具將文件數(shù)據(jù)還原,此過程又稱解壓縮。
Linux 下,常用歸檔命令有 2 個(gè),分別是 tar 和 dd(相對而言,tar 的使用更為廣泛);常用的壓縮命令有很多,比如 gzip、zip、bzip2 等。
Linux tar打包命令詳解
Linux 系統(tǒng)中,最常用的歸檔(打包)命令就是 tar,該命令可以將許多文件一起保存到一個(gè)單獨(dú)的磁帶或磁盤中進(jìn)行歸檔。不僅如此,該命令還可以從歸檔文件中還原所需文件,也就是打包的反過程,稱為解打包。注:使用 tar 命令歸檔的包通常稱為 tar 包(tar 包文件都是以“.tar”結(jié)尾的)。
tar 命令最初被用來在磁帶上創(chuàng)建備份,現(xiàn)在可以在任何設(shè)備上創(chuàng)建備份。利用 tar 命令可以把一大堆的文件和目錄打包成一個(gè)文件,這對于備份文件或是將幾個(gè)文件組合成為一個(gè)文件進(jìn)行網(wǎng)絡(luò)傳輸是非常有用的。
tar命令做打包操作
當(dāng) tar 命令用于打包操作時(shí),該命令的基本格式為:
[root@localhost ~]#tar [選項(xiàng)] 源文件或目錄
選項(xiàng):
| 選項(xiàng) | 含義 |
|---|---|
| -c | 將多個(gè)文件或目錄進(jìn)行打包。 |
| -A | 追加 tar 文件到歸檔文件。 |
| -f 包名 | 指定包的文件名。包的擴(kuò)展名是用來給管理員識別格式的,所以一定要正確指定擴(kuò)展名; |
| -v | 顯示打包文件過程; |
例如我們要打包文件:
#把config.xml打包為 config.xml.tar文件 [root@localhost ~]# tar -cvf config.xml.tar config.xml
選項(xiàng) "-cvf" 一般是習(xí)慣用法,可以忽略“-”,記住打包時(shí)需要指定打包之后的文件名,而且要用 ".tar" 作為擴(kuò)展名
tar命令也可以打包多個(gè)文件或目錄,只要用空格分開即可。例如:
#把a(bǔ)naconda-ks.cfg文件和/tmp目錄打包成ana.tar文件包 [root@localhost ~]# tar -cvf ana.tar anaconda-ks.cfg /tmp/
tar打包并壓縮
聲明一點(diǎn),壓縮命令不能直接壓縮目錄,必須先用 tar 命令將目錄打包,然后才能用 gzip 命令或 bzip2 命令對打包文件進(jìn)行壓縮。
tar命令做解打包操作
當(dāng) tar 命令用于對 tar 包做解打包操作時(shí),該命令的基本格式如下:
[root@localhost ~]#tar [選項(xiàng)] 壓縮包
選項(xiàng):
| 選項(xiàng) | 含義 |
|---|---|
| -x | 對 tar 包做解打包操作。 |
| -f | 指定要解壓的 tar 包的包名。 |
| -t | 只查看 tar 包中有哪些文件或目錄,不對 tar 包做解打包操作。 |
| -C 目錄 | 指定解打包位置。 |
| -v | 顯示解打包的具體過程。 |
其實(shí)解打包和打包相比,只是把打包選項(xiàng) "-cvf" 更換為 "-xvf",例如我們要解包c(diǎn)onfig.xml.tar
#解打包到當(dāng)前目錄下 [root@localhost ~]# tar -xvf config.xml.tar
如果使用 "-xvf" 選項(xiàng),則會把包中的文件解壓到當(dāng)前目錄下。如果想要指定解壓位置,則需要使用 "-C(大寫)" 選項(xiàng)。例如:
#把文件包test.tar解打包到/tmp/目錄下 [root@localhost ~]# tar -xvf test.tar -C /tmp
如果只想查看文件包中有哪些文件,則可以把解打包選項(xiàng) "-x" 更換為測試選項(xiàng) "-t"。例如:
[root@localhost ~]# tar -tvf test.tar
tar命令做 打包壓縮 和 解壓縮解打包 操作
你可能會覺得 Linux 實(shí)在太不智能了,一個(gè)打包壓縮,居然還要先打包成 ".tar" 格式,再壓縮成 ".tar.gz" 或 ".tar.bz2" 格式。其實(shí) tar 命令是可以同時(shí)打包壓縮的,前面的講解之所打包和壓縮分開,是為了讓大家了解在 Linux 中打包和壓縮的不同。當(dāng) tar 命令同時(shí)做打包壓縮的操作時(shí),其基本格式如下:
[root@localhost ~]#tar [選項(xiàng)] 壓縮包 源文件或目錄
此處常用的選項(xiàng)有以下 2 個(gè),分別是:
-
- -z:壓縮和解壓縮 ".tar.gz" 格式;
-
- -j:壓縮和解壓縮 ".tar.bz2"格式。
例如:壓縮與解壓縮 ".tar.gz"格式
#把/temp/目錄直接打包壓縮為".tar.gz"格式,通過"-z"來識別格式,"-cvf"和打包選項(xiàng)一致 [root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/
解壓縮也只是在解打包選項(xiàng) "-xvf" 前面加了一個(gè) "-z" 選項(xiàng)。
#解壓縮與解打包".tar.gz"格式 [root@localhost ~]# tar -zxvf tmp.tar.gz
前面的選項(xiàng) "-C" 用于指定解壓位置、"-t" 用于查看壓縮包內(nèi)容,在這里同樣適用。
例如:壓縮與解壓縮 ".tar.bz2" 格式。
和".tar.gz"格式唯一的不同就是"-zcvf"選項(xiàng)換成了 "-jcvf",如下所示:
#打包壓縮為".tar.bz2"格式,注意壓縮包文件名 [root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/ #解壓縮與解打包".tar.bz2"格式 [root@localhost ~]# tar -jxvf tmp.tar.bz2
Linux zip命令:壓縮文件或目錄
我們經(jīng)常會在 Windows 系統(tǒng)上使用 “.zip”格式壓縮文件,其實(shí)“.zip”格式文件是 Windows 和 Linux 系統(tǒng)都通用的壓縮文件類型,屬于幾種主流的壓縮格式(zip、rar等)之一,是一種相當(dāng)簡單的分別壓縮每個(gè)文件的存儲格式,本節(jié)要講的 zip 命令,類似于 Windows 系統(tǒng)中的 winzip 壓縮程序,其基本格式如下:
[root@localhost ~]#zip [選項(xiàng)] 壓縮包名 源文件或源目錄列表
注意,zip 壓縮命令需要手工指定壓縮之后的壓縮包名,注意寫清楚擴(kuò)展名,以便解壓縮時(shí)使用。
選項(xiàng):
| 選項(xiàng) | 含義 |
| -r | 遞歸壓縮目錄,及將制定目錄下的所有文件以及子目錄全部壓縮。 |
| -m | 將文件壓縮之后,刪除原始文件,相當(dāng)于把文件移到壓縮文件中。 |
| -v | 顯示詳細(xì)的壓縮過程信息。 |
| -q | 在壓縮的時(shí)候不顯示命令的執(zhí)行過程。 |
| -壓縮級別 | 壓縮級別是從 1~9 的數(shù)字,-1 代表壓縮速度更快,-9 代表壓縮效果更好。 |
| -u | 更新壓縮文件,即往壓縮文件中添加新文件。 |
例子:zip 命令的基本使用
#壓縮 [root@localhost ~]# zip ana.zip anaconda-ks.cfg
壓縮命令同時(shí)壓縮多個(gè)文件
#同時(shí)壓縮多個(gè)文件到test.zip壓縮包中 [root@localhost ~]# zip test.zip install.log install.log.syslog
使用 zip 命令壓縮目錄,需要使用“-r”選項(xiàng),例如:
#壓縮目錄 [root@localhost ~]# zip -r dir1.zip dir1
Linux unzip命令:解壓zip文件
unzip 命令可以查看和解壓縮 zip 文件。該命令的基本格式如下:
[root@localhost ~]# unzip [選項(xiàng)] 壓縮包名
選項(xiàng):
| 選項(xiàng) | 含義 |
| -d 目錄名 | 將壓縮文件解壓到指定目錄下。 |
| -n | 解壓時(shí)并不覆蓋已經(jīng)存在的文件。 |
| -o | 解壓時(shí)覆蓋已經(jīng)存在的文件,并且無需用戶確認(rèn)。 |
| -v | 查看壓縮文件的詳細(xì)信息,包括壓縮文件中包含的文件大小、文件名以及壓縮比等,但并不做解壓操作。 |
| -t | 測試壓縮文件有無損壞,但并不解壓。 |
| -x 文件列表 | 解壓文件,但不包含文件列表中指定的文件。 |
不論是文件壓縮包,還是目錄壓縮包,都可以直接解壓縮,例如:
#解壓縮 [root@localhost ~]# unzip dir1.zip
使用 -d 選項(xiàng)手動指定解壓縮位置,例如:
#把壓縮包解壓到指定位置 [root@localhost ~]# unzip -d /tmp/ ana.zip
Linux gzip命令:壓縮文件或目錄
gzip 是 Linux 系統(tǒng)中經(jīng)常用來對文件進(jìn)行壓縮和解壓縮的命令,通過此命令壓縮得到的新文件,其擴(kuò)展名通常標(biāo)記為“.gz”。注意:gzip 命令只能用來壓縮文件,不能壓縮目錄,即便指定了目錄,也只能壓縮目錄內(nèi)的所有文件。
gzip 命令的基本格式如下:
[root@localhost ~]# gzip [選項(xiàng)] 源文件
命令中的源文件,當(dāng)進(jìn)行壓縮操作時(shí),指的是普通文件;當(dāng)進(jìn)行解壓縮操作時(shí),指的是壓縮文件。該命令常用的選項(xiàng)及含義如下表 所示。
| 選項(xiàng) | 含義 |
|---|---|
| -c | 將壓縮數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出中,并保留源文件。 |
| -d | 對壓縮文件進(jìn)行解壓縮。 |
| -r | 遞歸壓縮指定目錄下以及子目錄下的所有文件。 |
| -v | 對于每個(gè)壓縮和解壓縮的文件,顯示相應(yīng)的文件名和壓縮比。 |
| -l | 對每一個(gè)壓縮文件,顯示以下字段:
|
| -數(shù)字 | 用于指定壓縮等級,-1 壓縮等級最低,壓縮比最差;-9 壓縮比最高。默認(rèn)壓縮比是 -6。 |
例:基本壓縮
#壓縮instal.log 文件 [root@localhost ~]# gzip install.log
保留源文件壓縮
在使用 gzip 命令壓縮文件時(shí),源文件會消失,從而生成壓縮文件。這時(shí)候如果不想讓源文件消失:
#使用-c選項(xiàng),但是不讓壓縮數(shù)據(jù)輸出到屏幕上,而是重定向到壓縮文件中,這樣可以縮文件的同時(shí)不刪除源文件 [root@localhost ~]# gzip -c anaconda-ks.cfg >anaconda-ks.cfg.gz
壓縮目錄
#建立測試目錄,并在里面建立幾個(gè)測試文件 [root@localhost ~]# mkdir test [root@localhost ~]# touch test/test1 [root@localhost ~]# touch test/test2 [root@localhost ~]# touch test/test3 #壓縮目錄,并沒有報(bào)錯(cuò) [root@localhost ~]# gzip -r test/ #但是查看發(fā)現(xiàn)test目錄依然存在,并沒有變?yōu)閴嚎s文件 [root@localhost ~]# ls anaconda-ks.cfg anaconda-ks.cfg.gz install.log.gz install.log.syslog test [root@localhost ~]# ls test/ testl .gz test2.gz test3.gz
gzip命令不會打包目錄,而是把目錄下所有的子文件分別壓縮,在 Linux 中,打包和壓縮是分開處理的。而 gzip 命令只會壓縮,不能打包,所以才會出現(xiàn)沒有打包目錄,而只把目錄下的文件進(jìn)行壓縮的情況。
Linux gunzip命令:解壓縮文件或目錄
gunzip 是一個(gè)使用廣泛的解壓縮命令,它用于解壓被 gzip 壓縮過的文件(擴(kuò)展名為 .gz)。
對于解壓被 gzip 壓縮過的文件,還可以使用 gzip 自己,即 gzip -d 壓縮包。gunzip 命令的基本格式為:
[root@localhost ~]# gunzip [選項(xiàng)] 文件
選項(xiàng):
| 選項(xiàng) | 含義 |
|---|---|
| -r | 遞歸處理,解壓縮指定目錄下以及子目錄下的所有文件。 |
| -c | 把解壓縮后的文件輸出到標(biāo)準(zhǔn)輸出設(shè)備。 |
| -f | 強(qiáng)制解壓縮文件,不理會文件是否已存在等情況。 |
| -l | 列出壓縮文件內(nèi)容。 |
| -v | 顯示命令執(zhí)行過程。 |
| -t | 測試壓縮文件是否正常,但不對其做解壓縮操作。 |
例:直接解壓縮文件。
[root@localhost ~]# gunzip install.log.gz
當(dāng)然,"gunzip -r"依然只會解壓縮目錄下的文件,而不會解打包。要想解壓縮".gz"格式,還可以使用 "gzip -d"命令,例如:
[root@localhost ~]# gzip -d anaconda-ks.cfg.gz
要解壓縮目錄下的內(nèi)容,則需使用 "-r" 選項(xiàng),例如:
[root@localhost ~]# gunzip -r test/
注意,如果我們壓縮的是一個(gè)純文本文件,則可以直接使用 zcat 命令在不解壓縮的情況下查看這個(gè)文本文件中的內(nèi)容。例如:
[root@localhost ~]# zcat anaconda-ks.cfg.gz
Linux bzip2命令:壓縮文件(.bz2格式)
bzip2 命令同 gzip 命令類似,只能對文件進(jìn)行壓縮(或解壓縮),對于目錄只能壓縮(或解壓縮)該目錄及子目錄下的所有文件。當(dāng)執(zhí)行壓縮任務(wù)完成后,會生成一個(gè)以“.bz2”為后綴的壓縮包。".bz2"格式是 Linux 的另一種壓縮格式,從理論上來講,".bz2"格式的算法更先進(jìn)、壓縮比更好;而 ".gz"格式相對來講的時(shí)間更快。
bzip2 命令的基本格式如下:
[root@localhost ~]# bzip2 [選項(xiàng)] 源文件
選項(xiàng):
| 選項(xiàng) | 含義 |
|---|---|
| -d | 執(zhí)行解壓縮,此時(shí)該選項(xiàng)后的源文件應(yīng)為標(biāo)記有 .bz2 后綴的壓縮包文件。 |
| -k | bzip2 在壓縮或解壓縮任務(wù)完成后,會刪除原始文件,若要保留原始文件,可使用此選項(xiàng)。 |
| -f | bzip2 在壓縮或解壓縮時(shí),若輸出文件與現(xiàn)有文件同名,默認(rèn)不會覆蓋現(xiàn)有文件,若使用此選項(xiàng),則會強(qiáng)制覆蓋現(xiàn)有文件。 |
| -t | 測試壓縮包文件的完整性。 |
| -v | 壓縮或解壓縮文件時(shí),顯示詳細(xì)信息。 |
| -數(shù)字 | 這個(gè)參數(shù)和 gzip 命令的作用一樣,用于指定壓縮等級,-1 壓縮等級最低,壓縮比最差;-9 壓縮比最高 |
注意,gzip 只是不會打包目錄,但是如果使用“-r”選項(xiàng),則可以分別壓縮目錄下的每個(gè)文件;而 bzip2 命令則根本不支持壓縮目錄,也沒有“-r”選項(xiàng)。
例:直接壓縮文件
#壓縮成".bz2"格式,此壓縮命令會在壓縮的同時(shí)刪除源文件。 [root@localhost ~]# bzip2 anaconda-ks.cfg
壓縮的同時(shí)保留源文件
#壓縮 [root@localhost ~]# bzip2 -k install.log.syslog
Linux bunzip2命令:bz2格式的解壓縮命令
要解壓“.bz2”格式的壓縮包文件,除了使用“bzip2 -d 壓縮包名”命令外,還可以使用 bunzip2 命令。bunzip2 命令的使用和 gunzip 命令大致相同,bunzip2 命令只能用于解壓文件,即便解壓目錄,也是解壓該目錄以及所含子目錄下的所有文件。
bunzip2 命令的基本格式為:
[root@localhost ~]# bunzip2 [選項(xiàng)] 源文件
選項(xiàng):
| 選項(xiàng) | 含義 |
|---|---|
| -k | 解壓縮后,默認(rèn)會刪除原來的壓縮文件。若要保留壓縮文件,需使用此參數(shù)。 |
| -f | 解壓縮時(shí),若輸出的文件與現(xiàn)有文件同名時(shí),默認(rèn)不會覆蓋現(xiàn)有的文件。若要覆蓋,可使用此選項(xiàng)。 |
| -v | 顯示命令執(zhí)行過程。 |
| -L | 列出壓縮文件內(nèi)容。 |
先試試使用 gunzip2 命令來進(jìn)行解壓縮,例如:
[root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2
".bz2" 格式也可以使用 "bzip2 -d 壓縮包" 命令來進(jìn)行解壓縮,例如:
[root@localhost ~]# bzip2 -d install.log.syslog.bz2
和 ".gz" 格式一樣,".bz2" 格式壓縮的純文本文件也可以不解壓縮直接查看,使用的命令是 bzcat。例如:
[root@localhost ~]# bzcat install.log.syslog.bz2

浙公網(wǎng)安備 33010602011771號