您是否有过文件档案太大,导致无法以一片软盘将他复制完成的困扰?又,您是否有过,发现一个软件里面有好多档案,这些档案要将他 复制与携带都很不方便的问题?还有,您是否有过要备份某些重要数据,偏偏这些数据量太大了,耗掉了你很多的硬盘与磁盘空间呢?这个时候,那个好用的『文件压缩』技术可就派的上用场了!因为这些比较大型的档案透过所谓的文件压缩技术之后,可以将他的磁盘使用量降低,可以达到减低档案容量的效果,此外,有的压缩程序还可以进行容量限制,使一个大型档案可以分割成为数个小型档案,以方便软盘片携带呢!
那么什么是『文件压缩』呢?我们来稍微谈一谈他的原理好了。目前我们使用的计算机系统中都是使用所谓的 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 的数据下来玩的话,大概会晓得的是,这些供人下载的档案通常都是『压缩』过的!为了什么?上面已经稍微提过啦!呵呵!压缩过的档案具有节省带宽、节省磁盘空间等等的优点,并且还方便携带呢! ^_^ !而,您应该也会知道,这些被压缩过的档案,通常其附档名都是『 *.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2 』等等的,为什么要订定这些压缩文件案 附档名为这样的模样呢?这是因为在 Linux 上面压缩的指令相当的多,并且,这些压缩指令可能无法针对每种压缩文件案都可以解的开,毕竟目前的压缩技术五花八门,每种压缩计算的方法都不是完全相同的, 所以啰,当你捉到某个压缩文件时,自然就需要知道压缩他的是那个指令啦,好用来对照着解压缩啊! ^_^!也就是说,虽然 Linux 档案的属性基本上是与文件名没有绝对关系的,能不能执行与他的文件属性有关而已,与档名的关系很小!但是,为了帮助我们小小的人类脑袋瓜子,所以适当的档案 名称附档名还是必要的!因此,目前就有一些常常见到的压缩文件案的附档名啦!我们仅列出常见的几样在底下,给大家权做参考之用:目前常见的压缩程序主要就是如同上面提到的附档名对应的那些指令啦!最早期的要算是 compress 这个家伙了,而后,后来的 GNU 计划开发出新一代的压缩指令 gzip ( GNU zip ) 用来取代 compress 这个老牌的压缩指令,再来还有 bzip2 这个压缩比更好的压缩指令呢!不过,这些指令通常仅能针对一个档案来压缩与解压缩,如此一来,每次压缩与解压缩都要一大堆档案,岂不烦人?,此时,那个所谓的『打包软件』就显的很重要啦!在 Unix-Like 当中,有个软件很好玩,他就是 tar 这支程序!这个 tar 可以将很多档案『打包』成为一个档案!甚至是目录也可以这么玩。不过,单纯的 tar 功能仅是『打包』而已,亦即是将很多档案集结成为一个档案,事实上,他并没有提供压缩的功能,后来, GNU 计划中,将整个 tar 与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的压缩与打包功能!
- *.Z compress 程序压缩的档案;
- *.bz2 bzip2 程序压缩的档案;
- *.gz gzip 程序压缩的档案;
- *.tar tar 程序打包的数据,并没有压缩过;
- *.tar.gz tar 程序打包的档案,其中并且经过 gzip 的压缩!
底下我们就来谈一谈这些在 Linux 底下基本的压缩指令吧!
[root @test
/root ]# compress [-d] filename
参数说明: -d :解压缩的参数! 范例: 先 copy /etc/man.config 到 root 底下,再将他压缩看看 [root @test /root]# cp /etc/man.config /root [root @test /root]# compress man.config [root @test /root]# compress -d man.config.Z [root @test /root]# uncompress man.config.Z |
[root @test
/root ]# gzip [-d#] filename <==压缩与解压缩
[root @test /root ]# zcat filename.gz <==读取压缩文件内容 参数说明: -d :解压缩的参数! -# :压缩等级, 1 最不好, 9 最好, 6 是默认值! 范例: [root @test /root]# gzip man.config 会产生 man.config.gz 这个档案 [root @test
/root]# zcat man.config.gz
[root @test
/root]# gzip -d man.config.gz
[root @test
/root]# gzip -9 man.config
|
[root @test
root]# bzip2 [-dz] filename <==压缩解压缩指令
[root @test root]# bzcat filename.bz2 <==读取压缩文件内容指令 参数说明: -d :解压缩的意思! -z :压缩的意思! 范例: 同样的,我们以刚刚拷贝过来的 /root/man.config 这个档案为例 [root @test root]# bzip2 –z man.config [root @test root]# bzcat man.config.bz2 [root @test root]# bzip2 –d man.config.bz2 [root @test root]# bunzip2 man.config.bz2 |
[root @test
/root ]# tar [-zxcvfpP] filename
[root @test /root ]# tar -N 'yyyy/mm/dd' /path -zcvf target.tar.gz source 参数说明: -z :是否同时具有 gzip 的属性? -x :解开一个压缩文件案的参数指令! -t :查看 tarfile 里面的档案! -c :建立一个压缩文件案的参数指令 -v :压缩的过程中显示档案! -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数! 例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成 『 tar -zcvPf tfile sfile』才对喔! -p :使用原档案的原来属性(属性不会依据用户而变) -P :可以使用绝对路径 -N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中! --exclude FILE:在压缩的过程中,不要将 FILE 打包! 范例: [root @test /root]# tar -cvf directory.tar directory 只将目录整合打包成一个档案 [root @test
/root]# tar -zcvf directory.tar.gz directory
[root @test
/root]# tar -zcvf filename.tar.gz /home/test/*
[root @test
/root]# tar -xvf directory.tar
[root @test
/root]# tar -zxvf directory.tar.gz
[root @test
/root]# tar –ztvf directory.tar.gz
[root @test
/root]# tar -zcvPf home.tar.gz /home
[root @test
/root]# tar -N '2002/06/25' -zcvf home.tar.gz
/home
[root @test
/root]# tar -zcvf host.tar.gz / --exclude
/mnt --exclude /proc
[root @test
/root]# tar -cvf - /home | tar -xvf -
|
[root @test
/root ]# cpio -covB > [file|device]<==备份
[root @test /root ]# cpio -icduv < [file|device]<==还原 参数说明: -o :将资料 copy 输出到档案或装置上 -i :将数据自档案或装置 copy 出来系统当中 -t :查看 cpio 建立的档案或装置的内容 -c :一种较新的 portable format 方式储存 -v :让储存的过程中文件名可以在屏幕上显示 -B :让预设的 Blocks 可以增加至 5120 bytes ,预设是 512 bytes ! 这样的好处是可以让大档案的储存速度加快(请参考 i-nodes 的观念) -d :自动建立目录!由于 cpio 的内容可能不是在同一个目录内, 如此的话在反备份的过程会有问题! 这个时候加上 -d 的话, 就可以自动的将需要的目录建立起来了! -u :自动的将较新的档案覆盖较旧的档案! 范例: [root @test /root]# find / -print | cpio -covB > /dev/st0 将搜寻到的档案存到磁带机 [root @test
/root]# cpio -icduv < /dev/st0
[root @test
/root]# cpio -icdvt < /dev/st0 > /tmp/content
[root @test
/root]# find / -type -f | cpio -o > /tmp/root.cpio
|
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室