zoukankan      html  css  js  c++  java
  • 文件打包压缩

    文件打包压缩

    自我感觉,文件压缩打包这块很好学,别看压缩命名多,好几个不常用,常用的几个选项基本都通用。就会产生一个很好的结果,只要学一个命令的选项,剩下的几个命令只要记住名字就可以了。

    本篇的重点在tar命令,大部分网上的文件都是经过打包压缩处理过的。

    linux中常见的压缩文件的扩展名:*.gz  *.bz2  *.xz  *.tar  *.tar.gz  *.tar.bz2  *.tar.xz  *.tgz  *.Z  *.tar.Z

    0.compress/uncompress
    compress 压缩文件不会保留源文件,压缩后的文件后缀是.Z
    -d 解压缩,相当于uncompress,可以重定向以保留源文件
    -c 输出压信息到屏幕,可以重定向以保留源文件
    -v 显示详情
     
    zcat命令
    可以查看.Z和.gz的压缩文件内容
    此命令太过久远了,基本上已经很少见*.Z的压缩文件了。而且使用gzip命令也可以解压*.Z压缩文件。
     
     
    1.gzip/gunzip
    gzip压缩文件会删除源文件,生成.gz为后缀的压缩文件。
    gzip [option]....FILE.....
    -c 把压缩文件数据流输出到屏幕上,可以使用重定向保存到文件中,用于保留源文件。
    -d 解压缩,相当于gunzip
    -k 保留源文件,仅在centos8以后的版本中有效
    -v 压缩后,可以显示出压缩比
    -t 用于测试压缩包的完整性
    -# 按照指定的压缩比压缩。默认为6,支持1-9
     
    zcat、zmore、zless命令
    在不解压.gz后缀的压缩文件的情况下查看压缩文件内容。zcat FILE.GZ
    zgrep命令
    可以在解压的情况下直接搜索关键字
    zgrep 关键字 /PATH/TO/COMPRESS.gz

     示例:

     1  #演示在不解压的情况下搜索关键字
     2 [root@CentOS8 tmp]# zgrep http services.gz  
     3 #       http://www.iana.org/assignments/port-numbers
     4 http            80/tcp          www www-http    # WorldWideWeb HTTP
     5 http            80/udp          www www-http    # HyperText Transfer Protocol
     6 http            80/sctp                         # HyperText Transfer Protocol
     7 https           443/tcp                         # http protocol over TLS/SSL
     8 https           443/udp                         # http protocol over TLS/SSL
     9 https           443/sctp                        # http protocol over TLS/SSL
    10 gss-http        488/tcp
    11 gss-http        488/udp
    12 
    13 
    14 #-c选项和管道符结合使用,主要用于保存源文件
    15 [root@CentOS8 tmp]# gzip -c services > services.gz   
    16 [root@CentOS8 tmp]# ll
    17 total 824
    18 -rwx------. 1 root root   1379 May  2 08:53 ks-script-drjaqc7p
    19 -rw-r--r--  1 root root 692241 May  3 17:35 services
    20 -rw-r--r--  1 root root 142549 May  3 18:02 services.gz
    2.bzip2/bunzip2
    bzip2压缩文件会删除源文件,生成.bz2为后缀的压缩文件。
    bzip2 [option]....FILE.....
    -c 把压缩文件数据流输出到屏幕上,可以使用重定向保存到文件中,用于保留源文件。
    -k 压缩后保留源文件,同时生成压缩文件。
    -d 解压缩,相当于bunzip2
    -# 按照指定的压缩比压缩。默认为6,支持1-9
    -q 静默 压缩
    -v 压缩后,显示出压缩比
    -r 把目录下的文件分别进行独立压缩
    bzcat/bzmore/bzless命令
    在不解压.bz2后缀的压缩文件的情况下查看压缩文件内容,和zcat用法相同。
    bzcat FILE.BZ2
    bzgrep命令
    在不解.bz2后缀的压缩文件的情况下搜索压缩包内容
    bzgrep 关键字 /PATH/TO/COMPRESS.bz2

    示例:

     1 #保留源文件压缩,压缩后显示压缩比信息
     2 [root@CentOS8 tmp]# bzip2 -kv services      
     3   services:  5.334:1,  1.500 bits/byte, 81.25% saved, 692241 in, 129788 out.
     4 [root@CentOS8 tmp]# ll
     5 total 952
     6 -rwx------. 1 root root   1379 May  2 08:53 ks-script-drjaqc7p
     7 -rw-r--r--  1 root root 692241 May  3 18:15 services
     8 -rw-r--r--  1 root root 129788 May  3 18:15 services.bz2
     9 -rw-r--r--  1 root root 142549 May  3 18:02 services.gz
    10 
    11 [root@CentOS8 tmp]# bunzip2 services.bz2 
     
    3.xz/unxz
    xz压缩文件会删除源文件,生成.xz为后缀的压缩文件。
    xz [option]....FILE.....
    -c 把压缩文件数据流输出到屏幕上,可以使用重定向保存到文件中,用于保留源文件。
    -k 压缩后保留源文件,同时生成压缩文件。
    -d 解压缩,相当于unxz
    -# 按照指定的压缩比压缩。默认为6,支持1-9
    -q 静默 压缩
    -v 压缩后,显示压缩比等信息
     
    xzcat/xzmore/xzless命令
    在不解压.xz后缀的压缩文件的情况下查看压缩文件内容,和zcat用法相同。xzcat FILE.XZ
    xzgrep命令
    在不解压的情况下搜索压缩包内容
    xzgrep 关键字 /PATH/TO/COMPRESS.xz

    示例:

    #保留源文件压缩,并且输出压缩比等信息
    [root@CentOS8 tmp]# xz -kv services
    services (1/1)
      100 %       103.4 KiB / 676.0 KiB = 0.153                                    
    [root@CentOS8 tmp]# ll
    total 1056
    -rw-r--r--  1 root root 692241 May  3 18:15 services
    -rw-r--r--  1 root root 129788 May  3 18:15 services.bz2
    -rw-r--r--  1 root root 142549 May  3 18:02 services.gz
    -rw-r--r--  1 root root 105872 May  3 18:15 services.xz
    
    
    [root@CentOS8 tmp]# rm services   #删除源文件
    rm: remove regular file 'services'? y
    [root@CentOS8 tmp]# xz -dk services.xz     #保留源文件解压缩
    [root@CentOS8 tmp]# ll
    total 1056
    -rw-r--r--  1 root root 692241 May  3 18:15 services
    -rw-r--r--  1 root root 129788 May  3 18:15 services.bz2
    -rw-r--r--  1 root root 142549 May  3 18:02 services.gz
    -rw-r--r--  1 root root 105872 May  3 18:15 services.xz
    
    #使用xzgrep搜索压缩包
    [root@CentOS8 tmp]# xzgrep http services.xz 
    #       http://www.iana.org/assignments/port-numbers
    http            80/tcp          www www-http    # WorldWideWeb HTTP
    http            80/udp          www www-http    # HyperText Transfer Protocol
    http            80/sctp                         # HyperText Transfer Protocol
    https           443/tcp                         # http protocol over TLS/SSL
    https           443/udp                         # http protocol over TLS/SSL
    https           443/sctp                        # http protocol over TLS/SSL
    
    #使用-l选项显示长格式信息
    [root@CentOS8 tmp]# xz -l services.xz 
    Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
        1       1    103.4 KiB    676.0 KiB  0.153  CRC64   services.xz
     
    4.zip/unzip
    zip一个及压缩打包于一身的压缩命令,而且还是各个操作系统通用的压缩命令。支持windows,unix,liunx。
    zip [OPTION]... 压缩后的文件名.zip 要进行压缩的源文件
    备注:如果要用zip进行压缩目录,需要指明目录下的文件名,如果不指明则会指压缩目录本身。例子:要使用 zip pam.d.zip /etc/pam.d/*
     
    5.tar
    用于打包的工具。能够把多个文件打包成一个文件。tar打包或者展开不会删除源文件
    1.创建文件 tar -c -f -[jJz] /PATH/TO/SOMEFILE.tar FILE....
    备注:-[jJz]通常只在创建压缩文件的时候使用,解压缩tar会自动调用对应的压缩工具实现解压
    2.展开文件 tar -x -f -[jJz] /PATH/TO/SOMEFILE.tar -C /PATH/TO/DIR
    备注:在展开的时候其实是可以不用加-j/-z/-J选项,tar会自动调用对应的解压工具解压。
    3.不展开显示打包文件的列表 tar -t -f -[jJz] /PATH/TO/SOMEFILE.tar
    备注:在展开的时候其实是可以不用加-j -z -J 选项的,tar会自动调用对应的解压工具解压。
     
    -c 创建打包文件
    -x 展开打包文件
    -t 列出打包文件的文件列表,而不展开
     
    -f 指定要创建或展开的打包文件路径
     
    -j 调用bzip2压缩工具
    -J 调用xz压缩工具
    -z 调用gzip压缩工具
    -Z 调用compress压缩工具进行压缩
    不允许同时出现,-j -J -z -Z
    -v 显示过程
    -p 保留源文件的原始属性,只有管理员有权限
    -P 保留绝对路径,就是允许贝恩数据中含有根目录。默认情况下是自动取消根目录
    --xattrs 保留源文件的扩展属性
     
    -C 把展开的文件保存到指定文件下,默认为当前目录。
    --exclude=/PATH/TO/{SOMEDIR|SOMEFILE} 排除某些目录或文件不压缩

    示例:

     1 #使用-z压缩
     2 [root@CentOS8 tmp]# tar -zcvf etc.gz /etc/*
     3 tar: Removing leading `/' from member names
     4 /etc/adjtime
     5 tar: Removing leading `/' from hard link targets
     6 /etc/aliases
     7 /etc/alternatives/
     8 ...
     9 #使用-j压缩,并保留源文件属性
    10 [root@CentOS8 tmp]# tar -jcvpf etc.bz2 /etc/*
    11 tar: Removing leading `/' from member names
    12 /etc/adjtime
    13 tar: Removing leading `/' from hard link targets
    14 /etc/aliases
    15 /etc/alternatives/
    16 /etc/alternatives/libnssckbi.so.x86_64
    17 ...
    18 #使用-J压缩,并保留源文件属性和facl属性,这里没有使用-v选项
    19 [root@CentOS8 tmp]# tar --xattrs -Jcpf etc.xz /etc/*
    20 tar: Removing leading `/' from member names
    21 tar: Removing leading `/' from hard link targets
    22 [root@CentOS8 tmp]# ll
    23 total 11508
    24 -rw-r--r-- 1 root root 3654689 May  3 19:05 etc.bz2
    25 -rw-r--r-- 1 root root 5053462 May  3 19:03 etc.gz
    26 -rw-r--r-- 1 root root 3069780 May  3 19:07 etc.xz
    27 
    28 #使用-C选项指定解压目录
    29 [root@CentOS8 tmp]# mkdir test
    30 [root@CentOS8 tmp]# tar xf etc.gz -C /tmp/test
    6.cpio
    老牌打包解包工具
    -o output模式,打包,将标准输入传入的文件名打包发送到标准输出
    -i input模式,解包
    -t 预览,查看标准输入传入的打包文件中的包含的文件列表
    cpio -tv < NAME.cpio
    -A 向已存在的归档文件中追加文件
    -v 显示详细过程
    -d 如果有文件夹自动创建,常与-i一起使用,用于解压时自动创建目录
    cpio -idv < etc.cpio
    -F filename 使用指定的文件名代替标准输入或输出
    -I filename 对指定的归档文件名解压
    -O filename 输出到指定归档文件名
     1 #示例演示cpio不会区分绝对路径和相对路径
     2 [root@CentOS8 /]# find ./etc | cpio -H newc -o > /tmp/etc.cpio
     3 40756 blocks
     4 [root@CentOS8 /]# find /etc | cpio -H newc -o > /tmp/etc2.cpio
     5 40757 blocks
     6 [root@CentOS8 /]# cd /tmp
     7 [root@CentOS8 tmp]# ls
     8 boot.cpio  etc2.cpio  etc.cpio
     9 [root@CentOS8 tmp]# cpio -tv < etc.cpio 
    10 drwxr-xr-x  78 root     root            0 May  3 18:14 etc
    11 lrwxrwxrwx   1 root     root           19 May  2 08:51 etc/mtab -> ../proc/self/mounts
    12 -rw-r--r--   1 root     root          615 May  2 08:50 etc/fstab
    13 -rw-------   1 root     root            0 May  2 08:50 etc/crypttab
    14 -rw-r--r--   1 root     root           69 May  3 17:31 etc/resolv.conf
    15 。。。
    16 [root@CentOS8 tmp]# cpio -tv < etc2.cpio 
    17 drwxr-xr-x  78 root     root            0 May  3 18:14 /etc
    18 lrwxrwxrwx   1 root     root           19 May  2 08:51 /etc/mtab -> ../proc/self/mounts
    19 -rw-r--r--   1 root     root          615 May  2 08:50 /etc/fstab
    20 -rw-------   1 root     root            0 May  2 08:50 /etc/crypttab
    21 -rw-r--r--   1 root     root           69 May  3 17:31 /etc/resolv.conf
    22 drwxr-xr-x   8 root     root            0 May  2 08:51 /etc/dnf
    23 #对比发现,使用find /etc生成cpio文件中竟然会保留根目录,如果解压的时候就会覆盖对应根目录下的文件,很危险
    24 #而使用find ./etc生成的cpio文件中没有保留根目录。
    25 
    26 #解压etc.cpio
    27 [root@CentOS8 tmp]# ls
    28 boot.cpio  etc2.cpio  etc.cpio
    29 [root@CentOS8 tmp]# mkdir test
    30 [root@CentOS8 tmp]# cd test
    31 [root@CentOS8 test]# cpio -id <../etc.cpio 
    32 40756 blocks
    33 [root@CentOS8 test]# ls
    34 etc
    关于时间成本:
    通过下面小示例可以看到,使用gzip、bzip2、xz压缩同一个文件,耗费的时间长短。xz消耗的时间最长,gzip消耗的时间最短。
     1 [root@CentOS8 tmp]# rm -fr *
     2 [root@CentOS8 tmp]# ls
     3 [root@CentOS8 tmp]# cp /etc/services .
     4 [root@CentOS8 tmp]# ls
     5 services
     6 [root@CentOS8 tmp]# time gzip -k services ;time bzip2 -k services ;time xz -k services 
     7 
     8 real    0m0.016s  #使用gzip压缩消耗的时间0.016s
     9 user    0m0.013s
    10 sys    0m0.003s
    11 
    12 real    0m0.036s  #使用bzip2压缩消耗的时间0.036s
    13 user    0m0.025s
    14 sys    0m0.010s
    15 
    16 real    0m0.184s  #使用xz压缩消耗的时间0.184s
    17 user    0m0.107s
    18 sys    0m0.077s
    19 [root@CentOS8 tmp]# ll
    20 total 1052
    21 -rw-r--r-- 1 root root 692241 May  3 18:36 services
    22 -rw-r--r-- 1 root root 129788 May  3 18:36 services.bz2
    23 -rw-r--r-- 1 root root 142549 May  3 18:36 services.gz
    24 -rw-r--r-- 1 root root 105872 May  3 18:36 services.xz

    总结一下:

    linux中常见的压缩文件的扩展名:*.gz  *.bz2  *.xz  *.tar  *.tar.gz  *.tar.bz2  *.tar.xz  *.tgz  *.Z  *.tar.Z

    常见的压缩命令有:gzip bzip2 xz。其中压缩比率最好的是xz,但是消耗的时间也是最高的。需要综合考虑时间成本和CPU性能。

      几个选项基本上都通用:-d 解压 -v 显示详细过程 -c 输出内容到屏幕 -k保留源文件

    tar可以打包文件和目录,打包时可以调用gzip bzip2 xz进行压缩

      压缩:  tar -[zjJ]cv -f filename.后缀  要被压缩的文件或目录

      查询:  tar -[zjJ]tv -f filename.后缀

      解压:  tar -[zjJ]xv -f filename.后缀 -C /PATH/TO/SOMEDIR

    cpio命令在压缩的时候需要配合find命令一起使用。注意使用相对路径

  • 相关阅读:
    flume sink两种类型 file_rool 自定义sing com.mycomm.MySink even if there is only one event, the event has to be sent in an array
    为什么引入进程20年后,又引入线程?
    As of Flume 1.4.0, Avro is the default RPC protocol.
    Google Protocol Buffer 的使用和原理
    Log4j 2
    统一日志 统一订单
    网站行为跟踪 Website Activity Tracking Log Aggregation 日志聚合 In comparison to log-centric systems like Scribe or Flume
    Percolator
    友盟吴磊:移动大数据平台的架构、实践与数据增值
    Twitter的RPC框架Finagle简介
  • 原文地址:https://www.cnblogs.com/fengciaimei/p/12825392.html
Copyright © 2011-2022 走看看