?? 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 + -