壓縮檔案的用途與技術
如果我們記錄數字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私房菜基礎篇第三版》