📄 0240tarcompress.htm
字号:
使一个大型档案可以分割成为数个小型档案,以方便软碟片携带呢!<br><br>
那么什么是『档案压缩』呢?我们来稍微谈一谈他的原理好了。目前我们使用的电脑系统中都是使用所谓的
bytes 单位来计量的!不过,事实上,电脑最小的计量单位应该是 bits 才对啊,此外,我们也知道
1 byte = 8 bits 。但是如果今天我们只是记忆一个数字,亦即是 1 这个数字呢?他会如何记录?假设一个
byte 可以看成底下的模样∶
<ul>□□□□□□□□</ul>
<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen"> 由于 1 byte = 8 bits ,所以每个 byte 当中会有
8 个空格,而每个空格可以是 0, 1 ,这里仅是做为一个约略的介绍,读者不必刻意记忆。
</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div>
而由于我们记录数字是 1 ,考虑电脑所谓的二进位喔,如此一来, 1 会在最右边占据
1 个 bit ,而其他的 7 个 bits 将会自动的被填上 0 棉!你看看,其实在这样的例子中,那
7 个 bits 应该是『空的』才对!不过,为了要满足目前我们的作业系统资料的存取,所以就会将该资料转为
byte 的型态来记录了!而一些聪明的电脑工程师就利用一些复杂的计算方式,
将这些没有使用到的空间『丢』出来,以让档案占用的空间变小!这就是压缩的技术啦!<br><br>
简单的说,你可以将他想成,其实档案里面有相当多的『空间』存在,并不是完全填满的,
而『压缩』的技术就是将这些『空间』填满,以让整个档案占用的容量下降!
不过,这些『压缩过的档案』并无法直接被我们的作业系统所使用的,因此,
若要使用这些被压缩过的档案资料,则必须将他『还原』回来未压缩前的模样,
那就是所谓的『解压缩』棉!而至于<span class=text_import2>压缩前与压缩后的档案所占用的磁碟空间大小,
就可以被称为是『压缩比』棉</span>!更多的技术文件或许你可以参考一下∶<ul>
<li><a href="http://www.faqs.org/rfcs/rfc1952.html"
target="_blank">RFC 1952 文件∶http://www.faqs.org/rfcs/rfc1952.html</a>
<li>鸟哥站上的备份∶<a href="0240tarcompress/0240tarcompress_gzip.php">
http://linux.vbird.org/linux_basic/0240tarcompress/0240tarcompress_gzip.php</a></ul>
这个『压缩』与『解压缩』的动作有什么好处呢?最大的好处就是压缩过的档案容量变小了,
所以你的硬碟容量无形之中就可以容纳更多的资料,此外,在一些网路资料的传输中,也会由于资料量的降低,
好让网路频宽可以用来作更多的工作!而不是老是卡在一些大型的档案上面呢!目前很多的
WWW 网站也是利用档案压缩的技术来进行资料的传送,好让网站的可利用率上升喔!<br>
<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen"> 这种技术蛮有趣的!他让您网站上面『看的到的资料』在经过网路传输时,使用的是『压缩过的资料』,
等到这些压缩过的资料到达你的电脑主机时,再进行解压缩,由于目前的电脑运算速度相当的快速,
因此其实在网页浏览的时候,时间都是花在『资料的传输』上面,而不是
CPU 的运算啦!,如此一来,由于压缩过的资料量降低了,自然传送的速度就会增快不少!
</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div>
若您是一位软体工程师,那么相信您也会喜欢将你自己的软体压缩之后提供大家下载来使用,
毕竟没有人喜欢自己的网站天天都是频宽满载的吧?!举个例子来说,
Linux 2.4.19 完整的核心大小约有 200 MB 左右,而由于核心主要多是 ASCII code
的纯文字型态档案,这种档案的『多馀空间』最多了。而一个提供下载的压缩过的
2.4.19 核心大约仅有 30MB 左右,差了几倍呢?您可以自己算一算喔!
</div>
<hr><a NAME="compress_name"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">Linux 系统常见的压缩指令∶</span><br>
<div class=block1>
如果您常常在网路上面捉 Linux 的资料下来玩的话,大概会晓得的是,这些供人下载的档案通常都是『压缩』过的!
为了什么?上面已经稍微提过啦!呵呵!压缩过的档案具有节省频宽、节省磁碟空间等等的优点,并且还方便携带呢!
^_^ !而,您应该也会知道,这些被压缩过的档案,通常其附档名都是『
<span class=text_import2><font face="细明体">*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2 </font></span> 』
等等的,为什么要订定这些压缩档案附档名为这样的模样呢?<br><br>
这是因为在 Linux 上面压缩的指令相当的多,并且,这些压缩指令可能无法针对每种压缩档案都可以解的开,
毕竟目前的压缩技术五花八门,每种压缩计算的方法都不是完全相同的,所以棉,当你捉到某个压缩档时,
自然就需要知道压缩他的是那个指令啦,好用来对照著解压缩啊!
^_^!也就是说,虽然 Linux 档案的属性基本上是与档名没有绝对关系的,能不能执行与他的档案属性有关而已,
与档名的关系很小!但是,为了帮助我们小小的人类脑袋瓜子,所以适当的档案名称附档名还是必要的!
因此,目前就有一些常常见到的压缩档案的附档名啦!我们仅列出常见的几样在底下,给大家权做参考之用∶
<ul><span class=text_import2><font face="细明体">
<li> *.Z compress 程式压缩的档案;
<li> *.bz2 bzip2 程式压缩的档案;
<li> *.gz gzip 程式压缩的档案;
<li> *.tar tar 程式打包的资料,并没有压缩过;
<li> *.tar.gz tar 程式打包的档案,其中并且经过 gzip 的压缩</ul></font></span>
目前常见的压缩程式主要就是如同上面提到的附档名对应的那些指令啦!最早期的要算是
compress 这个家伙了,不过这个 compress 指令目前已经不再是预设的压缩软体了~
而后,后来的 <a href="http://www.gnu.org" target="_blank">GNU
计画</a>开发出新一代的压缩指令 gzip ( GNU zip ) 用来取代 compress 这个老牌的压缩指令,再来还有
bzip2 这个压缩比更好的压缩指令呢!不过,这些指令通常仅能针对一个档案来压缩与解压缩,如此一来,
每次压缩与解压缩都要一大堆档案,岂不烦人?此时,那个所谓的『打包软体』就显的很重要啦!<br><br>
在 Unix-Like 当中,有个软体很好玩,他就是 tar 这支程式!这个 tar 可以将很多档案『打包』成为一个档案!
甚至是目录也可以这么玩。不过,单纯的
tar 功能仅是『打包』而已,亦即是将很多档案集结成为一个档案,事实上,他并没有提供压缩的功能,后来,
<a href="http://www.gnu.org/home.zh.html" target="_blank">GNU
计画</a>中,将整个 tar 与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的压缩与打包功能!
底下我们就来谈一谈这些在 Linux 底下基本的压缩指令吧!<br><br>
<hr><a name=compress></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>compress </span><br>
<div class=block2>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>compress [-dcr] 档案或目录</span>
<span class=term_say>参数∶
-d ∶用来解压缩的参数
-r ∶可以连同目录下的档案也同时给予压缩呢!
-c ∶将压缩资料输出成为 standard output (输出到萤幕)
范例∶</span>
<span class=term_hd>范例一∶将 /etc/man.config 复制到 /tmp ,并加以压缩</span>
[root@linux ~]# <span class=term_command>cd /tmp</span>
[root@linux tmp]# <span class=term_command>cp /etc/man.config .</span>
[root@linux tmp]# <span class=term_command>compress man.config</span>
[root@linux tmp]# <span class=term_command>ls -l</span>
-rw-r--r-- 1 root root 2605 Jul 27 11:43 man.config.Z
<span class=term_hd>范例二∶将刚刚的压缩档解开</span>
[root@linux tmp]# <span class=term_command>compress -d man.config.Z</span>
<span class=term_hd>范例三∶将 man.config 压缩成另外一个档案来备份</span>
[root@linux tmp]# <span class=term_command>compress -c man.config > man.config.back.Z</span>
[root@linux tmp]# <span class=term_command>ll man.config*</span>
-rw-r--r-- 1 root root 4506 Jul 27 11:43 man.config
-rw-r--r-- 1 root root 2605 Jul 27 11:46 man.config.back.Z
<span class=term_say># 这个 -c 的参数比较有趣!他会将压缩过程的资料输出到萤幕上,而不是写入成为
# file.Z 档案。所以,我们可以透过资料流重导向的方法将资料输出成为另一个档名。
# 关于资料流重导向,我们会在 bash shell 当中详细谈论的啦!</span>
</pre></td></tr></table>
这是用来压缩与解压缩附档名为 *.Z 的指令!所以看到 *.Z 的档案时,就应该要知道他是经由 compress
这个程式压缩的呦!这是最简单的压缩指令棉!不过,使用的时候需要特别留意的是,
<span class=text_import2>当你以 compress 压缩之后,如果没有下达其他的参数,那么原本的档案就会被后来的
*.Z 所取代!</span>以上面的案例来说明∶原本压缩的档案为 man.config ,那么当压缩完成之后,将只会剩下
man.config.Z 这个经过压缩的档案棉!那么解压缩呢?呵呵,则是将 man.config.Z 解压缩成 man.config !
使用上很简单啦!解压缩除了可以使用 compress ˉd 这个参数之外,也可以直接使用 uncompress
!意思相同啦!<br><br>
另外,如果不想让原本的档案被更名成为 *.Z ,而想制作出另外的一个档名时,就可以利用资料流重导向,
亦即是那个大于 (>) 的符号,将原本应该在萤幕上面出现的资料给他储存到其他档案去。
当然,这要加上 -c 的参数才行~关于资料流重导向,我们会在第三篇提到的!此外, compress 已经很少人在使用了,
因为这支程式无法解开 *.gz 的档案,而 gzip 则可以解决 *.Z 的档案,
所以,如果您的 distribution 上面没有 compress 的话,没有关系的喔!<br>
<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen"> compress 使用的频率越来越低了,如果您还是想要练习这个指令的话,
在 FC4 里头,他是在 ucompress 这个套件名称的套件内。您可以参考 <a href="0520rpm_and_srpm.php">RPM</a>
的方式来安装!
</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div> </div>
<hr><a name=gzip></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>gzip, zcat </span><br>
<div class=block2>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>gzip [-cdt#] 档名</span>
[root@linux ~]# <span class=term_command>zcat 档名.gz</span>
<span class=term_say>参数∶
-c ∶将压缩的资料输出到萤幕上,可透过资料流重导向来处理;
-d ∶解压缩的参数;
-t ∶可以用来检验一个压缩档的一致性~看看档案有无错误;
-# ∶压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6 ~
范例∶</span>
<span class=term_hd>范例一∶将 /etc/man.config 复制到 /tmp ,并且以 gzip 压缩</span>
[root@linux ~]# <span class=term_command>cd /tmp </span>
[root@linux tmp]# <span class=term_command>cp /etc/man.config . </span>
[root@linux tmp]# <span class=term_command>gzip man.config </span>
<span class=term_say># 此时 man.config 会变成 man.config.gz !</span>
<span class=term_hd>范例二∶将范例一的档案内容读出来!</span>
[root@linux tmp]# <span class=term_command>zcat man.config.gz</span>
<span class=term_say># 此时萤幕上会显示 man.config.gz 解压缩之后的档案内容!!</span>
<span class=term_hd>范例三∶将范例一的档案解压缩</span>
[root@linux tmp]# <span class=term_command>gzip -d man.config.gz</span>
<span class=term_hd>范例四∶将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的档案</span>
[root@linux tmp]# <span class=term_command>gzip -9 -c man.config > man.config.gz</span>
</pre></td></tr></table>
gzip 是用来压缩与解压缩附档名为 *.gz 的指令!所以看到 *.gz 的档案时,就应该要知道他是经由 gzip
这个程式压缩的呦!另外, gzip 也提供 压缩比的服务! -1 是最差的压缩比,但是压缩速度最快,而
-9 虽然可以达到较佳的压缩比 (经过压缩之后,档案比较小一些!) ,但是却会损失一些速度!预设是 -6
这个数值! gzip 也是相当常使用的一个压缩指令呢!<br><br>
至于 zcat 则是用来读取压缩档资料内容的指令!假如我们刚刚压缩的档案是一个文字档,
那么你还记得如何读取文字档吗?!没错!就是使用 cat ,那么读取压缩档呢?呵呵!就是使用 zcat 棉!由于
gzip 这个压缩指令主要想要用来取代 compress 的,所以 compress 的压缩档案也可以使用
gzip 来解开喔!同时, zcat 这个指令可以同时读取 compress 与 gzip 的压缩档呦!<br><br>
</div>
<hr><a name=bzip2></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>bzip2, bzcat </span><br>
<div class=block2>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>bzip2 [-cdz] 档名</span>
[root@linux ~]# <span class=term_command>bzcat 档名.bz2</span>
<span class=term_say>参数∶
-c ∶将压缩的过程产生的资料输出到萤幕上!
-d ∶解压缩的参数
-z ∶压缩的参数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -