天天看點

RHCSA&RHCE(RHCE7)學習知識點-- Linux檔案的壓縮,打包與備份

壓縮檔案的用途與技術

如果我們記錄數字1,計算機使用二進制,1會在最右邊占據1個 bit,而其他的7個 bits 将會自動的被填上0,那7個bits應該是『空的』才對,為了要滿足目前我們的作業系統資料的存取,是以就會将該資料轉為 byte 的型态來記錄,将這些沒有使用到的空間『丢』出來,以讓檔案占用的空間變小,這就是壓縮的技術

『壓縮過的檔案』無法直接被使用,必須将他『還原』回來未壓縮前的模樣才能使用,這就是『解壓縮』,而壓縮後與壓縮的檔案所占用的磁盤空間大小,被稱為是『壓縮比』

Linux 系統常見的壓縮指令

幾個常見的壓縮檔案案擴充名:

*.Z         compress 程式壓縮的檔案;

*.zip       zip 程式壓縮的檔案;

*.gz        gzip 程式壓縮的檔案;

*.bz2       bzip2 程式壓縮的檔案;

*.xz        xz 程式壓縮的檔案;

*.tar       tar 程式打包的資料,并沒有壓縮過;

*.tar.gz    tar 程式打包的檔案,其中并且經過 gzip 的壓縮

*.tar.bz2   tar 程式打包的檔案,其中并且經過 bzip2 的壓縮

*.tar.xz    tar 程式打包的檔案,其中并且經過 xz 的壓縮

Linux上常見的壓縮指令就是 gzip, bzip2以及最新的xz。gzip是由GNU計劃所開發出來的壓縮指令,該指令已經取代了compress。後來GNU又開發出 bzip2 及 xz 這幾個壓縮比更好的壓縮指令。壓縮指令通常僅能針對一個檔案來壓縮與解壓縮,而tar可以将很多檔案『打包』成為一個檔案,也可以打包目錄。後來,GNU計劃中,将整個tar與壓縮的功能結合在一起。

gzip, zcat/zmore/zless/zgrep

gzip可以解開compress, zip與gzip等軟體所壓縮的檔案

