zoukankan      html  css  js  c++  java
  • Linux下常用压缩 解压命令与压缩比率对比

    常用的格式有:
    tar, tar.gz(tgz), tar.bz2,

    不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大。

    1. tar
    只是打包动作,相当于归档处理,不做压缩;解压也一样,只是把归档文件释放出来。

    (1)打包归档格式:

    tar -cvf examples.tar files|dir
    #说明:
    -c, --create  create a new archive 创建一个归档文件
    -v, --verbose verbosely list files processed 显示创建归档文件的进程
    -f, --file=ARCHIVE use archive file or device ARCHIVE  后面要立刻接被处理的档案名,比如--file=examples.tar
    
    #举例:
    tar -cvf file.tar file1       #file1文件
    tar -cvf file.tar file1 file2 #file1,file2文件
    tar -cvf file.tar dir         #dir目录
    复制代码

    (2)释放解压格式:

    tar -xvf examples.tar (解压至当前目录下)
    tar -xvf examples.tar  -C /path (/path 解压至其它路径)
    
    #说明:
    -x, --extract, extract files from an archive 从一个归档文件中提取文件
    
    #举例:
    tar -xvf file.tar
    tar -xvf file.tar -C /temp  #解压到temp目录下

    2. tar.gz tgz (tar.gz和tgz只是两种不同的书写方式,后者是一种简化书写,等同处理)
    这种格式是Linux下使用非常普遍的一种压缩方式,
    兼顾了压缩时间(耗费CPU)和压缩空间(压缩比率)
    其实这是对tar包进行gzip算法的压缩

    (1)打包压缩格式:

    tar -zcvf examples.tgz examples (examples当前执行路径下的目录)
    
    说明:
    -z, --gzip filter the archive through gzip 通过gzip压缩的形式对文件进行归档
    
    举例:
    tar -zcvf file.tgz dir #dir目录

    (2)释放解压格式:

    tar -zxvf examples.tar (解压至当前执行目录下)
    tar -zxvf examples.tar  -C /path (/path 解压至其它路径)
    
    举例:
    tar -zcvf file.tgz
    tar -zcvf file.tgz -C /temp

    3 tar.bz

    Linux下压缩比率较tgz大,即压缩后占用更小的空间,使得压缩包看起来更小。
    但同时在压缩,解压的过程却是非常耗费CPU时间。

    (1)打包压缩格式:

    tar -jcvf examples.tar.bz2 examples   (examples为当前执行路径下的目录)
    
    说明:
    -j, --bzip2 filter the archive through bzip2 通过bzip2压缩的形式对文件进行归档
    
    举例:
    tar -jcvf file.tar.bz2 dir #dir目录

    (2)释放解压:

    tar -jxvf examples.tar.bz2 (解压至当前执行目录下)
    tar -jxvf examples.tar.bz2  -C /path (/path 解压至其它路径)
    
    举例:
    tar -jxvf file.tar.bz2
    tar -jxvf file.tar.bz2 -C /temp

    4 gz
    压缩:
    gzip -d examples.gz examples

    解压:
    gunzip examples.gz


    5 zip
    zip 格式是开放且免费的,所以广泛使用在 Windows、Linux、MacOS 平台,要说 zip 有什么缺点的话,就是它的压缩率并不是很高,不如 rar及 tar.gz 等格式。
    压缩:
    zip -r examples.zip examples (examples为目录)

    解压:
    zip examples.zip

    6 .rar
    压缩:
    rar -a examples.rar examples

    解压:
    rar -x examples.rar

    压缩比率,占用时间对比

    为了保证能够让压缩比率较为明显,需选取一个内容较多、占用空间较大的目录作为本次实验的测试。
    找了一个大概有23G的目录来测试,首先要明确由于执行环境的变化,误差在所难免

    首先明确一个概念:
    压缩比率=原内容大小/压缩后大小,压缩比率越大,则表明压缩后占用空间的压缩包越小

    .tar

    打包:
    time tar -cvf test.tar /usr/test
    时间:
    real    3m20.709s
    user    0m3.477s
    sys     0m42.595s
    
    大小:
    打包前:23214680
    打包后:22202984
    
    耗时:3m20.709s
    压缩比率:22202984/23214680
    
    
    解压:
    time tar -xvf test.tar
    
    大小:
    解压前:22202984
    解压后:23211064
    
    耗时:
    real    2m47.548s
    user    0m4.999s
    sys     1m14.186s

    .tgz

    打包压缩:
    time tar -zcvf test.tgz /usr/test
    时间:
    real    16m30.767s
    user    16m1.394s
    sys     1m7.391s
    
    大小:
    打包前:23211064
    打包后:18949032
    
    耗时:
    压缩比率:
    
    解压:
    tar -zxvf test.tar
    
    大小:
    解压前:18949032
    解压后:23211064
    
    耗时:
    real    3m52.418s
    user    2m46.325s
    sys     1m21.442s

    .tar.bz2

    打包压缩:
    time tar -jcvf test.tar.bz2 /usr/test
    
    时间:
    real    80m39.422s
    user    80m14.599s
    sys     0m58.623s
    
    大小:
    打包前:23211064
    打包后:18728904
    
    耗时:80m39.422s
    压缩比率:
    
    
    解压:
    time tar -jxvf test.tar.bz2
    
    时间:
    real    27m54.525s
    user    27m44.108s
    sys     1m43.645s
    
    大小:
    解压前:18728904
    解压后:23211064

    综上结果,初步结论:

    综合起来,在压缩比率上: tar.bz2>tgz>tar
    占用空间与压缩比率成反比: tar.bz2<tgz<tar
    耗费时间(打包,解压)
    打包:tar.bz2>tgz>tar
    解压: tar.bz2>tar>tgz
    从效率角度来说,当然是耗费时间越短越好

    因此,Linux下对于占用空间与耗费时间的折衷多选用tgz格式,不仅压缩率较高,而且打包、解压的时间都较为快速,是较为理想的选择。

    结论:

    再一次印证了物理空间与时间的矛盾(想占用更小的空间,得到高压缩比率,肯定要牺牲较长的时间;反之,如果时间较为宝贵,要求快速,那么所得的压缩比率一定较小,当然会占用更大的空间了)。

  • 相关阅读:
    .net jquery ajax应用(后台)
    .net jquery ajax应用(前端)
    echarts 添加Loading 等待。
    js将数字转换为带有单位的中文表示
    关于Pre-bound JDBC Connection found! HibernateTransactionManager does not 异常小结
    java 并发容器一之ConcurrentHashMap(基于JDK1.8)
    java 并发容器一之BoundedConcurrentHashMap(基于JDK1.8)
    23中java设计模式(1)-- 策略模式
    解决Eclipse自动补全变量名的问题
    Tomcat+Jenkins+SonarQube+SVN+Maven 集成自动化环境搭建(Windows10环境下)
  • 原文地址:https://www.cnblogs.com/heshouhui/p/9698329.html
Copyright © 2011-2022 走看看