詳談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是比較適合的壓縮軟體!


如有疑問請說明!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM