常見的歸檔壓縮工具
-
- 概述
-
-
- gzip指令
- bzip2指令
- zip指令
- tar指令
- cpio指令
- 典型案例
-
概述
無論是在Linux作業系統還是Windows作業系統裡壓縮檔案節省空間總是必不可少的一項操作,因為這樣不僅可以節省磁盤空間,更可以在上傳檔案時節省所耗資源。而Linux系統常用的歸檔壓縮指令常有:tar,cpio,gzip,bzip2,zip等。
gzip指令
gzip可以用來壓縮大的、較少使用的檔案以節省磁盤空間,是Linux系統中常用的一個壓縮和解壓縮的指令;Linux作業系統中比較流行的壓縮檔案格式就是由gzip指令和tar指令一起構成。
文法:gzip 【參數】【目标檔案或目錄】> 【打包後的檔案.gz】
參數 | 功能 |
---|---|
-a | 使用ASCII文字模式 |
-c | 把壓縮後的檔案輸出到标準輸出裝置,不去更動原始檔案 |
-d | 解開壓縮檔案 |
-f | 強行壓縮檔案,不理會檔案名稱或硬連接配接是否存在以及該檔案是否為符号連接配接 |
-h | 線上幫助 |
-l | 列出壓縮檔案的相關資訊 |
-L | 顯示版本與版權資訊 |
-n | 壓縮檔案時,不儲存原來的檔案名稱及時間戳記 |
-N | 壓縮檔案時,儲存原來的檔案名稱及時間戳記 |
-q | 不顯示警告資訊 |
-r | 遞歸處理,将指定目錄下的所有檔案及子目錄一并處理 |
-S<壓縮字尾字元串> | 更改壓縮字尾字元串 |
-t | 測試壓縮檔案是否正确無誤 |
-v | 顯示指令執行過程 |
-V | 顯示版本資訊 |
示例:
簡單利用gzip指令來壓縮檔案,并嘗試解壓
[email protected]:~/Desktop/Text$ ls
homework practice shell yasuo ys.tar.zip
[email protected]chine:~/Desktop/Text$ gzip -c homework > homework.gz
[email protected]:~/Desktop/Text$ ls
homework homework.gz practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ mv homework ./practice/
[email protected]:~/Desktop/Text$ ls
homework.gz practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ gzip -d homework.gz
[email protected]:~/Desktop/Text$ ls
homework practice shell yasuo ys.tar.zip
圖例:

