Linux(四):Linux的打包和壓縮詳解

糖拌蕃茄發表於2021-01-05

關於Linux的檔案操作,這裡彙總一下打包和壓縮的一些命令,以及命令使用的詳情。

打包(歸檔)和壓縮

歸檔,也稱為打包,指的是一個檔案或目錄的集合,而這個集合被儲存在一個檔案中。歸檔檔案沒有經過壓縮,因此,它佔用的空間是其中所有檔案和目錄的總和。通常,歸檔總是會和系統(資料)備份聯絡在一起

和歸檔檔案類似,壓縮檔案也是一個檔案和目錄的集合,且這個集合也被儲存在一個檔案中,但它們的不同之處在於,壓縮檔案採用了不同的儲存方式,使其所佔用的磁碟空間比集合中所有檔案大小的總和要小。

壓縮是指利用演算法將檔案進行處理,已達到保留最大檔案資訊,而讓檔案體積變小的目的。其基本原理為,通過查詢檔案內的重複位元組,建立一個相同位元組的詞典檔案,並用一個程式碼表示。比如說,在壓縮檔案中,有不止一處出現了 "C語言中文網",那麼,在壓縮檔案時,這個詞就會用一個程式碼表示並寫入詞典檔案,這樣就可以實現縮小檔案體積的目的。由於計算機處理的資訊是以二進位制的形式表示的,因此,壓縮軟體就是把二進位制資訊中相同的字串以特殊字元標記,只要通過合理的數學計算,檔案的體積就能夠被大大壓縮。把一個或者多個檔案用壓縮軟體進行壓縮,形成一個檔案壓縮包,既可以節省儲存空間,有方便在網路上傳送。

如果你能夠理解檔案壓縮的基本原理,那麼很容易就能想到,對檔案進行壓縮,很可能損壞檔案中的內容,因此,壓縮又可以分為有失真壓縮和無失真壓縮。無失真壓縮很好理解,指的是壓縮資料必須準確無誤;有失真壓縮指的是即便丟失個別的資料,對檔案也不會造成太大的影響。有失真壓縮廣泛應用於動畫、聲音和影像檔案中,典型代表就是影碟檔案格式 mpeg、音樂檔案格式 mp3 以及影像檔案格式 jpg。

採用壓縮工具對檔案進行壓縮,生成的檔案稱為壓縮包,該檔案的體積通常只有原檔案的一半甚至更小。需要注意的是,壓縮包中的資料無法直接使用,使用前需要利用壓縮工具將檔案資料還原,此過程又稱解壓縮。

Linux 下,常用歸檔命令有 2 個,分別是 tar 和 dd(相對而言,tar 的使用更為廣泛);常用的壓縮命令有很多,比如 gzip、zip、bzip2 等。

Linux tar打包命令詳解

Linux 系統中,最常用的歸檔(打包)命令就是 tar,該命令可以將許多檔案一起儲存到一個單獨的磁帶或磁碟中進行歸檔。不僅如此,該命令還可以從歸檔檔案中還原所需檔案,也就是打包的反過程,稱為解打包。注:使用 tar 命令歸檔的包通常稱為 tar 包(tar 包檔案都是以“.tar”結尾的)

tar 命令最初被用來在磁帶上建立備份,現在可以在任何裝置上建立備份。利用 tar 命令可以把一大堆的檔案和目錄打包成一個檔案,這對於備份檔案或是將幾個檔案組合成為一個檔案進行網路傳輸是非常有用的。

tar命令做打包操作

當 tar 命令用於打包操作時,該命令的基本格式為:

[root@localhost ~]#tar [選項] 原始檔或目錄

  選項:

 tar 打包命令常用選項及含義
選項含義
-c 將多個檔案或目錄進行打包。
-A 追加 tar 檔案到歸檔檔案。
-f 包名 指定包的檔名。包的副檔名是用來給管理員識別格式的,所以一定要正確指定副檔名;
-v 顯示打包檔案過程;

 

 

例如我們要打包檔案:

#把config.xml打包為 config.xml.tar檔案
[root@localhost ~]# tar -cvf config.xml.tar config.xml

選項 "-cvf" 一般是習慣用法,可以忽略“-”,記住打包時需要指定打包之後的檔名,而且要用 ".tar" 作為副檔名

tar命令也可以打包多個檔案或目錄,只要用空格分開即可。例如:

#把anaconda-ks.cfg檔案和/tmp目錄打包成ana.tar檔案包
[root@localhost ~]# tar -cvf ana.tar anaconda-ks.cfg /tmp/

