詳談linux中壓縮
1.壓 縮 的 用 途 和 技 術
1.1 為什麽需要壓縮:
①你是否有過文件檔案太大,導致無法以正常的email方式發送出去(很多email都有容量大約25MB每封信的限制啊!)?
②你是否有過要備份某些重要資料,偏偏這些資料量太大了,耗掉了你很多的磁盤空間呢?
。。。。。。
這個時候,那個好用的『檔案壓縮』技術可就派的上用場了!
1.2 壓縮原理:
我們都知道1 byte = 8 bits ,而計算機是怎麽來實現記憶存儲文件數據?
假設一個byte可以看成右邊模樣 ----------> □□□□□□□□
由於 1 byte = 8 bits ,所以每個byte 當中會有 8 個空格,而每個空格可以是 0, 1 ,這裏只做一個簡單的介紹!
假設來記錄“1”這個數字,考慮電腦所謂的二進位喔,如此一來, 1 會在最右邊占據 1 個bit ,而其他的7 個bits 將會自動的被填上0 !仔細看看,其實在這樣的例子中,那 7 個bits 應該是『空的』才對!不過,為了要滿足目前我們的作業系統資料的存取,所以就會將該資料轉為 byte 的型態來記錄了!而一些聰明的電腦工程師就利用一些復雜的計算方式, 將這些沒有使用到的空間『丟』出來,以讓檔案占用的空間變小!這就是壓縮的技術!
簡單的說,你可以將他想成,其實檔案裏面有相當多的『空間』存在,並不是完全填滿的,而『壓縮』的技術就是將這些『空間』填滿,以讓整個檔案占用的容量下降!
2.Linux 系統常見的壓縮指令
2.1指令介紹:
在Linux的環境中,壓縮檔案的副檔名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz』
Linux上常見的壓縮指令就是gzip, bzip2以及最新的xz 至於compress已經退流行了,為了支援windows常見的zip,其實Linux也早就有zip指令了
不過,這些指令通常僅能針對一個檔案來壓縮與解壓縮,如此一來,每次壓縮與解壓縮都要一大堆檔案,豈不煩人?此時,那個所謂的『打包軟體, tar』就顯的很重要!打包的作用就是將你指定的多個文件打包成一個文件的意思,並沒有壓縮的作用,這樣之後就可以將包文件進行統一的壓縮,就不用那麽麻煩一個一個的文件壓縮了。
2.2壓縮指令
gzip指令參數說明:
選項與參數: -c :將壓縮的資料輸出到螢幕上,可透過資料流重導向來處理; -d :解壓縮的參數; -t :可以用來檢驗一個壓縮檔的一致性~看看檔案有無錯誤; -v :可以顯示出原檔案/壓縮檔案的壓縮比等資訊; -# :# 為數字的意思,代表壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是-6
2.3 gzip指令 案 例:
2.3.1 找到/etc/目錄中最大的文件 ls -lraS /etc/ | tail -n 10
2.3.2 並將services復制到/tmp中 cp /etc/services .
2.3.3 將/tmp中services進行壓縮 gzip -v services 說明:壓縮後得到services.gz文件 ,原始文件也就不存在了
2.3.4 對比壓縮後與壓縮前的文件 ll /etc/services /tmp/services*
2.3.5 由於services這個原本的檔案是是文字檔,因此我們可以嘗試使用zcat/zmore/zless去讀取! zmore services.gz
2.3.6 將/tmp中services.gz解壓縮 gzip -dv services.gz 說明:解壓縮後services.gz文件會被刪除
2.3.7 將解開的services用最佳的壓縮比壓縮,並保留原本的檔案 gzip -9 -cv services > services.gz
壓縮等級說明: gzip 提供了1~9 的壓縮等級,壓縮強度依次遞增
2.3.8 再次建立的services.gz中,找出http這個關鍵字在哪幾行? zgrep -n ‘http‘ services.gz
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
前言:
若說gzip 是為了取代compress 並提供更好的壓縮比而成立的,那麽bzip2 則是為了取代gzip 並提供更佳的壓縮比而來的。bzip2 真是很不錯用的東西~這玩意的壓縮比竟然比gzip 還要好~至於bzip2 的用法幾乎與gzip 相同!看看底下的用法吧!
2.4 bzip2案 例(bzip2, bzcat/bzmore/bzless/bzgrep)
2.4.1 bzip2指令參數選項說明
選項與參數: -c :將壓縮的過程產生的資料輸出到螢幕上! -d :解壓縮的參數 -k :保留原始檔案,而不會刪除原始的檔案喔! -z :壓縮的參數(預設值,可以不加) -v :可以顯示出原檔案/壓縮檔案的壓縮比等資訊; -# :與gzip 同樣的,都是在計算壓縮比的參數, -9 最佳, -1 最快!
2.4.2 將剛剛gzip範例留下來的/tmp/services以bzip2壓縮 bzip2 -v services
2.4.3 此時你會發現bzip2比gzip指令壓縮強度要好 ls -l services*
2.4.4 讀取範例/tmp/services.bz2 文件 bzcat services.bz2
2.4.5 將範例中/tmp/services.bz2文件解壓縮 bzip2 -d services.bz2
2.4.6 解開的services用最佳的壓縮比壓縮,並保留原本的檔案 bzip2 -9 -c services > services.bz2
說明:
看上面的範例,你會發現到bzip2 連選項與參數都跟gzip 一模一樣!只是副檔名由.gz 變成.bz2 而已!其他的用法都大同小異,所以就不一一介紹了!你也可以發現到bzip2 的壓縮率確實比gzip 要好些!不過,對於大容量檔案來說,bzip2 壓縮時間會花比較久喔!至少比gzip 要久的多!這沒辦法~要有更多可用容量,就得要花費相對應的時間!還OK 啊!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
前言:
雖然bzip2 已經具有很棒的壓縮比,不過顯然某些自由軟體開發者還不滿足,因此後來還推出了xz 這個壓縮比更高的軟體!這個軟體的用法也跟gzip/bzip2 幾乎一模一樣!請看下面案例!
2.5 xz案例( xzcat/xzmore/xzless/xzgrep)
2.5.1 xz選項和說明
選項與參數:
-d :就是解壓縮啊! -t :測試壓縮檔的完整性,看有沒有錯誤 -l :列出壓縮檔的相關資訊 -k :保留原本的檔案不刪除~ -c :同樣的,就是將資料由螢幕上輸出的意思! -# :同樣的,也有較佳的壓縮比的意思!
2.5.2 將剛剛由bzip2所遺留下來的/tmp/services透過xz來壓縮 xz -v services (壓縮比例以下效果可見,容量又進一步下降的更多)
2.5.3 列出這個壓縮檔的資訊,然後讀出這個壓縮檔的內容 xz -l services.xz
2.5.4 查看壓縮後的壓縮檔內容 xzcat services.xz(指令都很相似,就不一一截圖了)
2.5.5 解壓縮 xz -d services.xz
2.5.6 保留原檔案的檔名,並且建立壓縮檔! xz -k services
壓縮指令總結:
以下是一組時間數據:
『 time [gzip|bzip2|xz] -c services > services.[gz|bz2|xz] 』去執行運算結果,結果發現這三個指令的執行時間依序是: 0.019 s, 0.042s, 0.261s, 看最後一個數字!差了10 倍的時間
通過案例我們發現壓縮比例越高時間就越久,雖然xz壓縮強度比gizp要高很多,但是xz花的時間實在是太久了,所以如果你不覺得時間成本是你的考量那麽使用xz會更好,如果時間是你的重要成本考量,恐怕gzip是比較適合的壓縮軟體!
如有疑問請說明!
詳談linux中壓縮