$ gzip [-cdtv#] 檔案名

$ zcat 檔案名.gz

選項與參數:

-c  :将壓縮的資料輸出到螢幕上,可通過資料流重導向來處理;

-d  :解壓縮的參數;

-t  :可以用來檢驗一個壓縮檔案的一緻性~看看檔案有無錯誤;

-v  :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;

-#  :# 為數字的意思,代表壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6

當你使用 gzip 進行壓縮時,在預設的狀态下原本的檔案會被壓縮成為.gz 的檔案名,源檔案就不再存在

cat/more/less 可以使用不同的方式來讀取純文字檔,那個 zcat/zmore/zless 則可以對應于 cat/more/less 的方式來讀取純文字檔被壓縮後的壓縮檔案,可以通過 zgrep 來搜尋關鍵詞

bzip2, bzcat/bzmore/bzless/bzgrep

bzip2 則是為了取代 gzip 并提供更佳的壓縮比而來的

$ bzip2 [-cdkzv#] 檔案名

$ bzcat 檔案名.bz2

選項與參數:

-c  :将壓縮的過程産生的資料輸出到螢幕上!

-d  :解壓縮的參數

-k  :保留源檔案,而不會删除原始的檔案喔!

-z  :壓縮的參數 (預設值,可以不加)

-v  :可以顯示出原檔案/壓縮檔案案的壓縮比等資訊;

-#  :與 gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快

xz, xzcat/xzmore/xzless/xzgrep

後來還推出了 xz 這個壓縮比更高的軟體

$ xz [-dtlkc#] 檔案名

$ xcat 檔案名.xz

選項與參數:

-d  :就是解壓縮啊!

-t  :測試壓縮檔案的完整性,看有沒有錯誤

-l  :列出壓縮檔案的相關資訊

-k  :保留原本的檔案不删除

-c  :同樣的,就是将資料由螢幕上輸出的意思

-#  :同樣的,也有較佳的壓縮比的意思

xz 最大的問題是時間太長,使用xz 的運算時間比 gzip長很多

打包指令: tar

tar 可以将多個目錄或檔案打包成一個大檔案,同時還可以通過 gzip/bzip2/xz 的支援,将該檔案同時進行壓縮

$ tar [-z|-j|-J] [cv] [-f 待建立的新檔案名] filename... <==打包與壓縮

$ tar [-z|-j|-J] [tv] [-f 既有的 tar檔案名]             <==檢視檔案名

$ tar [-z|-j|-J] [xv] [-f 既有的 tar檔案名] [-C 目錄]   <==解壓縮

選項與參數:

-c  :建立打封包件,可搭配 -v 來檢視過程中被打包的檔案名(filename)

-t  :檢視打封包件的内容含有哪些檔案名,重點在檢視『檔案名』就是了;

-x  :解打包或解壓縮的功能,可以搭配 -C (大寫) 在特定目錄解開

      特别留意的是, -c, -t, -x 不可同時出現在一串指令列中。

-z  :通過 gzip  的支援進行壓縮/解壓縮:此時檔案名最好為 *.tar.gz

-j  :通過 bzip2 的支援進行壓縮/解壓縮:此時檔案名最好為 *.tar.bz2

-J  :通過 xz    的支援進行壓縮/解壓縮:此時檔案名最好為 *.tar.xz

      特别留意, -z, -j, -J 不可以同時出現在一串指令列中

-v  :在壓縮/解壓縮的過程中,将正在處理的檔案名顯示出來!

-f filename:-f 後面要立刻接要被處理的檔案名!建議-f單獨寫一個選項

-C 目錄   :這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。

其他後續練習會使用到的選項介紹:

-p(小寫) :保留備份資料的原本權限與屬性,常用于備份(-c)重要的配置檔案

-P(大寫) :保留絕對路徑,亦即允許備份資料中含有根目錄存在之意;

--exclude=FILE:在壓縮的過程中,不要将 FILE 打包!

最簡單的使用 tar 的方式:

  • 壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的檔案或目錄名稱
  • 查 詢:tar -jtv -f filename.tar.bz2
  • 解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄

其他常見的壓縮與備份工具

dd

dd 可以讀取磁盤裝置的内容(幾乎是直接讀取扇區"sector"),然後将整個裝置備份成一個檔案

# dd if="input_file" of="output_file" bs="block_size" count="number"

選項與參數:

if   :就是 input file也可以是裝置

of   :就是 output file 也可以是裝置;

bs   :規劃的一個 block 的大小,若未指定則預設是 512 bytes(一個 sector 的大小)

count:多少個 bs 的意思

cpio

cpio 可以備份任何東西,包括裝置檔案

# cpio -ovcB  > [file|device] <==備份

# cpio -ivcdu < [file|device] <==還原

# cpio -ivct  < [file|device] <==檢視

備份會使用到的選項與參數:

  -o :将資料 copy 輸出到檔案或裝置上

  -B :讓預設的 Blocks 可以增加至 5120 bytes ,預設是 512 bytes

  -i :将資料自檔案或裝置 copy 出來系統當中

  -d :自動建立目錄!使用 cpio 所備份的資料内容不見得會在同一層目錄中,是以我們必須要讓 cpio 在還原時可以建立新目錄,此時就得要 -d 選項的幫助!

  -u :自動的将較新的檔案覆寫較舊的檔案!

  -t :需配合 -i 選項,可用在"檢視"以 cpio 建立的檔案或裝置的内容

一些可共享的選項與參數:

  -v :讓儲存的過程中檔案名可以在螢幕上顯示

  -c :一種較新的 portable format 方式儲存

參考文檔:

《鳥哥的Linux私房菜基礎篇第三版》

繼續閱讀