tar打包並壓縮

宣告一點,壓縮命令不能直接壓縮目錄,必須先用 tar 命令將目錄打包,然後才能用 gzip 命令或 bzip2 命令對打包檔案進行壓縮。

tar命令做解打包操作

當 tar 命令用於對 tar 包做解打包操作時,該命令的基本格式如下:

[root@localhost ~]#tar [選項] 壓縮包

選項:

 tar 解打包常用選項及含義
選項含義
-x 對 tar 包做解打包操作。
-f 指定要解壓的 tar 包的包名。
-t 只檢視 tar 包中有哪些檔案或目錄,不對 tar 包做解打包操作。
-C 目錄 指定解打包位置。
-v 顯示解打包的具體過程。

 其實解打包和打包相比,只是把打包選項 "-cvf" 更換為 "-xvf",例如我們要解包config.xml.tar

#解打包到當前目錄下
[root@localhost ~]# tar -xvf config.xml.tar

如果使用 "-xvf" 選項,則會把包中的檔案解壓到當前目錄下。如果想要指定解壓位置,則需要使用 "-C(大寫)" 選項。例如:

#把檔案包test.tar解打包到/tmp/目錄下
[root@localhost ~]# tar -xvf test.tar -C /tmp

如果只想檢視檔案包中有哪些檔案,則可以把解打包選項 "-x" 更換為測試選項 "-t"。例如:

[root@localhost ~]# tar -tvf test.tar

tar命令做 打包壓縮 和 解壓縮解打包 操作

你可能會覺得 Linux 實在太不智慧了,一個打包壓縮,居然還要先打包成 ".tar" 格式,再壓縮成 ".tar.gz" 或 ".tar.bz2" 格式。其實 tar 命令是可以同時打包壓縮的,前面的講解之所打包和壓縮分開,是為了讓大家瞭解在 Linux 中打包和壓縮的不同。當 tar 命令同時做打包壓縮的操作時,其基本格式如下:

[root@localhost ~]#tar [選項] 壓縮包 原始檔或目錄

此處常用的選項有以下 2 個,分別是:

    • -z:壓縮和解壓縮 ".tar.gz" 格式;
    • -j:壓縮和解壓縮 ".tar.bz2"格式。

例如:壓縮與解壓縮 ".tar.gz"格式

