4档案的压缩与打包 5vi应用Word下载.docx
《4档案的压缩与打包 5vi应用Word下载.docx》由会员分享,可在线阅读,更多相关《4档案的压缩与打包 5vi应用Word下载.docx(43页珍藏版)》请在冰点文库上搜索。
30
档案的压缩与打包
在Linux底下有相当多的压缩指令可以运作喔!
这些压缩指令可以让我们更方便从网络上面下载大型的档案呢!
此外,我们知道在Linux底下的附档名是没有什么很特殊的意义的,不过,针对这些压缩指令所做出来的压缩档,为了方便记忆,还是会有一些特殊的命名方式啦!
就让我们来看看吧!
您是否有过文件档案太大,导致无法以一片软盘将他复制完成的困扰?
又,您是否有过,发现一个软件里面有好多档案,这些档案要将他复制与携带都很不方便的问题?
还有,您是否有过要备份某些重要数据,偏偏这些数据量太大了,耗掉了你很多的硬盘与磁盘空间呢?
这个时候,那个好用的『档案压缩』技术可就派的上用场了!
因为这些比较大型的档案透过所谓的档案压缩技术之后,可以将他的磁盘使用量降低,可以达到减低档案容量的效果,此外,有的压缩程序还可以进行容量限制,使一个大型档案可以分割成为数个小型档案,以方便软盘片携带呢!
那么什么是『档案压缩』呢?
我们来稍微谈一谈他的原理好了。
目前我们使用的计算机系统中都是使用所谓的bytes单位来计量的!
不过,事实上,计算机最小的计量单位应该是bits才对啊,此外,我们也知道1byte=8bits。
但是如果今天我们只是记忆一个数字,亦即是1这个数字呢?
他会如何记录?
假设一个byte可以看成底下的模样:
□□□□□□□□
Tips:
由于1byte=8bits,所以每个byte当中会有8个空格,而每个空格可以是0,1,这里仅是做为一个约略的介绍,读者不必刻意记忆。
而由于我们记录数字是1,考虑计算机所谓的二进制喔,如此一来,1会在最右边占据1个bit,而其它的7个bits将会自动的被填上0啰!
你看看,其实在这样的例子中,那7个bits应该是『空的』才对!
不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为byte的型态来记录了!
而一些聪明的计算机工程师就利用一些复杂的计算方式,将这些没有使用到的空间『丢』出来,以让档案占用的空间变小!
这就是压缩的技术啦!
简单的说,你可以将他想成,其实档案里面有相当多的『空间』存在,并不是完全填满的,而『压缩』的技术就是将这些『空间』填满,以让整个档案占用的容量下降!
不过,这些『压缩过的档案』并无法直接被我们的操作系统所使用的,因此,若要使用这些被压缩过的档案数据,则必须将他『还原』回来未压缩前的模样,那就是所谓的『解压缩』啰!
而至于压缩前与压缩后的档案所占用的磁盘空间大小,就可以被称为是『压缩比』啰!
更多的技术文件或许你可以参考一下:
*RFC1952文件:
http:
//www.faqs.org/rfcs/rfc1952.html
*鸟哥站上的备份:
http:
//linux.vbird.org/linux_basic/0240tarcompress/0240tarcompress_gzip.php
这个『压缩』与『解压缩』的动作有什么好处呢?
最大的好处就是压缩过的档案容量变小了,所以你的硬盘容量无形之中就可以容纳更多的数据,此外,在一些网络数据的传输中,也会由于数据量的降低,好让网络频宽可以用来作更多的工作!
而不是老是卡在一些大型的档案上面呢!
目前很多的WWW网站也是利用档案压缩的技术来进行数据的传送,好让网站的可利用率上升喔!
这种技术蛮有趣的!
他让您网站上面『看的到的数据』在经过网络传输时,使用的是『压缩过的数据』,等到这些压缩过的数据到达你的计算机主机时,再进行解压缩,由于目前的计算机运算速度相当的快速,因此其实在网页浏览的时候,时间都是花在『数据的传输』上面,而不是CPU的运算啦!
,如此一来,由于压缩过的数据量降低了,自然传送的速度就会增快不少!
若您是一位软件工程师,那么相信您也会喜欢将你自己的软件压缩之后提供大家下载来使用,毕竟没有人喜欢自己的网站天天都是频宽满载的吧?
!
举个例子来说,Linux2.4.19完整的核心大小约有200MB左右,而由于核心主要多是ASCIIcode的纯文字型态档案,这种档案的『多余空间』最多了。
而一个提供下载的压缩过的2.4.19核心大约仅有30MB左右,差了几倍呢?
您可以自己算一算喔!
Linux系统常见的压缩指令
如果您常常在网络上面捉Linux的数据下来玩的话,大概会晓得的是,这些供人下载的档案通常都是『压缩』过的!
为了什么?
上面已经稍微提过啦!
呵呵!
压缩过的档案具有节省频宽、节省磁盘空间等等的优点,并且还方便携带呢!
^_^!
而,您应该也会知道,这些被压缩过的档案,通常其附档名都是『*.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2』等等的,为什么要订定这些压缩档案附档名为这样的模样呢?
这是因为在Linux上面压缩的指令相当的多,并且,这些压缩指令可能无法针对每种压缩档案都可以解的开,毕竟目前的压缩技术五花八门,每种压缩计算的方法都不是完全相同的,所以啰,当你捉到某个压缩档时,自然就需要知道压缩他的是那个指令啦,好用来对照着解压缩啊!
^_^!
也就是说,虽然Linux档案的属性基本上是与文件名没有绝对关系的,能不能执行与他的档案属性有关而已,与档名的关系很小!
但是,为了帮助我们小小的人类脑袋瓜子,所以适当的文件名称附档名还是必要的!
因此,目前就有一些常常见到的压缩档案的附档名啦!
我们仅列出常见的几样在底下,给大家权做参考之用:
**.Zcompress程序压缩的档案;
**.bz2bzip2程序压缩的档案;
**.gzgzip程序压缩的档案;
**.tartar程序打包的数据,并没有压缩过;
**.tar.gztar程序打包的档案,其中并且经过gzip的压缩
目前常见的压缩程序主要就是如同上面提到的附档名对应的那些指令啦!
最早期的要算是compress这个家伙了,不过这个compress指令目前已经不再是预设的压缩软件了~而后,后来的GNU计划开发出新一代的压缩指令gzip(GNUzip)用来取代compress这个老牌的压缩指令,再来还有bzip2这个压缩比更好的压缩指令呢!
不过,这些指令通常仅能针对一个档案来压缩与解压缩,如此一来,每次压缩与解压缩都要一大堆档案,岂不烦人?
此时,那个所谓的『打包软件』就显的很重要啦!
在Unix-Like当中,有个软件很好玩,他就是tar这支程序!
这个tar可以将很多档案『打包』成为一个档案!
甚至是目录也可以这么玩。
不过,单纯的tar功能仅是『打包』而已,亦即是将很多档案集结成为一个档案,事实上,他并没有提供压缩的功能,后来,GNU计划中,将整个tar与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的压缩与打包功能!
底下我们就来谈一谈这些在Linux底下基本的压缩指令吧!
compress
[root@linux~]#compress[-dcr]档案或目录
参数:
-d:
用来解压缩的参数
-r:
可以连同目录下的档案也同时给予压缩呢!
-c:
将压缩数据输出成为standardoutput(输出到屏幕)
范例:
范例一:
将/etc/man.config复制到/tmp,并加以压缩
[root@linux~]#cd/tmp
[root@linuxtmp]#cp/etc/man.config.
[root@linuxtmp]#compressman.config
[root@linuxtmp]#ls-l
-rw-r--r--1rootroot2605Jul2711:
43man.config.Z
范例二:
将刚刚的压缩档解开
[root@linuxtmp]#compress-dman.config.Z
范例三:
将man.config压缩成另外一个档案来备份
[root@linuxtmp]#compress-cman.config>
man.config.back.Z
[root@linuxtmp]#llman.config*
-rw-r--r--1rootroot4506Jul2711:
43man.config
46man.config.back.Z
#这个-c的参数比较有趣!
他会将压缩过程的数据输出到屏幕上,而不是写入成为
#file.Z档案。
所以,我们可以透过数据流重导向的方法将数据输出成为另一个档名。
#关于数据流重导向,我们会在bashshell当中详细谈论的啦!
这是用来压缩与解压缩附档名为*.Z的指令!
所以看到*.Z的档案时,就应该要知道他是经由compress这个程序压缩的呦!
这是最简单的压缩指令啰!
不过,使用的时候需要特别留意的是,当你以compress压缩之后,如果没有下达其它的参数,那么原本的档案就会被后来的*.Z所取代!
以上面的案例来说明:
原本压缩的档案为man.config,那么当压缩完成之后,将只会剩下man.config.Z这个经过压缩的档案啰!
那么解压缩呢?
呵呵,则是将man.config.Z解压缩成man.config!
使用上很简单啦!
解压缩除了可以使用compress–d这个参数之外,也可以直接使用uncompress!
意思相同啦!
另外,如果不想让原本的档案被更名成为*.Z,而想制作出另外的一个档名时,就可以利用数据流重导向,亦即是那个大于(>
)的符号,将原本应该在屏幕上面出现的数据给他储存到其它档案去。
当然,这要加上-c的参数才行~关于数据流重导向,我们会在第三篇提到的!
此外,compress已经很少人在使用了,因为这支程序无法解开*.gz的档案,而gzip则可以解决*.Z的档案,所以,如果您的distribution上面没有compress的话,没有关系的喔!
compress使用的频率越来越低了,如果您还是想要练习这个指令的话,在FC4里头,他是在ucompress这个套件名称的套件内。
您可以参考RPM的方式来安装!
gzip,zcat
[root@linux~]#gzip[-cdt#]檔名
[root@linux~]#zcat檔名.gz
将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
解压缩的参数;
-t:
可以用来检验一个压缩档的一致性~看看档案有无错误;
-#:
压缩等级,-1最快,但是压缩比最差、-9最慢,但是压缩比最好!
预设是-6~
将/etc/man.config复制到/tmp,并且以gzip压缩
[root@linux~]#cd/tmp
[root@linuxtmp]#cp/etc/man.config.
[root@linuxtmp]#gzipman.config
#此时man.config会变成man.config.gz!
将范例一的档案内容读出来!
[root@linuxtmp]#zcatman.config.gz
#此时屏幕上会显示man.config.gz解压缩之后的档案内容!
将范例一的档案解压缩
[root@linuxtmp]#gzip-dman.config.gz
范例四:
将范例三解开的man.config用最佳的压缩比压缩,并保留原本的档案
[root@linuxtmp]#gzip-9-cman.config>
man.config.gz
zip是用来压缩与解压缩附档名为*.gz的指令!
所以看到*.gz的档案时,就应该要知道他是经由gzip这个程序压缩的呦!
另外,gzip也提供压缩比的服务!
-1是最差的压缩比,但是压缩速度最快,而-9虽然可以达到较佳的压缩比(经过压缩之后,档案比较小一些!
),但是却会损失一些速度!
预设是-6这个数值!
gzip也是相当常使用的一个压缩指令呢!
至于zcat则是用来读取压缩文件数据内容的指令!
假如我们刚刚压缩的档案是一个文字文件,那么你还记得如何读取文字文件吗?
没错!
就是使用cat,那么读取压缩档呢?
就是使用zcat啰!
由于gzip这个压缩指令主要想要用来取代compress的,所以compress的压缩档案也可以使用gzip来解开喔!
同时,zcat这个指令可以同时读取compress与gzip的压缩档呦!
bzip2,bzcat
[root@linux~]#bzip2[-cdz]檔名
[root@linux~]#bzcat檔名.bz2
将压缩的过程产生的数据输出到屏幕上!
解压缩的参数
-z:
压缩的参数
与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快!
将刚刚的/tmp/man.config以bzip2压缩
[root@linuxtmp]#bzip2-zman.config
#此时man.config会变成man.config.bz2!
[root@linuxtmp]#bzcatman.config.bz2
#此时屏幕上会显示man.config.bz2解压缩之后的档案内容!
[root@linuxtmp]#bzip2-dman.config.bz2
[root@linuxtmp]#bzip2-9-cman.config>
man.config.bz2
使用compress附档名自动建立为.Z,使用gzip附档名自动建立为.gz。
这里的bzip2则是自动的将附档名建置为.bz2啰!
所以当我们使用具有压缩功能的bzip2-z时,那么刚刚的man.config就会自动的变成了man.config.bz2这个档名啰!
好了,那么如果我想要读取这个档案的内容呢?
是否一定要解开?
当然不需要啰!
可以使用简便的bzcat这个指令来读取内容即可!
例如上面的例子中,我们可以使用bzcatman.config.bz2来读取数据而不需要解开!
此外,当您要解开一个压缩档时,这个档案的名称为.bz,.bz2,.tbz,.tbz2等等,那么就可以尝试使用bzip2来解看看啦!
当然啰,也可以使用bunzip2这个指令来取代bzip2-d啰。
tar
[root@linux~]#tar[-cxtzjvfpPN]档案与目录....
建立一个压缩档案的参数指令(create的意思);
-x:
解开一个压缩档案的参数指令!
查看tarfile里面的档案!
特别注意,在参数的下达中,c/x/t仅能存在一个!
不可同时存在!
因为不可能同时压缩与解压缩。
是否同时具有gzip的属性?
亦即是否需要用gzip压缩?
-j:
是否同时具有bzip2的属性?
亦即是否需要用bzip2压缩?
-v:
压缩的过程中显示档案!
这个常用,但不建议用在背景执行过程!
-f:
使用档名,请留意,在f之后要立即接档名喔!
不要再加参数!
例如使用『tar-zcvfPtfilesfile』就是错误的写法,要写成
『tar-zcvPftfilesfile』才对喔!
-p:
使用原档案的原来属性(属性不会依据使用者而变)
-P:
可以使用绝对路径来压缩!
-N:
比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!
--excludeFILE:
在压缩的过程中,不要将FILE打包!
将整个/etc目录下的档案全部打包成为/tmp/etc.tar
[root@linux~]#tar-cvf/tmp/etc.tar/etc<
==仅打包,不压缩!
[root@linux~]#tar-zcvf/tmp/etc.tar.gz/etc<
==打包后,以gzip压缩
[root@linux~]#tar-jcvf/tmp/etc.tar.bz2/etc<
==打包后,以bzip2压缩
#特别注意,在参数f之后的档案档名是自己取的,我们习惯上都用.tar来作为辨识。
#如果加z参数,则以.tar.gz或.tgz来代表gzip压缩过的tarfile~
#如果加j参数,则以.tar.bz2来作为附档名啊~
#上述指令在执行的时候,会显示一个警告讯息:
#『tar:
Removingleading`/'
frommembernames』那是关于绝对路径的特殊设定。
查阅上述/tmp/etc.tar.gz档案内有哪些档案?
[root@linux~]#tar-ztvf/tmp/etc.tar.gz
#由于我们使用gzip压缩,所以要查阅该tarfile内的档案时,
#就得要加上z这个参数了!
这很重要的!
将/tmp/etc.tar.gz档案解压缩在/usr/local/src底下
[root@linux~]#cd/usr/local/src
[root@linuxsrc]#tar-zxvf/tmp/etc.tar.gz
#在预设的情况下,我们可以将压缩档在任何地方解开的!
以这个范例来说,
#我先将工作目录变换到/usr/local/src底下,并且解开/tmp/etc.tar.gz,
#则解开的目录会在/usr/local/src/etc呢!
另外,如果您进入/usr/local/src/etc
#则会发现,该目录下的档案属性与/etc/可能会有所不同喔!
在/tmp底下,我只想要将/tmp/etc.tar.gz内的etc/passwd解开而已
[root@linuxtmp]#tar-zxvf/tmp/etc.tar.gzetc/passwd
#我可以透过tar-ztvf来查阅tarfile内的文件名称,如果单只要一个档案,
#就可以透过这个方式来下达!
注意到!
etc.tar.gz内的根目录/是被拿掉了!
范例五:
将/etc/内的所有档案备份下来,并且保存其权限!
[root@linux~]#tar-zcvpf/tmp/etc.tar.gz/etc
#这个-p的属性是很重要的,尤其是当您要保留原本档案的属性时!
范例六:
在/home当中,比2005/06/01新的档案才备份
[root@linux~]#tar-N'
2005/06/01'
-zcvfhome.tar.gz/home
范例七:
我要备份/home,/etc,但不要/home/dmtsai
[root@linux~]#tar--exclude/home/dmtsai-zcvfmyfile.tar.gz/home/*/etc
范例八:
将/etc/打包后直接解开在/tmp底下,而不产生档案!
[root@linuxtmp]#tar-cvf-/etc|tar-xvf-
#这个动作有点像是cp-r/etc/tmp啦~依旧是有其有用途的!
#要注意的地方在于输出档变成-而输入档也变成-,又有一个|存在~
#这分别代表standardoutput,standardinput与管线命令啦!
#这部分我们会在Bashshell时,再次提到这个指令跟大家再解释啰!
这是一个多用途的压缩指令!
刚刚我们提到的compress与gzip是可以适用在一个档案的压缩上面,但是如果是要将一个目录压缩成一个档案呢?
这时该如何是好?
tar就派上用场了!
tar可以将整个目录或者是指定的档案都整合成一个档案!
例如上面的范例一,他可以将/etc底下的档案全部整合成一个档案!
同时,tar可以配合gzip(这个gzip的功能已经已经附加上tar里面去了),同时整合并压缩!
很方便吧!
『tar用来作备份是很重要的指令!
』而由于tar整合过后的档案我们通常会取名为*.tar,而如果还含有gzip的压缩属性,那么就取名为*.tar.gz啰!
取这个文件名只是为了方便我们记忆这个档案是什么属性罢了!
并没有实际的意义在!
#绝对路径与权限的问题
另外,需要注意的是,在使用的参数方面,有还有几个有用的参数需要来了解一番,亦即是-p与-P这两个!
在我们的范例一当中,有提到一个警告讯息,那就是『tar:
frommembernames』意思是说,tar将/etc目录的那个/拿掉了!
这是因为担心未来你在解开压缩的时候,会产生一些困扰,因为在tar里面的档案如果是具有『绝对路径』的话,那么你解开的档案将会『一定』在该路径下也就是/etc,而不是相对路径(这里请用心的想一想!
)。
这样子的最大困扰是,万一有人拿走了你的这个档案,并且将该档案在他的系统上面解开!
万一他的系统上面正巧也有/etc这个目录(那当然是一定有的啊!
),哈哈!
他的档案就会『正巧』被覆盖了!
所以啰,在预设的情况中,如果是以『绝对路径』来建立打包档案,那么tar将会自动的将/拿掉!
这是为了刚刚说明的『安全』为前提所做的默认值。
好了!
但是你就是要以绝对路径来建立打包