1.压 缩 的 用 途 和 技 术

  1.1 为什么需要压缩:

        ①你是否有过文件档案太大,导致无法以正常的email方式发送出去(很多email都有容量大约25MB每封信的限制啊!)?

        ②你是否有过要备份某些重要资料,偏偏这些资料量太大了,耗掉了你很多的磁盘空间呢?

         。。。。。。

        这个时候,那个好用的『档案压缩』技术可就派的上用场了!

  1.2 压缩原理:

           我们都知道1 byte = 8 bits ,而计算机是怎么来实现记忆存储文件数据?

    假设一个byte可以看成右边模样  ---------->      □□□□□□□□

    由于 1 byte = 8 bits ,所以每个byte 当中会有 8 个空格,而每个空格可以是 0, 1 ,这里只做一个简单的介绍!

    假设来记录“1”这个数字,考虑电脑所谓的二进位喔,如此一来, 1 会在最右边占据 1 个bit ,而其他的7 个bits 将会自动的被填上0 !仔细看看,其实在这样的例子中,那 7 个bits 应该是『空的』才对!不过,为了要满足目前我们的作业系统资料的存取,所以就会将该资料转为 byte 的型态来记录了!而一些聪明的电脑工程师就利用一些复杂的计算方式, 将这些没有使用到的空间『丢』出来,以让档案占用的空间变小!这就是压缩的技术!

    简单的说,你可以将他想成,其实档案里面有相当多的『空间』存在,并不是完全填满的,而『压缩』的技术就是将这些『空间』填满,以让整个档案占用的容量下降!不过,这些『压缩过的档案』并无法直接被我们的作业系统所使用的,因此,若要使用这些被压缩过的档案资料,则必须将他『还原』回来未压缩前的模样,那就是所谓的『解压缩』!而至于压缩后与压缩的档案所占用的磁盘空间大小,就可以被称为是『压缩比

2.Linux 系统常见的压缩指令

  2.1指令介绍:

      在Linux的环境中,压缩档案的副档名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz』

           Linux上常见的压缩指令就是gzip, bzip2以及最新的xz 至于compress已经退流行了,为了支援windows常见的zip,其实Linux也早就有zip指令了

    不过,这些指令通常仅能针对一个档案来压缩与解压缩,如此一来,每次压缩与解压缩都要一大堆档案,岂不烦人?此时,那个所谓的『打包软体, tar』就显的很重要!打包的作用就是将你指定的多个文件打包成一个文件的意思,并没有压缩的作用,这样之后就可以将包文件进行统一的压缩,就不用那么麻烦一个一个的文件压缩了。

  2.2压缩指令

    gzip指令参数说明:

    选项与参数:
      -c :将压缩的资料输出到萤幕上,可透过资料流重导向来处理;
      -d :解压缩的参数;
      -t :可以用来检验一个压缩档的一致性~看看档案有无错误;
      -v :可以显示出原档案/压缩档案的压缩比等资讯;
      -# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是-6 2.3 gzip指令 案 例:
      2.3.1 找到/etc/目录中最大的文件  ls -lraS /etc/ | tail -n 10
                 2.3.2 并将services复制到/tmp中
cp /etc/services .       2.3.3 将/tmp中services进行压缩  gzip -v services 说明:压缩后得到services.gz文件 ,原始文件也就不存在了
                

         2.3.4    对比压缩后与压缩前的文件               ll /etc/services /tmp/services*

           

      2.3.5    由于services这个原本的档案是是文字档,因此我们可以尝试使用zcat/zmore/zless去读取!          zmore services.gz

         

      2.3.6  将/tmp中services.gz解压缩    gzip -dv services.gz        说明:解压缩后services.gz文件会被删除

          

      2.3.7  将解开的services用最佳的压缩比压缩,并保留原本的档案      gzip -9 -cv services > services.gz

         压缩等级说明:  gzip 提供了1~9 的压缩等级,压缩强度依次递增

          

      

      2.3.8      再次建立的services.gz中,找出http这个关键字在哪几行?      zgrep -n 'http' services.gz

         

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

