Linux 壓縮、解壓縮和打包工具

    前言:你是否曾經因為某個文件占用空間較大,而空間緊缺的U盤無法存放此文件。你是否曾經因為軟件里有太多文件而不方便復制和攜帶。你是否曾因需要備份太過零散而頭疼。那么基于“文件壓縮和打包”的技術因此出現。下面介紹下Linux下關于壓縮、解壓縮和打包的工具及使用。


一、相關術語的原理和意義

    1、壓縮原理:

        計算機處理信息的是以二進制的形式表示的,而壓縮工具就是將二進制數據中的將重復的字符串用特殊字符標記,從而達到了壓縮空間的目的目的。

        例如:如果你的數據有 111….. 共計 10個1時,那么壓縮技術就是只記錄了“10個1”,而不是真正的將10個1都記錄,這樣就能減少空間的占用

    2、解壓縮

        是壓縮的反過程,因為壓縮過的文件并無法直接被操作系統所使用,因此,如果我們要使用被壓縮過的文件數據,那么就需要將壓縮文件“還原”成未壓縮前的狀態,這個就是“解壓縮”

    3、壓縮比

        壓縮前和壓縮后的文件所占用磁盤空間的大小比例


二、壓縮技術的好處

    1、減少文件占用的空間

    2、在文件傳輸過程中不易導致文件損壞

    3、可以對壓縮文件進行加密,保護文件

    4、在應用系統文件備份方便


三、在Linux環境中,壓縮文件的擴展名大多是 *.tar , *.tar.gz , *.tgz , *.gz , *.Z , *.bz2 , *.xz ,*.zip

    下面是常見的壓縮文件擴展名對應的壓縮命令

        *.Z            compress程序壓縮文件

        *.gz           gzip程序壓縮的文件

        *.bz2          bzip2程序壓縮的文件  

        *.xz           xz程序壓縮的文件

        *.tar          tar程序打包的文件,但未進行壓縮

        *.tar.gz       tar程序打包的文件,并經gzip程序壓縮

        *.tar.bz2      tar程序打包的文件,并經bzip2程序壓縮

        *.zip          zip程序壓縮的文件

    小貼士:在Linux的中,沒有一個固定的程序后綴,后綴只是為了管理員標識使用,方便日后的維護。


四、下面介紹常用的擴展名對應的壓縮命令及使用

    Linux系統常用的壓縮命令

        compress :屬于比較老舊的一款壓縮軟件,使用于比較舊UNIX系統上,并現的Linux已不常用

        gzip     :現應用最廣的壓縮命令,可解壓由compress、zip和gzip等軟件所壓縮的文件

        bzip2    :基于Burrows-Wheeler算法變換的無損壓縮軟件

        xz       :是一款新的壓縮文件,采用LZMA SDK壓縮

        zip      :是一款比較通用的壓縮工具,在Linux,windows都通用

    壓縮比、壓縮速度和解壓速率比較

             compress < gzip < bzip2 < xz

    1、compress、uncompress

        備注:由于compress比較舊,所以CentOS5.5以上默認沒有安裝,然后compress的程序包是ncompress,如果系統沒有此命令,請執行yum install ncompress安裝此程序

        compress [-cv] 文件或目錄  <—— 壓縮

            -c:將壓縮后的結果輸出至標準輸出

            -v: 顯示出壓縮后的文件信息以及壓縮過程中的文件名變化

        uncompress 文件.Z      <—— 解壓

