鸟哥的 Linux ADSL 私房菜


档案的压缩与打包
最近更新日期:2003/05/02
压缩的用途与技术
Linux 压缩档案的附档名
 compress
 gzip, zcat
 bzip2, bzcat
 tar
 cpio
本章习题练习

压缩的用途与技术
您是否有过文件档案太大,导致无法以一片软盘将他复制完成的困扰?又,您是否有过,发现一个软件里面有好多档案,这些档案要将他复制与携带都很不方便的问题?还有,您是否有过要备份某些重要数据,偏偏这些数据量太大了,耗掉了你很多的硬盘与磁盘空间呢?这个时候,那个好用的『档案压缩』技术可就派的上用场了!因为这些比较大型的档案透过所谓的档案压缩技术之后,可以将他的磁盘使用量降低,可以达到减低档案容量的效果,此外,有的压缩程序还可以进行容量限制,使一个大型档案可以分割成为数个小型档案,以方便软盘片携带呢!
 
那么什么是『档案压缩』呢?我们来稍微谈一谈他的原理好了。目前我们使用的计算机系统中都是使用所谓的 bytes 单位来计量的!不过,事实上,计算机最小的计量单位应该是 bits 才对啊,此外,我们也知道 1 byte = 8 bits 。但是如果今天我们只是记忆一个数字,亦即是 1 这个数字呢?他会如何记录?假设一个 byte 可以看成底下的模样:(注:由于 1 byte = 8 bits ,所以每个 byte 当中会有 8 个空格,而每个空格可以是 0, 1 ,这里仅是做为一个约略的介绍,读者不必刻意记忆 )
□□□□□□□□
而由于我们记录数字是 1 ,考虑计算机所谓的二进制喔,如此一来, 1 会在最右边占据 1 个 bit ,而其它的 7 个 bits 将会自动的被填上 0 啰!你看看,其实在这样的例子中,那 7 个 bits 应该是『空的』才对!不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录了!而一些聪明的计算机工程师就利用一些复杂的计算方式,将这些没有使用到的空间『丢』出来,以让档案占用的空间变小!这就是压缩的技术啦!简单的说,你可以将他想成,其实档案里面有相当多的『空间』存在,并不是完全填满的,而『压缩』的技术就是将这些『空间』填满,以让整个档案占用的容量下降!不过,这些『压缩过的档案』并无法直接被我们的操作系统所使用的,因此,若要使用这些被压缩过的档案数据,则必须将他『还原』回来未压缩前的模样,那就是所谓的『解压缩』啰!而至于压缩前与压缩后的档案所占用的磁盘空间大小,就可以被称为是『压缩比』啰!更多的技术文件或许你可以参考一下 GNU 计划当中关于压缩指令 gzip 的说明文件。当然,我 这里 也保留一份数据,做为未来参考之用呢!
 
这个『压缩』与『解压缩』的动作有什么好处呢?最大的好处就是压缩过的档案容量变小了,所以你的硬盘容量无形之中就可以容纳更多的数据,此外,在一些网络数据的传输中,也会由于数据量的降低,好让网络频宽可以用来作更多的工作!而不是老是卡在一些大型的档案上面呢!目前很多的 WWW 网站也是利用档案压缩的技术来进行数据的传送,好让网站的可利用率上升喔!( 注:这种技术蛮有趣的!他让您网站上面『看的到的数据』在经过网络传输时,使用的是『压缩过的数据』,等到这些压缩过的数据到达你的计算机主机时,再进行解压缩,由于目前的计算机运算速度相当的快速,因此其实在网页浏览的时候,时间都是花在『数据的传输』上面,而不是 CPU 的运算啦!,如此一来,由于压缩过的数据量降低了,自然传送的速度就会增快不少! )若您是一位软件工程师,那么相信您也会喜欢将你自己的软件压缩之后提供大家下载来使用,毕竟没有人喜欢自己的网站天天都是频宽满载的吧?!举个例子来说, Linux 2.4.19 完整的核心大小约有 200 MB 左右,而由于核心主要多是 ASCII code 的存文字型态档案,这种档案的『多余空间』最多了。而一个提供下载的压缩过的 2.4.19 核心大约仅有 30MB 左右,差了几倍呢?您可以自己算一算喔!

Linux 压缩档案的附档名
如果您常常在网络上面捉 Linux 的数据下来玩的话,大概会晓得的是,这些供人下载的档案通常都是『压缩』过的!为了什么?上面已经稍微提过啦!呵呵!压缩过的档案具有节省频宽、节省磁盘空间等等的优点,并且还方便携带呢! ^_^ !而,您应该也会知道,这些被压缩过的档案,通常其附档名都是『 *.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2 』等等的,为什么要订定这些压缩档案附档名为这样的模样呢?这是因为在 Linux 上面压缩的指令相当的多,并且,这些压缩指令可能无法针对每种压缩档案都可以解的开,毕竟目前的压缩技术五花八门,每种压缩计算的方法都不是完全相同的,所以啰,当你捉到某个压缩档时,自然就需要知道压缩他的是那个指令啦,好用来对照着解压缩啊! ^_^!也就是说,虽然 Linux 档案的属性基本上是与文件名没有绝对关系的,能不能执行与他的档案属性有关而已,与文件名的关系很小!但是,为了帮助我们小小的人类脑袋瓜子,所以适当的文件名称附档名还是必要的!因此,目前就有一些常常见到的压缩档案的附档名啦!我们仅列出常见的几样在底下,给大家权做参考之用: 目前常见的压缩程序主要就是如同上面提到的附档名对应的那些指令啦!最早期的要算是 compress 这个家伙了,而后,后来的 GNU 计划开发出新一代的压缩指令 gzip ( GNU zip ) 用来取代 compress 这个老牌的压缩指令,再来还有 bzip2 这个压缩比更好的压缩指令呢!不过,这些指令通常仅能针对一个档案来压缩与解压缩,如此一来,每次压缩与解压缩都要一大堆档案,岂不烦人?,此时,那个所谓的『打包软件』就显的很重要啦!在 Unix-Like 当中,有个软件很好玩,他就是 tar 这支程序!这个 tar 可以将很多档案『打包』成为一个档案!甚至是目录也可以这么玩。不过,单纯的 tar 功能仅是『打包』而已,亦即是将很多档案集结成为一个档案,事实上,他并没有提供压缩的功能,后来, GNU 计划中,将整个 tar 与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的压缩与打包功能!
 
底下我们就来谈一谈这些在 Linux 底下基本的压缩指令吧!

本章习题练习 ( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )

2003/02/09:第一次完成
2003/05/05:修改 tar 的部分内容,尤其是 -P 这个参数的配合用法

2003/02/09 以来统计人数


Designed by VBird during 2001-2003.  Aerosol Lab.