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]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章