bzip2指令
bzip2指令采用新的壓縮演算法,壓縮效果比傳統的LZ77/LZ78壓縮算法要優秀不少。bzip2指令壓縮完檔案後會産生.bz2的壓縮檔案,并删除原始的檔案。
文法:bzip2 【參數】【檔案或目錄】
參數 | 功能 |
---|---|
-c | 将壓縮與解壓縮的結果送到标準輸出 |
-d | 執行解壓縮 |
-f | bzip2在壓縮或解壓縮時,若輸出檔案與現有檔案同名,預設不會覆寫現有檔案。若要覆寫,請使用此參數 |
-h | 顯示幫助 |
-k | bzip2在壓縮或解壓縮後,會删除原始的檔案。若要保留原始檔案,請使用此參數 |
-s | 降低程式執行時記憶體的使用量 |
-t | 測試.bz2壓縮檔案的完整性 |
-v | 壓縮或解壓縮檔案時,顯示詳細的資訊 |
-z | 強制執行壓縮 |
-V | 顯示版本資訊 |
示例:
1.首先嘗試-k指令(即不删除源檔案)壓縮,然後解壓
[email protected]:~/Desktop/Text$ ls
homework practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ bzip2 -k homework
[email protected]:~/Desktop/Text$ ls
homework homework.bz2 practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ mv homework ./practice/
[email protected]:~/Desktop/Text$ bzip2 -d homework.bz2
[email protected]:~/Desktop/Text$
圖示:
2.接下來嘗試删除源檔案壓縮
[email protected]:~/Desktop/Text$ ls
homework practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ bzip2 homework
[email protected]:~/Desktop/Text$ ls
homework.bz2 practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$
圖示:
zip指令
zip是個使用廣泛的壓縮程式,檔案經它壓縮後會另外産生具有".zip"擴充名的壓縮檔案;zip指令擁有打包壓縮功能(即将目标目錄下所有檔案打包壓縮為新檔案)。
文法:zip 【參數】 【打包後的檔案.zip】 【目标檔案或目錄】
參數 | 功能 |
---|---|
-A 調整可執行的自動解壓縮檔案 | |
-b【目錄 | 指定目錄存放壓縮檔案 |
-c | 替每個被壓縮的檔案加上注釋 |
-d | 從壓縮檔案内删除指定的檔案 |
-D | 壓縮檔案内不建立目錄名稱 |
-F | 嘗試修複已損壞的壓縮檔案 |
-g | 将檔案壓縮後附加在原有的壓縮檔案後 |
-i【樣式】 | 隻壓縮符合條件的檔案 |
-j | 隻儲存檔案名稱及其内容,而不存放任何目錄名稱 |
-J | 删除壓縮檔案前面不必要的資料 |
-k | 使用MS-DOS相容格式的檔案名稱 |
-L | 顯示版權資訊 |
-m | 将檔案壓縮并加入壓縮檔案後,删除原始檔案 |
-n【字元串】 | 不壓縮具有指定字元串的檔案 |
-o | 以壓縮檔案内擁有最新更改時間的檔案為準 |
-q | 不顯示指令執行過程 |
-r | 遞歸處理 |
-S | 包含系統和隐藏檔案 |
-t【時間】 | 把壓縮檔案的日期設成指定的日期 |
-T | 檢查備份檔案内的每個檔案是否正确 |
-u | 更換較新的檔案到壓縮檔案内 |
-v | 顯示指令執行過程 |
-w | 在檔案名稱裡假如版本編号,本參數僅在VMS作業系統下有效 |
-x【樣式】 | 壓縮時排除符合條件的檔案 |
-X | 不儲存額外的檔案屬性 |
-z | 給壓縮檔案加注釋 |
示例:
1.通過zip指令壓縮上級目錄下的shell目錄下的所有檔案
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa
[email protected]:~/Desktop/Text/practice$ zip -r shell.zip ../shell
adding: ../shell/ (stored 0%)
adding: ../shell/shell2 (deflated 19%)
adding: ../shell/shell1 (deflated 16%)
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell.zip
2.利用unzip指令解壓,檢視指令執行情況
[email protected]:~/Desktop/Text/practice$ unzip shell.zip
Archive: shell.zip
warning: skipped "../" path component(s) in ../shell/
creating: shell/
warning: skipped "../" path component(s) in ../shell/shell2
inflating: shell/shell2
warning: skipped "../" path component(s) in ../shell/shell1
inflating: shell/shell1
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.zip
[email protected]:~/Desktop/Text/practice$ cd shell/
[email protected]:~/Desktop/Text/practice/shell$ ls
shell1 shell2
[email protected]:~/Desktop/Text/practice/shell$
圖例:
tar指令
tar是用來建立,還原備份檔案的工具程式,它可以加入,解開備份檔案内的檔案,經常同其他壓縮指令連用。
文法:tar 【參數】【打包後的檔案】 【原檔案】
參數 | 功能 |
---|---|
-A | 新增檔案到已存在的備份檔案 |
-b【區塊數目】 | 設定每筆記錄的區塊數目,每個區塊大小為12Bytes |
-B | 讀取資料時重設區塊大小 |
-c | 建立新的備份檔案 |
-C【目的目錄】 | 切換到指定的目錄 |
-d | 對比備份檔案内和檔案系統上的檔案的差異 |
-f【備份檔案】 | 指定備份檔案 |
-F【Script檔案】 | 每次更換錄音帶時,就執行指定的Script檔案 |
-g | 處理GNU格式的大量備份 |
-G | 處理舊的GNU格式的大量備份 |
-h | 不建立符号連接配接,直接複制該連接配接所指向的原始檔案 |
-i | 忽略備份檔案中的0 Byte區塊,也就是EOF |
-k | 解開備份檔案時,不覆寫已有的檔案 |
-K【檔案】 | 從指定的檔案開始還原 |
-l | 複制的檔案或目錄存放的檔案系統,必須與tar指令執行時所處的檔案系統相同,否則不予複制 |
-L【媒體容量】 | 設定存放每體的容量,機關以1024 Bytes計算 |
-m | 還原檔案時,不變更檔案的更改時間 |
-M | 在建立,還原備份檔案或列出其中的内容時,采用多卷冊模式 |
-N | 隻将較指定日期更新的檔案儲存到備份檔案裡 |
-o | 将資料寫入備份檔案時使用V7格式 |
-O | 把從備份檔案裡還原的檔案輸出到标準輸出裝置 |
-p | 用原來的檔案權限還原檔案 |
-P | 檔案名使用絕對名稱,不移除檔案名稱前的"/"号 |
-r | 新增檔案到已存在的備份檔案的結尾部分 |
-R | 列出每個資訊在備份檔案中的區塊編号 |
-s | 還原檔案的順序和備份檔案内的存放順序相同 |
-S | 倘若一個檔案内含大量的連續0位元組,則将此檔案存成稀疏檔案 |
-t | 列出備份檔案的内容 |
-T【範本檔案】 | 指定範本檔案,其内含有一個或多個範本樣式,讓tar解開或建立符合設定條件的檔案 |
-u | 僅置換較備份檔案内的檔案更新的檔案 |
-U | 解開壓縮檔案還原檔案之前,先解除檔案的連接配接 |
-v | 顯示指令執行過程 |
-V【卷冊名稱】 | 建立使用指定的卷冊名稱的備份檔案 |
-w | 遭遇問題時先詢問使用者 |
-W | 寫入備份檔案後,确認檔案正确無誤 |
-x | 從備份檔案中還原檔案 |
-X【範本檔案】 | 指定範本檔案,其内含有一個或多個範本樣式,讓ar排除符合設定條件的檔案 |
-z | 通過gzip指令處理備份檔案 |
-Z | 通過compress指令處理備份檔案 |
示例:
1.簡單的打包操作,将所屬兩個檔案打包成一個
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.zip
[email protected]:~/Desktop/Text/practice$ tar -cf shell.tar shell shell.zip
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.tar shell.zip
[email protected]:~/Desktop/Text/practice$
圖例:
2.檢視打包内容
[email protected]:~/Desktop/Text/practice$ tar -tvf shell.tar
drwxr-xr-x liuyan/liuyan 0 2020-02-29 16:37 shell/
-rwxr--r-- liuyan/liuyan 163 2020-02-29 16:37 shell/shell2
-rwxr--r-- liuyan/liuyan 172 2020-02-29 16:27 shell/shell1
-rw-rw-r-- liuyan/liuyan 760 2020-03-09 21:55 shell.zip
[email protected]:~/Desktop/Text/practice$
圖例:
3.簡單解壓操作
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell.tar
[email protected]:~/Desktop/Text/practice$ tar -xvf shell.tar
shell/
shell/shell2
shell/shell1
shell.zip
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.tar shell.zip
圖例:
cpio指令
- cpio 可以從 cpio 或 tar 格式的歸檔包中存入和讀取檔案, 歸檔包是一種包含其他檔案和有關資訊的檔案。( 有關資訊包括:檔案名, 屬主, 時标(timestamp), 和通路權限) 歸檔包可以是磁盤上的 其他檔案, 也可以是錄音帶或管道。*
文法:cpio 【參數】 【操作符(視操作而定)】 【檔案名】
參數 | 功能 |
---|---|
-0 | 接受新增列控制字元,通常配合find指令的"-print0"參數使用 |
-a | 重新設定檔案的存取時間 |
-A | 附加到已存在的備份檔中,且這個備份檔必須存放在磁盤上,而不能放置于錄音帶機裡 |
-b | 此參數的效果和同時指定"-sS"參數相同 |
-B | 将輸入/輸出的區塊大小改成5210 Bytes |
-c | 使用舊ASCII備份格式 |
-C【區塊大小】 | 設定輸入/輸出的區塊大小,機關是Byte |
-d | 如有需要cpio會自行建立目錄 |
-E【範本檔案】 | 指定範本檔案 |
-f | 讓cpio解開所有不符合範本條件的檔案 |
-F【備份檔】 | 指定備份檔的名稱 |
-H【備份格式】 | 指定備份時欲使用的檔案格式 |
-i | 執行copy-in模式,還原備份檔 |
-l【備份檔】 | 指定備份檔的名稱 |
-l | 以硬連接配接的方式取代複制檔案,可在copy-pass模式下運用 |
-L | 不建立符号連接配接,直接複制該連接配接所指向的原始檔案 |
-m | 不去更換檔案的更改時間 |
-M【回傳資訊】 | 設定更換儲存媒體的資訊 |
-n | 使用"-tv"參數列出備份檔的内容時,若再加上參數"-n",則會以使用者識别碼和群組識别碼替代擁有者和群組名稱列出檔案清單 |
-o | 執行copy-out模式,建立備份檔 |
-O【備份檔】 | 指定備份檔的名稱 |
- | p |
-r | 當有檔案名稱需要更動時,采用互動模式 |
-s | 交換每對位元組的内容 |
-S | 交換每半個位元組的内容 |
-t | 将輸入的内容呈現出來 |
-u | 置換所有檔案,不論日期時間的新舊與否,皆不予詢問而直接覆寫 |
-v | 詳細顯示指令的執行過程 |
-V | 執行指令時,在每個檔案的執行程式前面加上"."号 |
示例:
1.簡單的備份操作
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.tar shell.zip
[email protected]:~/Desktop/Text/practice$ ls |cpio -ov > ./practice.cpio
55
555
aa
cpio: File practice.cpio grew, 512 new bytes not copied
practice.cpio
shell
shell.tar
shell.zip
24 blocks
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa practice.cpio shell shell.tar shell.zip
圖例:
2.将其他檔案删除,解壓備份檔案檢視指令執行情況
[email protected]:~/Desktop/Text/practice$ rm -rf 55 555 aa shell shell.tar shell.zip
[email protected]:~/Desktop/Text/practice$ ls
practice.cpio
[email protected]:~/Desktop/Text/practice$ cpio -ivd < practice.cpio
55
555
aa
cpio: practice.cpio not created: newer or same age version exists
practice.cpio
shell
shell.tar
shell.zip
24 blocks
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa practice.cpio shell shell.tar shell.zip
圖例:
典型案例
将某檔案備份命名采用檔案名+日期+tar+zip
原理:首先利用find指令查找檔案,然後利用xargs收集檔案,再利用tar指令打包,最後利用cpio指令備份命名
[email protected]:~/Desktop/Text$ find ./practice/* |xargs tar -jcf |cpio -ov > ./practice$(date +%F).tar.zip
1 block
[email protected]:~/Desktop/Text$ ls
practice practice2020-03-09.tar.zip shell test
[email protected]:~/Desktop/Text$