1. 程式人生 > >詳談linux中壓縮

詳談linux中壓縮

資料 讀取 AS 針對 記錄 bzip2 取代 案例 tail

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中壓縮