zoukankan      html  css  js  c++  java
  • 十五、工具压缩、解压缩

    压缩工具

    compress/uncompress:  .Z结尾 (很少用)

    gzip/gunzip:  .gz结尾

    bzip2/bunzip2:  .bz2结尾

    xz/unxz:  .xz后缀,.lzma和.raw后缀

        1、默认删除被压缩的文件,为了节约空间。保留原文件必须启用选项

        2、压缩比不高:快速、高效

        3、纯文本压缩,二进制压缩意义不大

        4、bzip2,xz不支持递归压缩

    压缩及归档工具: zip/unzip: .zip后缀

        1、通用的工具: VMS,Unix,MSDOS,OS/2,Windows(Windows 原生支持的压缩),Window 9x/NT/XP,Minix

        2、tar和压缩工具共同的作用

        3、支持归档压缩目录

    归档工具: tar,cpio(特殊场景)

        1、归档后,文件可能变大。(书放在箱子里,箱子的重量)

        2、压缩/解压缩后不会删除原文件

        3、压缩时,带调用压缩的选项。展开时,可以不带选项,自动识别。 -Jcf tar.xz

       4、支持归档或压缩目录 

    一、gzip/gunzip/zcat命令

    1、LZ77压缩算法

    2、压缩目录,-r

    3、默认删除被压缩的文件

    gzip [OPTIONS...] FILE
        -c --stdout  ## 压缩后的结果输出到标准输出 所以要跟> 重定向输出。(目的不自动删除原文件)
        -d           ## 调用gunzip实现解压缩
        -r,--recursive  ## 递归压缩
        -#  1,9      ##默认为6 , 压缩比,越大,文件小,消耗的cpu时针周期越长
    
    zcat FILE
         不展开文件,查看压缩文件的内容

      

    1、准备文件
    [root@izpo45bh60h6bsz ~]# cp /etc/{fstab,init.d/functions} /tmp/
    [root@izpo45bh60h6bsz ~]# ls -l /tmp/
    -rw-r--r-- 1 root root   358 8月  13 18:08 fstab
    -rw-r--r-- 1 root root 15131 8月  13 18:08 functions
    
    2、压缩文件
    [root@izpo45bh60h6bsz ~]# cd /tmp
    [root@izpo45bh60h6bsz tmp]# ls
    fstab  functions
    [root@izpo45bh60h6bsz tmp]# gzip fstab 
    [root@izpo45bh60h6bsz tmp]# ls
    fstab.gz  functions  ## 原文件被删除
    
    3、解压缩文件
    root@izpo45bh60h6bsz tmp]# gunzip fstab.gz 
    [root@izpo45bh60h6bsz tmp]# ls
    fstab  functions     ## 解压的文件被删除
    
    4、保留原文件,压缩
    [root@izpo45bh60h6bsz tmp]# gzip -c fstab > fstab.gz
    [root@izpo45bh60h6bsz tmp]# ls
    fstab  fstab.gz  functions
    [root@izpo45bh60h6bsz tmp]# ls -l -h
    -rw-r--r-- 1 root root 358 8月  13 18:08 fstab     ## 对比
    -rw-r--r-- 1 root root 266 8月  13 18:10 fstab.gz  ## 对比
    -rw-r--r-- 1 root root 15K 8月  13 18:08 functions
    
    5、保留原文件,解压
    [root@izpo45bh60h6bsz tmp]# gzip -d -c fstab.gz > fstab.1
    [root@izpo45bh60h6bsz tmp]# ls -lh
    -rw-r--r-- 1 root root 358 8月  13 18:12 fstab    ## 对比
    -rw-r--r-- 1 root root 358 8月  13 18:12 fstab.1  ## 对比
    -rw-r--r-- 1 root root 266 8月  13 18:10 fstab.gz
    -rw-r--r-- 1 root root 15K 8月  13 18:08 functions
    
    6、低压缩比和高压缩比解压的区别
    1)低压缩:速度快,效率高
    [root@izpo45bh60h6bsz tmp]# gzip -c -1 fstab > fstab.1.gz
    2)高压缩,速度慢,浪费cpu时钟周期,文件压缩后的文件小
    [root@izpo45bh60h6bsz tmp]# gzip -c -9 fstab > fstab.2.gz
    [root@izpo45bh60h6bsz tmp]# ls -lh fstab.1.gz fstab.2.gz 
    -rw-r--r-- 1 root root 267 8月  13 18:14 fstab.1.gz
    -rw-r--r-- 1 root root 266 8月  13 18:14 fstab.2.gz
    
    7、压缩目录
    [root@izpo45bh60h6bsz tmp]# cp -r /etc/pam.d .
    [root@izpo45bh60h6bsz tmp]# gzip -r pam.d
    [root@izpo45bh60h6bsz tmp]# ls pam.d/
    atd.gz            fingerprint-auth-ac.gz ....
    
    8、解压目录
    [root@izpo45bh60h6bsz tmp]# gunzip pam.d/*
    [root@izpo45bh60h6bsz tmp]# ls pam.d/
    atd          fingerprint-auth 
    
    9、不展开文件查看文件的内容
    [root@izpo45bh60h6bsz tmp]# zcat fstab.gz 
    
    #
    # /etc/fstab
    # Created by anaconda on Fri Feb 24 02:58:22 2017
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=07151862-c2b9-45dc-bf7a-af8d2a6fa6c1 /                       ext3    defaults        1 1
    /www/swap    swap    swap    defaults    0 0
    [root@izpo45bh60h6bsz tmp]#

    二、bzip2/bunzip2/bzcat命令

    1、LZ77,LZ78压缩算法,支持比gzip更高级的算法

    2、不能压缩目录

    3、默认删除被压缩的文件

    bzip2 [OPTIONS....] FILE
        -k,keep   ## 不删除原文件,保持原文件
        -d         ## 调用bunzip2解压文件
        -#,1-9    ## 压缩级别。压缩比,越大,文件小,消耗的cpu时针周期越长
        
        -q,quiet  ## 静默模式,适用于脚本中
    1、准备文件
    [root@izpo45bh60h6bsz tmp]# cp /var/log/messages /tmp
    [root@izpo45bh60h6bsz tmp]# ls /tmp/messages 
    /tmp/messages
    
    2、压缩文件
    [root@izpo45bh60h6bsz ~]# cd /tmp
    [root@izpo45bh60h6bsz tmp]# bzip2 messages 
    [root@izpo45bh60h6bsz tmp]# ls messages*
    messages.bz2
    
    3、解压缩文件
    [root@izpo45bh60h6bsz tmp]# bunzip2 messages.bz2 
    [root@izpo45bh60h6bsz tmp]# ls messages*
    messages
    
    4、保留原文件,压缩
    [root@izpo45bh60h6bsz tmp]# bzip2 -k messages 
    [root@izpo45bh60h6bsz tmp]# ls messages*
    messages  messages.bz2
    
    5、保留原文件,解压
    [root@izpo45bh60h6bsz tmp]# rm messages
    rm:是否删除普通文件 "messages"?y
    [root@izpo45bh60h6bsz tmp]# ls messages*
    messages.bz2
    [root@izpo45bh60h6bsz tmp]# bzip2 -d -k messages.bz2 
    [root@izpo45bh60h6bsz tmp]# ls messages*
    messages  messages.bz2
    
    6、低压缩比和高压缩比解压的区别
    [root@izpo45bh60h6bsz tmp]# bzip2 -1 -k messages 
    [root@izpo45bh60h6bsz tmp]# bzip2 -9 messages.new 
    [root@izpo45bh60h6bsz tmp]# ls -lh  messages*
    -rw------- 1 root root 469K 8月  13 18:26 messages
    -rw------- 1 root root  21K 8月  13 18:26 messages.bz2       ## 对比
    -rw------- 1 root root  18K 8月  13 18:31 messages.new.bz2   ## 对比
    
    7、不展开文件查看文件的内容
    [root@izpo45bh60h6bsz tmp]# bzcat messages.bz2 
    Aug 12 10:00:29 izpo45bh60h6bsz pure-ftpd[5446]: (?@140.205.225.185) [INFO] New connection from 140.205.225.185
    Aug 12 10:00:29 izpo45bh60h6bsz pure-ftpd[5446]: (?@140.205.225.185) [ERROR] Unable to read the indexed puredb file (or old format detected) - Try pure-pw mkdb

    三、xz/unxz/xzcat命令  (CentOS7 主流)

    1、流行的压缩工具,压缩算法比bzip2更为有效

    2、不支持压缩目录

    xz [OPTIONS...] FILE...
        -k :保留源文件,无须输出重定向 
        -c,--stdout
        -d :解压缩,相当于bunzip2
        -# :指定压缩比,默认为6
        
        -q       ## 静默模式
        -F FORMAT  ## xz,lzma,raw 默认为xz
        
    xzcat FILE  不展开压缩文件,查看文件解压的内容
    1、准备文件
    [root@izpo45bh60h6bsz tmp]# rm /tmp/* -rf
    [root@izpo45bh60h6bsz tmp]# cp /etc/fstab /etc/issue .
    
    2、压缩文件
    [root@izpo45bh60h6bsz tmp]# xz issue 
    [root@izpo45bh60h6bsz tmp]# ls
    fstab  issue.xz
    
    3、解压缩文件
    [root@izpo45bh60h6bsz tmp]# xz -d issue.xz 
    [root@izpo45bh60h6bsz tmp]# ls
    fstab  issue
    
    4、保留原文件,压缩
    [root@izpo45bh60h6bsz tmp]# xz -k issue 
    [root@izpo45bh60h6bsz tmp]# ls
    fstab  issue  issue.xz
    [root@izpo45bh60h6bsz tmp]# xz -c fstab > fstab.xz
    [root@izpo45bh60h6bsz tmp]# ls
    fstab  fstab.xz  issue  issue.xz
    
    5、保留原文件,解压
    [root@izpo45bh60h6bsz tmp]# ls
    fstab.xz  issue.xz
    [root@izpo45bh60h6bsz tmp]# xz -d -k fstab.xz issue.xz 
    [root@izpo45bh60h6bsz tmp]# ls
    fstab  fstab.xz  issue  issue.xz
    
    6、低压缩比和高压缩比解压的区别
    -rw-r--r-- 1 root root 358 8月  13 18:40 fstab.bak
    
    [root@izpo45bh60h6bsz tmp]# xz -k -1 fstab 
    [root@izpo45bh60h6bsz tmp]# mv fstab fstab.bak
    [root@izpo45bh60h6bsz tmp]# xz -k -9 fstab.bak 
    -rw-r--r-- 1 root root 324 8月  13 18:40 fstab.bak.xz
    -rw-r--r-- 1 root root 332 8月  13 18:40 fstab.xz
    
    7、lzma格式压缩
    [root@izpo45bh60h6bsz tmp]# ls
    fstab 
    [root@izpo45bh60h6bsz tmp]# xz -F lzma fstab
    [root@izpo45bh60h6bsz tmp]# ls
    fstab.bak.xz  fstab.lzma  issue  pam.d
    
    8、不展开文件查看文件的内容
    [root@izpo45bh60h6bsz tmp]# xzcat fstab.xz 
    
    #
    # /etc/fstab
    # Created by anaconda on Fri Feb 24 02:58:22 2017
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=07151862-c2b9-45dc-bf7a-af8d2a6fa6c1 /                       ext3    defaults        1 1
    /www/swap    swap    swap    defaults    0 0
    
    9、静默模式,错误输出流不输出至标准输出
    [root@izpo45bh60h6bsz tmp]# xz fstab.xz
    xz: fstab.xz: File already has `.xz' suffix, skipping
    [root@izpo45bh60h6bsz tmp]# xz -q fstab.xz


    以上3个压缩工具只能针对文件操作,无法对文件夹进行压缩,因此,在linux中对文件夹有个归档打包操作,然后再进行压缩。

    归档:zip、tar、cpio ;归档不会删除源文件,其主要目的是用于备份数据

    四、zip/unzip命令,归档和压缩工具

         1、解压后的文件名同压缩前的文件名

         2、压缩/解压缩后不会删除原文件

      3、支持压缩目录

    zip FILE.zip FILE ...
        -d, --delete 不展开归档,删除归档中的文件
        -r , 递归归档
        -q, 静默模式
    1、归档
    [root@izpo45bh60h6bsz tmp]# zip hello  fstab.bak.xz fstab.xz issue.xz 
    [root@izpo45bh60h6bsz tmp]# ls -lh
    总用量 20K
    -rw-r--r-- 1 root root  324 8月  13 18:40 fstab.bak.xz
    -rw-r--r-- 1 root root  324 8月  13 18:40 fstab.xz
    -rw-r--r-- 1 root root 1.2K 8月  13 18:54 hello.zip
    -rw-r--r-- 1 root root   80 8月  13 18:39 issue.xz
    
    2、展开
    [root@izpo45bh60h6bsz tmp]# ls
    hello.zip  pam.d
    [root@izpo45bh60h6bsz tmp]# unzip hello.zip 
    Archive:  hello.zip
     extracting: fstab.bak.xz            
     extracting: fstab.xz                
     extracting: issue.xz                
    [root@izpo45bh60h6bsz tmp]# ls
    fstab.bak.xz  fstab.xz  hello.zip  issue.xz  pam.d
    
    3、归档目录
    [root@izpo45bh60h6bsz tmp]# find . -maxdepth 1 -type f -delete
    [root@izpo45bh60h6bsz tmp]# ls
    pam.d
    
    [root@izpo45bh60h6bsz tmp]# zip pam.d.zip pam.d
    
    [root@izpo45bh60h6bsz tmp]# ll
    总用量 8
    drwxr-xr-x 2 root root 4096 8月  13 18:43 pam.d
    -rw-r--r-- 1 root root  162 8月  13 18:58 pam.d.zip
    
    4、展开归档
    [root@izpo45bh60h6bsz tmp]# mv pam.d pam.d.bak
    [root@izpo45bh60h6bsz tmp]# unzip pam.d.zip 
    Archive:  pam.d.zip
       creating: pam.d/
    [root@izpo45bh60h6bsz tmp]# ls
    pam.d  pam.d.bak  pam.d.zip
    [root@izpo45bh60h6bsz tmp]# ls pam.d
    
    5、归档目录
    [root@izpo45bh60h6bsz tmp]# zip pam.d.1.zip pam.d.bak/*
    [root@izpo45bh60h6bsz tmp]# zip -r pam.d.zip pam.d
    
    6、展开归档
    [root@izpo45bh60h6bsz tmp]# unzip pam.d.zip 
    
    7、静默模式:展开时/归档时不显示多余的信息
    [root@izpo45bh60h6bsz tmp]# unzip -q pam.d.zip

    五、tar GNUtar归档工具  (重点)

        1、解压后的文件名同压缩前的文件名

        2、压缩/解压缩后不会删除原文件 

        3、支持归档目录

    tar [OPTIONS...]  FILE...  (注意:tar命令选项可以忽略“ - ”)
        -cvf FILE.tar  FILE...   创建归档
        -xvf FILE.tar  FILE...   展开归档
        -tvf FILE.tar FILE...    不展开归档,查看归档的文件
            -f FILE.tar 归档后的文件名
            -v ,verbose详细信息
        -C /PATH/TO/DIR   展开至指定目录 
       
    -j ,归档后,调用bzip2工具对文件压缩
    -J , 归档后,调用xz -z , 调用gzip **命令可省略 - ,例如 -cvf 可写为 cvf

    补充: tar -r -f /PATH/TO/SOMEFILE.tar FILE... 追加文件至归档;但不支持对压缩文件追加

    注意: 使用-x 解包过程中如果不指定解包路径,那么会按照原路径解包,会覆盖原文件,这一点要特别小心,尤其是原路径下的文件在打包后修改过。
    1、创建归档
    [root@izpo45bh60h6bsz tmp]# tar cvf hello.tar ./* 
    
    2、展开归档
    [root@izpo45bh60h6bsz tmp]# tar xvf hello.tar
    
    3、不展开,查看内容
    root@izpo45bh60h6bsz tmp]# tar tf hello.tar
    
    4、展开至指定目录
    [root@izpo45bh60h6bsz tmp]# mkdir test
    [root@izpo45bh60h6bsz tmp]# tar xvf hello.tar -C test/
    [root@izpo45bh60h6bsz tmp]# ls test/
    hello  pam.d  pam.d.1.zip  pam.d.bak  pam.d.zip
    
    5、归档后以bzip2工具压缩
    [root@izpo45bh60h6bsz tmp]# tar jcf total.tar.bz2 ./*
    total.tar.bz2
    
    6、归档后以xz工具压缩
    [root@izpo45bh60h6bsz tmp]# tar Jcf total.tar.xz ./*
    total.tar.xz
    
    7、归档后以gzip工具压缩
    [root@izpo45bh60h6bsz tmp]# tar zcf total.tar.gz ./*
    total.tar.gz
  • 相关阅读:
    Codeforces 798C. Mike and gcd problem 模拟构造 数组gcd大于1
    Codeforces 796C. Bank Hacking
    Codeforces 792B. Counting-out Rhyme
    gym 101164 H.Pub crawl 凸包
    hdu 6053 TrickGCD 筛法
    hdu 6041 I Curse Myself 无向图找环+优先队列
    bzoj 2243: [SDOI2011]染色 线段树区间合并+树链剖分
    codeforces gym 101164 K Cutting 字符串hash
    树链剖分求lca
    UESTC 1697 简单GCD问题(一) 筛法
  • 原文地址:https://www.cnblogs.com/liuzhiyun/p/11363287.html
Copyright © 2011-2022 走看看