前言:

  若说gzip 是为了取代compress 并提供更好的压缩比而成立的,那么bzip2 则是为了取代gzip 并提供更佳的压缩比而来的。bzip2 真是很不错用的东西~这玩意的压缩比竟然比gzip 还要好~至于bzip2 的用法几乎与gzip 相同!看看底下的用法吧!

2.4 bzip2案 例(bzip2, bzcat/bzmore/bzless/bzgrep

    2.4.1 bzip2指令参数选项说明  

  选项与参数:
  -c :将压缩的过程产生的资料输出到萤幕上!
  -d :解压缩的参数
  -k :保留原始档案,而不会删除原始的档案喔!
  -z :压缩的参数(预设值,可以不加)
  -v :可以显示出原档案/压缩档案的压缩比等资讯;
  -# :与gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!     2.4.2 将刚刚gzip范例留下来的/tmp/services以bzip2压缩 bzip2 -v services
      
    
    2.4.3 此时你会发现bzip2比gzip指令压缩强度要好 ls -l services*
           2.4.4 读取范例/tmp/services.bz2 文件 bzcat services.bz2     2.4.5 将范例中/tmp/services.bz2文件解压缩 bzip2 -d services.bz2
        
    2.4.6  解开的services用最佳的压缩比压缩,并保留原本的档案   bzip2 -9 -c services > services.bz2
      
    
    说明:
     看上面的范例,你会发现到bzip2 连选项与参数都跟gzip 一模一样!只是副档名由.gz 变成.bz2 而已!其他的用法都大同小异,所以就不一一介绍了!你也可以发现到bzip2 的压缩率确实比gzip 要好些!不过,对于大容量档案来说,bzip2 压缩时间会花比较久喔!至少比gzip 要久的多!这没办法~要有更多可用容量,就得要花费相对应的时间!还OK 啊!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

前言:

虽然bzip2 已经具有很棒的压缩比,不过显然某些自由软体开发者还不满足,因此后来还推出了xz 这个压缩比更高的软体!这个软体的用法也跟gzip/bzip2 几乎一模一样!请看下面案例!

2.5 xz案例( xzcat/xzmore/xzless/xzgrep
 
 2.5.1 xz选项和说明
    
选项与参数:
    -d :就是解压缩啊!
    -t :测试压缩档的完整性,看有没有错误
    -l :列出压缩档的相关资讯
    -k :保留原本的档案不删除~
    -c :同样的,就是将资料由萤幕上输出的意思!
    -# :同样的,也有较佳的压缩比的意思!
  2.5.2 将刚刚由bzip2所遗留下来的/tmp/services透过xz来压缩       xz -v services  (压缩比例以下效果可见,容量又进一步下降的更多)
      

  2.5.3 列出这个压缩档的资讯,然后读出这个压缩档的内容  xz -l services.xz

        
  2.5.4 查看压缩后的压缩档内容   xzcat services.xz(指令都很相似,就不一一截图了)
  
  2.5.5 解压缩 xz -d services.xz   2.5.6 保留原档案的档名,并且建立压缩档! xz -k services 压缩指令总结:
以下是一组时间数据:
『 time [gzip|bzip2|xz] -c services > services.[gz|bz2|xz] 』去执行运算结果,结果发现这三个指令的执行时间依序是: 0.019 s, 0.042s, 0.261s, 看最后一个数字!差了10 倍的时间
通过案例我们发现压缩比例越高时间就越久,虽然xz压缩强度比gizp要高很多,但是xz花的时间实在是太久了,所以如果你不觉得时间成本是你的考量那么使用xz会更好,如果时间是你的重要成本考量,恐怕gzip是比较适合的压缩软体!

如有疑问请说明!

详谈linux中压缩的更多相关文章

  1. linux中压缩与解压缩命令小结

    linux中压缩与解压操作非常常见,其命令参数也非常的多,这里只介绍最经常用的带打包文件的几种压缩和解压方式和几个最常用的参数. 现在最常用的压缩和解压工具是gzip和bzip2,这两种工具不能相互解 ...

  2. linux 中压缩记得压缩用c,解压用x

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  3. linux中压缩、解压缩命令详解

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  4. linux中压缩与解压缩命令

    .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ——————————————— .gz 解压 ...

  5. linux中压缩解压缩命令

    目录 gzip gunzip tar(打包压缩) tar(解包解压) zip unzip bzip2 bunzip2 gzip 解释 命令名称:gzip 命令英文原意:GUN zip 命令所在路径:/ ...

  6. linux文件压缩与打包

    在linux中常见的压缩命令 首先,在linux中压缩文件的扩展名大多是 *.gz gzip程序压缩的文件 *.bz2 bzip2程序压缩的文件 *.tar tar程序打包的数据,并没有压缩过 *.t ...

  7. linux中tar之解压和压缩常用

    我们知道在windows中解压和压缩有两个非常强大的工具winRar和国产的好压工具,在linux中也有一款强大的解压和压缩工具.那就是大名鼎鼎的tar.我们首先看看tar命令的使用格式 语法:tar ...

  8. <实训|第十一天>学习一下linux中的进程,文件查找,文件压缩与IO重定向

    [root@localhost~]#序言 在今后的工作中,运维工程师每天的例行事务就是使用free -m,top,uptime,df -h...每天都要检查一下服务器,看看是否出现异常.那么今天我们就 ...

  9. linux批量压缩当前目录中文件后,删除原文件

    linux批量压缩当前目录中文件后,删除原文件 for i in `ls|awk -F " " '{print $NF}'`; do tar -zcvf $i.tar.gz $i ...

随机推荐

  1. 如何在SpriteBuilder中设置对象的通用属性

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在SpriteBuilder中可以为对象设置自定义类从 ...

  2. Servlet概述-servlet学习之旅(一)

    Servlet概述 servlet是server+applet的缩写.applet是运行于客户端浏览器的java小程序,java诞生的时候,因为applet而闻名于世,但是现在已经没有多少热使用了,而 ...

  3. Spark技术内幕:Master基于ZooKeeper的High Availability(HA)源码实现

    如果Spark的部署方式选择Standalone,一个采用Master/Slaves的典型架构,那么Master是有SPOF(单点故障,Single Point of Failure).Spark可以 ...

  4. (七十四)iOS8之前使socket可以后台运行的方法

    对于使用socket通信的应用程序,常常希望App位于后台时仍然可以进行网络通信,这在iOS8和以后的版本是被默认允许的,socket可以直接在后台运行,而对于iOS8之前的版本就不行,需要进行两步设 ...

  5. (七十三)iOS本地推送通知的实现

    iOS的推送通知分为本地推送和网络推送两种,如果App处于挂起状态,是可以发送本地通知的,如果已经被杀掉,则只有定时通知可以被执行,而类似于QQ的那种网络消息推送就无法实现了,因为App的网络模块在被 ...

  6. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先在CatMazeV3中新建CatSprite类,继承于Spr ...

  7. 【shell脚本】nginx每天自动切割日志脚本

    nginx每天日志量比较大的时候,最好每天自动切割,存储,这样可以方面以后的查询和分析 #!/bin/sh ################### #filename: nginx_log_rotat ...

  8. Android 有关于* daemon not running.starting it now on port 5037 *ADB

    adb shell时出现以下信息:  * daemon not running. starting it now on port5037 * ADB server didn't ACK  * fail ...

  9. Cocos2D:塔防游戏制作之旅(三)

    整合炮塔资源 为了快速开始,我们为你创建了开始的项目.它包括了一个空白的Cocos2D项目以及大多数你将在教程中使用到的资源. 所以首先下载该 开始项目 并且解压缩到你指定的位置中去. 注意:该项目的 ...

  10. 【Android 应用开发】Android 平台 HTTP网速测试 案例 API 分析

    作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速测试标准 : 除普通网页测速 ...