#把/temp/目錄直接打包壓縮為".tar.gz"格式,通過"-z"來識別格式,"-cvf"和打包選項一致
[root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/

解壓縮也只是在解打包選項 "-xvf" 前面加了一個 "-z" 選項。

#解壓縮與解打包".tar.gz"格式
[root@localhost ~]# tar -zxvf tmp.tar.gz

前面的選項 "-C" 用於指定解壓位置、"-t" 用於檢視壓縮包內容,在這裡同樣適用。

例如:壓縮與解壓縮 ".tar.bz2" 格式。

和".tar.gz"格式唯一的不同就是"-zcvf"選項換成了 "-jcvf",如下所示:

 

#打包壓縮為".tar.bz2"格式,注意壓縮包檔名
[root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/




#解壓縮與解打包".tar.bz2"格式
[root@localhost ~]# tar -jxvf tmp.tar.bz2

 

Linux zip命令:壓縮檔案或目錄

我們經常會在 Windows 系統上使用 “.zip”格式壓縮檔案,其實“.zip”格式檔案是 Windows 和 Linux 系統都通用的壓縮檔案型別,屬於幾種主流的壓縮格式(zip、rar等)之一,是一種相當簡單的分別壓縮每個檔案的儲存格式,本節要講的 zip 命令,類似於 Windows 系統中的 winzip 壓縮程式,其基本格式如下:

[root@localhost ~]#zip [選項] 壓縮包名 原始檔或源目錄列表

  注意,zip 壓縮命令需要手工指定壓縮之後的壓縮包名,注意寫清楚副檔名,以便解壓縮時使用。

選項:

zip 命令常用選項及含義
選項 含義
-r 遞迴壓縮目錄,及將制定目錄下的所有檔案以及子目錄全部壓縮。
-m 將檔案壓縮之後,刪除原始檔案,相當於把檔案移到壓縮檔案中。
-v 顯示詳細的壓縮過程資訊。
-q 在壓縮的時候不顯示命令的執行過程。
-壓縮級別 壓縮級別是從 1~9 的數字,-1 代表壓縮速度更快,-9 代表壓縮效果更好。
-u 更新壓縮檔案,即往壓縮檔案中新增新檔案。

 

例子:zip 命令的基本使用

#壓縮
[root@localhost ~]# zip ana.zip anaconda-ks.cfg

壓縮命令同時壓縮多個檔案

#同時壓縮多個檔案到test.zip壓縮包中
[root@localhost ~]# zip test.zip install.log install.log.syslog

使用 zip 命令壓縮目錄,需要使用“-r”選項,例如:

#壓縮目錄
[root@localhost ~]# zip -r dir1.zip dir1

Linux unzip命令:解壓zip檔案

unzip 命令可以檢視和解壓縮 zip 檔案。該命令的基本格式如下:

[root@localhost ~]# unzip [選項] 壓縮包名

選項:

unzip 命令常用選項及含義
選項 含義
-d 目錄名 將壓縮檔案解壓到指定目錄下。
-n 解壓時並不覆蓋已經存在的檔案。
-o 解壓時覆蓋已經存在的檔案,並且無需使用者確認。
-v 檢視壓縮檔案的詳細資訊,包括壓縮檔案中包含的檔案大小、檔名以及壓縮比等,但並不做解壓操作。
-t 測試壓縮檔案有無損壞,但並不解壓。
-x 檔案列表 解壓檔案,但不包含檔案列表中指定的檔案。

 不論是檔案壓縮包,還是目錄壓縮包,都可以直接解壓縮,例如:

#解壓縮
[root@localhost ~]# unzip dir1.zip

使用 -d 選項手動指定解壓縮位置,例如:

#把壓縮包解壓到指定位置
[root@localhost ~]# unzip -d /tmp/ ana.zip

Linux gzip命令:壓縮檔案或目錄

gzip 是 Linux 系統中經常用來對檔案進行壓縮和解壓縮的命令,通過此命令壓縮得到的新檔案,其副檔名通常標記為“.gz”。注意:gzip 命令只能用來壓縮檔案,不能壓縮目錄,即便指定了目錄,也只能壓縮目錄內的所有檔案。

gzip 命令的基本格式如下:

[root@localhost ~]# gzip [選項] 原始檔

命令中的原始檔,當進行壓縮操作時,指的是普通檔案;當進行解壓縮操作時,指的是壓縮檔案。該命令常用的選項及含義如下表 所示。

 gzip 命令常用選項及含義
選項含義
-c 將壓縮資料輸出到標準輸出中,並保留原始檔。
-d 對壓縮檔案進行解壓縮。
-r 遞迴壓縮指定目錄下以及子目錄下的所有檔案。
-v 對於每個壓縮和解壓縮的檔案,顯示相應的檔名和壓縮比。
-l 對每一個壓縮檔案,顯示以下欄位:
  • 壓縮檔案的大小;
  • 未壓縮檔案的大小;
  • 壓縮比;
  • 未壓縮檔案的名稱。
-數字 用於指定壓縮等級,-1 壓縮等級最低,壓縮比最差;-9 壓縮比最高。預設壓縮比是 -6。

 例:基本壓縮

#壓縮instal.log 檔案
[root@localhost ~]# gzip install.log

保留原始檔壓縮

在使用 gzip 命令壓縮檔案時,原始檔會消失,從而生成壓縮檔案。這時候如果不想讓原始檔消失:

#使用-c選項,但是不讓壓縮資料輸出到螢幕上,而是重定向到壓縮檔案中,這樣可以縮檔案的同時不刪除原始檔
[root@localhost ~]# gzip -c anaconda-ks.cfg >anaconda-ks.cfg.gz

壓縮目錄

#建立測試目錄,並在裡面建立幾個測試檔案
[root@localhost ~]# mkdir test
[root@localhost ~]# touch test/test1
[root@localhost ~]# touch test/test2
[root@localhost ~]# touch test/test3
#壓縮目錄,並沒有報錯
[root@localhost ~]# gzip -r test/



#但是檢視發現test目錄依然存在,並沒有變為壓縮檔案
[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 命令只會壓縮,不能打包,所以才會出現沒有打包目錄,而只把目錄下的檔案進行壓縮的情況。

Linux gunzip命令:解壓縮檔案或目錄

gunzip 是一個使用廣泛的解壓縮命令,它用於解壓被 gzip 壓縮過的檔案(副檔名為 .gz)。

對於解壓被 gzip 壓縮過的檔案,還可以使用 gzip 自己,即 gzip -d 壓縮包。gunzip 命令的基本格式為:

[root@localhost ~]# gunzip [選項] 檔案

選項:

gunzip 命令常用選項及含義
選項含義
-r 遞迴處理,解壓縮指定目錄下以及子目錄下的所有檔案。
-c 把解壓縮後的檔案輸出到標準輸出裝置。
-f 強制解壓縮檔案,不理會檔案是否已存在等情況。
-l 列出壓縮檔案內容。
-v 顯示命令執行過程。
-t 測試壓縮檔案是否正常,但不對其做解壓縮操作。

 例:直接解壓縮檔案

[root@localhost ~]# gunzip install.log.gz

  當然,"gunzip -r"依然只會解壓縮目錄下的檔案,而不會解打包。要想解壓縮".gz"格式,還可以使用 "gzip -d"命令,例如:

[root@localhost ~]# gzip -d anaconda-ks.cfg.gz

要解壓縮目錄下的內容,則需使用 "-r" 選項,例如:

[root@localhost ~]# gunzip -r test/

注意,如果我們壓縮的是一個純文字檔案,則可以直接使用 zcat 命令在不解壓縮的情況下檢視這個文字檔案中的內容。例如:

[root@localhost ~]# zcat anaconda-ks.cfg.gz

 

Linux bzip2命令:壓縮檔案(.bz2格式)

bzip2 命令同 gzip 命令類似,只能對檔案進行壓縮(或解壓縮),對於目錄只能壓縮(或解壓縮)該目錄及子目錄下的所有檔案。當執行壓縮任務完成後,會生成一個以“.bz2”為字尾的壓縮包。".bz2"格式是 Linux 的另一種壓縮格式,從理論上來講,".bz2"格式的演算法更先進、壓縮比更好;而 ".gz"格式相對來講的時間更快。

bzip2 命令的基本格式如下:

[root@localhost ~]# bzip2 [選項] 原始檔

選項:

 bzip2 命令常用選項及含義
選項含義
-d 執行解壓縮,此時該選項後的原始檔應為標記有 .bz2 字尾的壓縮包檔案。
-k bzip2 在壓縮或解壓縮任務完成後,會刪除原始檔案,若要保留原始檔案,可使用此選項。
-f bzip2 在壓縮或解壓縮時,若輸出檔案與現有檔案同名,預設不會覆蓋現有檔案,若使用此選項,則會強制覆蓋現有檔案。
-t 測試壓縮包檔案的完整性。
-v 壓縮或解壓縮檔案時,顯示詳細資訊。
-數字 這個引數和 gzip 命令的作用一樣,用於指定壓縮等級,-1 壓縮等級最低,壓縮比最差;-9 壓縮比最高

 注意,gzip 只是不會打包目錄,但是如果使用“-r”選項,則可以分別壓縮目錄下的每個檔案;而 bzip2 命令則根本不支援壓縮目錄,也沒有“-r”選項

 例:直接壓縮檔案

#壓縮成".bz2"格式,此壓縮命令會在壓縮的同時刪除原始檔。
[root@localhost ~]# bzip2 anaconda-ks.cfg

壓縮的同時保留原始檔

#壓縮
[root@localhost ~]# bzip2 -k install.log.syslog

 

Linux bunzip2命令:bz2格式的解壓縮命令

要解壓“.bz2”格式的壓縮包檔案,除了使用“bzip2 -d 壓縮包名”命令外,還可以使用 bunzip2 命令。bunzip2 命令的使用和 gunzip 命令大致相同,bunzip2 命令只能用於解壓檔案,即便解壓目錄,也是解壓該目錄以及所含子目錄下的所有檔案。

bunzip2 命令的基本格式為:

[root@localhost ~]# bunzip2 [選項] 原始檔

  選項:

 bunzip2 命令選項及含義
選項含義
-k 解壓縮後,預設會刪除原來的壓縮檔案。若要保留壓縮檔案,需使用此引數。
-f 解壓縮時,若輸出的檔案與現有檔案同名時,預設不會覆蓋現有的檔案。若要覆蓋,可使用此選項。
-v 顯示命令執行過程。
-L 列出壓縮檔案內容。

 先試試使用 gunzip2 命令來進行解壓縮,例如:

[root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2

".bz2" 格式也可以使用 "bzip2 -d 壓縮包" 命令來進行解壓縮,例如:

[root@localhost ~]# bzip2 -d install.log.syslog.bz2

和 ".gz" 格式一樣,".bz2" 格式壓縮的純文字檔案也可以不解壓縮直接檢視,使用的命令是 bzcat。例如:

[root@localhost ~]# bzcat install.log.syslog.bz2

 

相關文章