萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Bzip2 Howto

Bzip2 Howto

class="21971"> 作者: David Fetter, [email protected]
譯者:謝昆中 HSIEH KUN-CHUNG, (電子郵件 [email protected] 或 [email protected] 網頁 "Linux for Taiwan 台灣人的 Linux" http://members.xoom.com/linux4tw/

版本 v1.92,1998年 8月18日 


--------------------------------------------------------------------------------
這份文件在教你如何使用新的 bzip2 壓縮程式。目前的 sgml 版本被放在 EURO 這□,還有 "作者用的" sgml 檔放在 http://www.best.com/~dfetter/Bzip2-HOWTO/Bzip2-HOWTO.sgml。 
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

1. 簡介
Bzip2 是個很棒的壓縮資料用之新型演算法。大致上能夠達到以它的對手 gzip 所產出的檔案之 60-70% 左右的壓縮率。 


這份文件將教你幾個 bzip2 的應用軟體。 


本文件的未來版將會討論即將出現的 bzip2 程式庫,該程式庫原bzip2 的作者 Julian Seward 描述如下: 


現在正致力於 bzip2 的下一個版本,它也將采用相同的 .bz2 檔案格式;
主要增加的功能是一個像 zlib 的程式庫。讓我們可以從程式□頭來讀取和書寫資料到這種格式的檔案□。


本文件的未來版本也會包含是否應該 (以及如何)讓 Linux kernel 使用 bzip2之議題的結論。 


1.1 沿革歷史 
v1.92更新 取得 bzip2 二進位程式碼 章節,加入 S.u.S.E.的。
v1.91
在 使用 bzip2 配合 tar 那章□修正一個□例以及弄清楚一些 shell 句子。感謝 Alessandro Rubini。 


更新 buzzit 工具不會去 stomp 原來的 bzip2 壓縮檔。 


新增 bgrep, 像 zgrep-的工具。 


v1.9
澄清 gcc 2.7.* 的問題。感謝 Ulrik Dickow 的熱心指出。 


加入 Leonard Jean-Marc 很棒的配合 tar 


加上 Linus 攀erlund 的瑞典文版本。 


依照 Arnaud Launay 的建議修正了 wu-ftpd 章節 


把譯文放到它們自己的位章節上。 


v1.8
把 buzzit 和 tar.diff 放到 sgml 文件□它們應該被放置的地方。修正拼字與格式。感謝 Arnaud Launay 的協助我修正這份文件。:-) 


殺掉 xv 計畫,因此大家不感興趣。 


加上 teasers 為本文件的未來版本。 


v1.7 
加入 buzzit 公用程式。修正對 gnu tar 的修補。 


v1.6 
加入 TenThumbs 的 Netscape 致能者。 


以及依據它的建議更改 lesspipe.sh 。它現在可以工作的更好了。 


v1.5 
加入 Arnaud Launay 的法文譯本,以及他的 wu-ftpd 檔。 


v1.4 
加入 Tetsu Isaji 的日文譯本。 


v1.3 
加入 Ulrik Dickow 給 19.30 或更高版本用的 .emacs 檔□


(還有修正給 emacs用的 jka-compr.el 修補檔。糟了! Bzip2 還沒有(?) "append" 的旗標選項。) 


v1.2 
加入對 emacs 的修補,讓它可以自動地辦識出 .bz2 檔。 


v1.1 
加入對 emacs 


v1.0 
第一回合。 




--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

2. 取得 bzip2
Bzip2 的主網頁在 英國的主網站http://www.muraroa.demon.co.uk/。美國的映射站在 這http://www.digistar.com/bzip2/index.html。你也可以在 Red Hat 的ftp 站□ ftp://ftp.redhat.com/pub/contrib。 


2.1 Bzip2-HOWTO 各種語言版本 
說法語的人可以看看 Arnaud Launay 的法文文件。網頁版本在 這□http://www.freenix.fr/linux/HOWTO/mini/Bzip2.html,你可以用 ftp 來取得ftp://ftp.lip6.fr/pub/linux/french/docs/HOWTO/mini/Bzip2.gz 你可以用 電子郵件來連絡Arnaud 


說日語的人可以看看 Tetsu Isaji的 日文譯本。你可以用上Isaji的 網站,或是用 電子郵件的方式。 



說瑞典語的朋友可以參閱 Linus 攀erlund 的瑞典文譯本 按這。你可以用 電子郵件 與 Linus 連絡。 


2.2 取得 bzip2 未編譯的二進位檔 
查一下主網站。 


Debian 的Intel 二進位程式碼在 這□ftp://ftp.debian.org/debian/dists/stable/main/binary-i386/utils/bzip2_0.1pl2-5.deb。 