例子:
[root@www tmp]# cp -a /etc/man.config  /tmp/       #拷貝/etc/man.config文件到/tmp路徑下,為了做練習
[root@www tmp]# compress -v man.config             #對man.config文件進行compress壓縮
man.config:  -- replaced with man.config.Z Compression: 41.84%   #壓縮比
[root@www tmp]# ls
man.config.Z                                       #發現壓縮后的文件后綴默認是.Z,這里也可以看出執行了壓縮命令后,源文件會被清除
[root@www tmp]# uncompress man.config.Z            #解壓縮
[root@www tmp]# ls
man.config                                         #解壓縮后原壓縮的文件會被清除
[root@www tmp]# compress -c man.config > man.config.Z   #這相當于保留壓縮前的文件
[root@www tmp]# ll -h
-rw-r--r--. 1 root root 4.9K Feb 22  2013 man.config
-rw-r--r--. 1 root root 2.9K Jul 12 13:05 man.config.Z   #可以對比壓縮后的文件已經被壓縮變小

    小貼士:compress現在已經很少使用了,因為它無法解壓*.gz,*.bz2等壓縮文件,而后續的壓縮程序能解壓*.Z的程序包

    2、gzip、gunzip、zcat

        gzip [-cdtv#] 文件名  <—— 壓縮

            -c:將壓縮后的結果輸出至標準輸出,這樣就能保留源文件了

            -d:相當于gunzip

            -t:可以校驗壓縮文件的一致性、看看文件有無錯誤

            -v:顯示壓縮比的信息

            -#:指定壓縮比,范圍0-9,數字越大,壓縮比例越大,但所消耗的CPU資源更多。默認為6

        gunzip 文件名.gz     <—— 解壓縮

        zcat 文件名.gz       <—— 不解壓查看gzip壓縮后的文件內容

例子:
[root@www tmp]# gzip -v man.config       #壓縮文件
man.config:	 56.5% -- replaced with man.config.gz   #顯示壓縮比
[root@www tmp]# ls
man.config.gz                            #壓縮后原文件會被刪除
[root@www tmp]# gzip -c man.config > man.config.gz  #這相當于保留壓縮前的文件
[root@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config
-rw-r--r--. 1 root root 2184 Jul 12 13:27 man.config.gz
[root@www tmp]# zcat man.config.gz      #不解壓查看gzip壓縮的文件的內容
[root@www tmp]# gzip -1 -c man.config > man.config1.gz 
[root@www tmp]# gzip -9 -c man.config > man.config9.gz    #壓縮比例越高,所占空間越小
[root@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config
-rw-r--r--. 1 root root 2332 Jul 12 13:31 man.config1.gz
-rw-r--r--. 1 root root 2184 Jul 12 13:31 man.config9.gz
[root@www tmp]# gzip -d man.config1.gz  #解壓縮文件,相當于gunzip
[root@www tmp]# ls
man.config  man.config1  man.config9.gz

    小貼士:gzip不能壓縮目錄

    3、bzip2、bunzip2、bzcat

        bzip2 [-cdkv#] 文件名   <——壓縮

            -c:將壓縮后的結果輸出至標準輸出,這樣就能保留源文件了

            -d:相當于gunzip

            -t:可以校驗壓縮文件的一致性、看看文件有無錯誤

            -v:顯示壓縮比等的信息

            -k:保留原文件,而不會刪除原始文件

            -#:指定壓縮比,范圍0-9,數字越大,壓縮比例越大,但所消耗的CPU資源更多。默認為6

        bunzip2 文件名.bz2    <——解壓縮

        bzcat 文件名.bze      <——不解壓查看bzip2壓縮后的文件內容

例子:
[root@www tmp]# bzip2 -v man.config 
  man.config:  2.251:1,  3.555 bits/byte, 55.57% saved, 4940 in, 2195 out.    #壓縮比,速度等信息
[root@www tmp]# ls
man.config.bz2
[root@www tmp]# bzip2 -d man.config.bz2  #解壓縮,相當于bunzip
[root@www tmp]# ls
man.config
[root@www tmp]# bzip2 -9 -k man.config   #-k參數壓縮后保留了原始文件
[root@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config
-rw-r--r--. 1 root root 2195 Jul 12 13:23 man.config.bz2
[root@www tmp]# bzcat man.config.bz2    #不解壓查看bzip2壓縮后的文件內容
[root@www tmp]# bzip2 -c man.config > man.config2.bz2 
[root@www tmp]# ls
man.config  man.config2.bz2  man.config.bz2

    小貼士:bzip2不能壓縮目錄

    4、xz、unxz、xzcat

        xz [-cdkv# ] 文件名  <——壓縮

            各參數用法和bzip2一樣,這里不再詳述

        unxz 文件名.xz   <——解壓縮

        xzcat 文件名     <——不解壓查看xz壓縮后的文件內容

練習:
[root@www tmp]# xz -v man.config 
man.config (1/1)
  100.0 %                   2,204 B / 4,940 B = 0.446    #壓縮比信息
[root@www tmp]# xz -c man.config > man.config.xz    #這相當于保留壓縮前的文件
[root@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config
-rw-r--r--. 1 root root 2204 Jul 12 14:18 man.config.xz
[root@www tmp]# unxz man.config.xz       #解壓縮,相當于xz -d 
[root@www tmp]# ll
-rw-r--r--. 1 root root 4940 Jul 12 13:23 man.config

    5、zip、unzip

        zip ZIPFILE.zip src_file….    <——壓縮

            備注:zip可以對目錄進行歸檔壓縮

        unzip ZIPFILE.zip      <——解壓縮

練習:
[root@www tmp]# cp -R /home/* /tmp/home/    #將home下文件拷貝到/tmp目錄下
[root@www tmp]# ls /home/
user1  user2
[root@www tmp]# zip home.zip home/*         #對目錄進行壓縮
  adding: home/user1/ (stored 0%)
  adding: home/user2/ (stored 0%)
[root@www tmp]# ls
home  home.zip

    對于目錄的歸檔壓縮通常使用tar工具,所以zip這里不再多介紹


五、打包歸檔工具

    tar:打包歸檔工具

        能實現將多個文件打包成單個文件,即為歸檔文件,但是tar只是歸檔,不壓縮

    1、創建歸檔

        tar [-cvf] Tarfile.tar filename 

            -c:create,新建打包文件

            -v:在壓縮/解壓縮過程中,將正在處理的文件名顯示出來

            -f filename:-f后面一定要接被處理的文件名,建議-f 單獨使用一個參數

[root@www tmp]# tar -cv -f /tmp/home.tar /home
[root@www tmp]# ls /tmp/
home.tar

    2、展開歸檔

        tar [-xvf] Tarfile.tar

            -x:解壓縮的功能

            -v:在壓縮/解壓縮過程中,將正在處理的文件名顯示出來

            -f filename:-f后面一定要接被處理的文件名,建議-f 單獨使用一個參數            

[root@www tmp]# tar -xvf home.tar
[root@www tmp]# ls
home  home.tar

    3、 查看歸檔后的文件中包含了哪些原文件

        tar [-tf] Tarfile.tar

            -t:查看打包文件里包含哪些文件名

            -f filename:-f后面一定要接被處理的文件名,建議-f 單獨使用一個參數

[root@www tmp]# tar -tf home.tar

    4、tar與壓縮工具(gzip、bzip2、xz)來執行壓縮

         tar [-zjJ] Tarfile.tar

            -z:使用gzip進行壓縮/解壓縮,此文件名最好為*.tar.gz

            -j:使用bzip2進行壓縮/解壓縮,此文件名最好為*.tar.bz2

            -J:使用xz進行壓縮/解壓縮,此文件名最好為*.tar.xz

[root@www tmp]# tar -zcvf home.tar.gz home
[root@www tmp]# ls
home  home.tar  home.tar.gz


六、命令總結

    1、Linux系統常用的壓縮命令 : compress,gzip,bzip2,xz,zip

        其中compress,gzip,bzip2,xz不能對目錄進行壓縮歸檔,一般和tar歸檔打包工具一起使用,從而達到對目錄進行歸檔 

        zip可以直接對目錄進行壓縮歸檔

    2、打包歸檔工具:tar

        創建歸檔參數: [-cvf]

        展開歸檔參數: [-xvf]

        查看歸檔后的文件參數:[-tf]]

        tar和壓縮工具一起使用參數:[-zjJ]

原創文章,作者:螃蟹,如若轉載,請注明出處:http://www.www58058.com/6275

(0)
螃蟹螃蟹
上一篇 2015-07-15
下一篇 2015-07-15

相關推薦

  • 管道及重定向

    管道及重定向 1、重定向 在Linux中有時我們在命令的執行過程中,不想將執行結果顯示到屏幕上,或者將其結果輸出到其他位置 這時就需要重定向來解決這個問題了 首先了解一下Linux中的3種I/O設備: 0:標準輸入 1:標準輸出 2:標準錯誤輸出 輸出重定向:> >> 輸入重定向: < << >:將標準輸出重定向到文…

    Linux干貨 2017-07-28
  • N26-第五周博客作業

    一、顯示當前系統上root、fedora或user1用戶的默認shell; [root@promote home]# grep -E ‘^(root|fedora|user1)’ /etc/passwd |cut -d : -f7 /bin/bash /bin/bash /bin/bash [root@promote home]# 注…

    Linux干貨 2017-05-15
  • Linux ssh安全遠程登錄

                   Linux ssh安全遠程登錄 本章內容:     構建SSH遠程登錄系統     SSH(secure shell)是標準的網絡協議,主要用于實現字符界面的遠程登錄管理…

    Linux干貨 2016-10-10
  • liunx初探

    計算機的五大單元: 輸出單元、輸入單元、cpu內部控制單元、算術邏輯單元和內存。 計算機三大組成部分: 輸入單元:鍵盤、鼠標等等 輸出單元:屏幕、打印機等 中央處理器(CPU):含有算術邏輯、控制、記憶等 CPU種類有兩種分別是:   精簡指令集(RISC):這種cpu微指令比較精簡,每個指令的執行時間都很短,完成的操作也很簡單。常見的簡單指令集C…

    Linux干貨 2016-09-14
  • Linux 系統終端

    Linux系統的主要終端主要包含:控制臺終端、控制終端、串口終端、偽終端、虛擬終端。 控制臺終端:在Linux 系統中,計算機顯示器通常被稱為控制臺終端(Console)內核將信息送到控制臺終端上(/dev/console), 通過與console相關聯的虛擬終端將信息顯示到屏幕上。再開機過程中屏幕輸出的信息,這個屏幕就是Console; 控制終端:鍵盤,顯…

    Linux干貨 2016-10-19
  • 學習宣言

     學習計劃:參考N24學習時間與線路圖,盡最大努力完成。 目標:學習好Linux,提升自我價值,找一份待遇好的工作。 宣言:每一次輕易的放棄,都是人生的一處敗筆,為了夢想,加油!

    Linux資訊 2016-10-26
欧美性久久久久