Red Hat的 alpha 二進位程式碼在 這□ftp://ftp.redhat.com/pub/redhat/redhat-5.1/alpha/RedHat/RPMS/bzip2-0.1pl2-1.alpha.rpm。 


Red Hat的 Intel 二進位程式碼在 這□ftp://ftp.redhat.com/pub/redhat/redhat-5.1/i386/RedHat/RPMS/bzip2-0.1pl2-1.i386.rpm。 


Red Hat的 SPARC 二進位程式碼在 這□ftp://ftp.redhat.com/pub/redhat/redhat-5.1/sparc/RedHat/RPMS/bzip2-0.1pl2-1.sparc.rpm。 


Slackware的 Intel 二進位程式碼在 這□ftp://www.cdrom.com/pub/linux/slackware-3.5/slakware/a1/bzip2.tgz。 


S.u.S.E.的 Intel 二進位程式碼在 這□ftp://ftp.suse.com/pub/SuSE-Linux/5.2/suse/ap1/bzip.rpm。 

你也可以從許多相類似的映射站得取得檔案。 


2.3 取得 bzip2 原始程式 
你可以從官方的網站 (看 Getting Bzip2 ,或是 Red Hat 也有 它ftp://ftp.redhat.com/pub/contrib/SRPMS/bzip2-0.1pl2-1.src.rpm)。 


2.4 編譯 bzip2 給你的機器使用 
如果你有 gcc 2.7.*,將下面這行 

CFLAGS = -O3 -fomit-frame-pointer -funroll-loops

改成 

CFLAGS = -O2 -fomit-frame-pointer

也就是,把 -O2 改成 -O3 並把 -funroll-loops刪掉。你也可以加入任何你在編譯 kernel 時的 -m* 旗標 (例如像 -m486)。 

避免使用 -funroll-loops 是最重要的了,因為它會造成許多的 gcc 2.7產生錯誤的程式碼,以及全部的 gcc 2.7 產生速度慢又較胖的程式碼。對其他的編譯器 (lcc, egcs, gcc 2.8.x) 使用內定的 CFLAGS 就沒問題。 

之後,只需 make 它,然後依照 README 來安裝它。 



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

3. 使用 bzip2
請參閱很棒的手冊 :) 



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

4. 配合 tar來使用 bzip2
下面有三種配合 tar 使用 bzip2 的方法,也就是 

4.1 容易設立: 
這個方法跟本就不必做設定。執行解開bzip2'd 的 tar包裹,在現行目錄底下有個 foo.tar.bz2,執行 

/path/to/bzip2 -cd foo.tar.bz2 | tar xf -

成功了,但可能有常需輸入的小缺點。 


4.2 容易設立,容易使用,不需要 root 的特權: 
感謝 Leonard Jean-Marc 貢獻這個小技巧。也謝謝 Alessandro Rubini 從 csh□分類出 bash 的。 


在你的 .bashrc□,你可以加入像下面這行: 

alias btar='tar --use-compress-program /usr/local/bin/bzip2 '


在你的 .tcshrc 或 .cshrc□,可用下面這行相同的: 

alias btar 'tar --use-compress-program /usr/local/bin/bzip2'


4.3 同樣是容易使用,但需要 root 來存取。 
用下面來方法來修補 gnu tar 1.12: 

cd tar-1.12/src; patch < /path/to/tar.diff

編譯、安裝它,你已准備就緒了。用"which tar" 和 "which bzip2"來確認這兩個 tar 和 bzip2 有在你的 $PATH □。要使用新的 tar,只需 
 tar xyf foo.tar.bz2

來壓縮檔案。 
要制作新的壓縮檔,同樣地: 

 tar cyf foo.tar.bz2 檔名1 檔名2 檔名3...目錄1 目錄2...

下面是修補的地方: 

*** tar.c       Thu Jun 11 00:09:23 1998
--- tar.c.new   Thu Jun 11 00:14:24 1998
***************
*** 196,201 ****
--- 196,203 ----
    {"block-number", no_argument, NULL, 'R'},
    {"block-size", required_argument, NULL, OBSOLETE_BLOCKING_FACTOR},
    {"blocking-factor", required_argument, NULL, 'b'},
+   {"bzip2", required_argument, NULL, 'y'},
+   {"bunzip2", required_argument, NULL, 'y'},
    {"catenate", no_argument, NULL, 'A'},
    {"checkpoint", no_argument, &checkpoint_option, 1},
    {"compare", no_argument, NULL, 'd'},
***************
*** 372,377 ****
--- 374,380 ----
    
copyright © 萬盛學電腦網 all rights reserved