天天看點

Linux 檔案壓縮工具指南

檔案的壓縮和解壓縮是計算曆史上最有用的創造之一,但缺乏可移植性和開放工具是阻礙它發揮其應有作用的最主要的一個障礙。隻要我們是與其他使用類似 Unix 作業系統的使用者交換檔案,就可以使用例如

這種事态發展下去會很危險。想象一下,将來我們可能無法對檔案的重要部分譯碼,原因是我們建立它們時使用的是專用工具和算法,而那些工具運作所在的作業系統和硬體已逐漸過時,消失不見。這就是為什麼我們應該使用開放源碼壓縮工具,或者至少使用免費和有完善記載算法的商業壓縮工具的原因。(隻是要記住避免使用任何特殊的增強。)

本文是有關在 Linux 作業系統上使用 <code>.arc</code> 、 <code>.arj</code> 、 <code>.lzh</code> (

<code>.lha</code> )、 <code>.rar</code> 、 <code>.sit</code> 、 <code>.zip</code> 和 <code>.zoo</code> 檔案的指南。我選擇讨論這些特殊的格式是因為三種最流行的作業系統 (MS-DOS、微軟 Windows 和 Mac OS)的使用者最常使用它們。我之是以寫這篇指南是希望引導大家快速找出正确的工具,而不是詳細地從技術上讨論檔案壓縮技術。

最後,我想簡短說明一下自抽取檔案。這樣的檔案往往位于包含壓縮格式資料的現實程式中。執行它們時,它們會解包,并将存儲在程式主體内的資料複制到您指定的任何驅動器上。唯一的問題是它們無法在 Linux 上使用,沒有工具可以抽取它們。在這種情況下,需要讓建立檔案的那個人将它作為一個一般檔案壓縮。

目前先說到這裡。我希望這個指南能對您有所幫助,并期待着您的意見和建議。

<a href="http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip07/#0"><code>.arc</code></a>

<a href="http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip07/#1"><code>.arj</code></a>

<a href="http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip07/#2"><code>.lzh</code> ( <code>.lha</code> )</a>

<a href="http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip07/#3"><code>.rar</code></a>

<a href="http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip07/#4"><code>.sit</code></a>

<a href="http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip07/#5"><code>.zip</code></a>

<a href="http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip07/#6"><code>.zoo</code></a>

<a>.arc</a>

帶有 <code>.arc</code> 擴充名的檔案相對來說比較少見。如果您偶然碰到一個,基本上可以認定它是使用舊的 MS-DOS SAE ARC 或 PKware PKARC 歸檔實用程式建立的。這種形式在 Linux 上的支援性不是太好,并很難指望在 Linux 機器上對這些檔案解壓縮。如果需要建立

<code>.arc</code> 檔案,嘗試在 DOSEMU 或 VMware 下運作原始 SAE ARC 或 PKware PKARC(在攜帶 MS-DOS 實用程式的 FTP 伺服器上查找它們)。

要解壓縮 <code>.arc</code> 檔案,使用 Aladdin Expander for Linux。寫這篇文章的時候,Aladdin Expander 可以為公衆 Beta 測試目的免費獲得;它是否繼續免費還是個未知問題。

要解壓縮 <code>.arc</code> 檔案,輸入 <code>unstuff file.arc</code> 。 <code>-d</code> 是個有用的選項,指定解壓縮檔案的目标位置。例如:

<code>unstuff -d=./home/james/incoming file.arc</code> 。

<a href="http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip07/#ibm-pcon">回頁首</a>

<a>.arj</a>

帶有 <code>.arj</code> 擴充名的檔案是使用 ARJ Software 用于 MS-DOS 和 Windows 的 ARJ 實用程式建立的。因為 ARJ 是一種不能免費獲得源代碼的共享件程式,是以在 Linux 平台上幾乎不存在與其功能比對的工具,這使得

<code>.arj</code> 檔案使用起來相當困難。

對于 ARJ 檔案,隻要能成功地解壓縮就已經夠幸運的了。不可能在 Linux 上進行 <code>.arj</code> 形式的壓縮,因為沒有用于 Linux 的、生成這種檔案的本機壓縮工具。(可以嘗試在 DOSEMU 或 VMware 下運作原始 ARJ 軟體,但這根本算不上是一種易于使用的解決方案)。

要解壓縮 <code>.arj</code> 檔案,使用 <code>unarj</code> 實用程式。它比 ARJ 慢,能力也不如 ARJ,但至少它能夠順利地抽取大多數

<code>.arj</code> 檔案。它隻能将檔案抽取到目前的工作目錄、列出檔案内容,或者測試檔案。

要檢視簡短的幫助頁面,輸入 <code>unarj</code> ;如需較詳細的描述,請參閱 <code>unarj.doc</code> 檔案,通常它位于

<code>/usr/doc/unarj-2.43</code> 目錄中。

盡管在哪裡解壓縮 <code>.arj</code> 檔案是由您來選擇的,但為避免把主工作目錄混淆,通常應該在主目錄中建立一個臨時子目錄,将目前工作目錄更改到新目錄,将壓縮的檔案移到新目錄中,然後使用

<code>unarj e archive.arj</code> 來解壓縮有問題的檔案。

用于 Linux 的 <code>unarj</code> 隻能一次抽取所有檔案;不能從檔案中抽取個别檔案。至少如果檔案已存在于目前的工作目錄中,即使在檔案中找到具有相同名稱的檔案,您也不會覆寫其内容。另外,

<code>unarj</code> 不支援空目錄或自抽取檔案;後者是 MS-DOS/Windows 程式,它們無法在 Linux 上運作,但可以在 DOSEMU 或 VMware 下運作。

以下是其它一些 <code>unarj</code> 選項:

<code>unarj archive.arj</code> 或 <code>unarj l archive.arj</code> -- 列出檔案内容

<code>unarj t archive.arj</code> -- 測試檔案

<code>unarj x archive.arj</code> -- 帶路徑名抽取檔案

請注意, <code>unarj</code> 選項不是以減号 ( <code>-</code> ) 開頭的。

<code>simple.arj</code> 檔案,在其中要避免使用所有進階 ARJ 選項,例如卷、将檔案分成幾個小部分、以及自抽取。

為什麼不使用自抽取 ARJ 檔案呢?這些是不能在 Linux 下運作的 MS-DOS 樣式的可執行檔案;它們使用不同的系統庫,它們的内部格式也與 Linux 所需的二進制可執行檔案的格式不同。可能可以在 DOSEMU 或 VMware 下運作自抽取 ARJ 檔案。

以 ARJ 或 JAR 形式進行的壓縮仍然不能在 Linux 上使用,按照 ARJ Software 的 FAQ 頁面的說法,我們不應該等待 Linux 移植。如果您知道有任何 Linux 工具可以解壓縮

<code>.jar</code> 檔案,請務必告訴我。

可以從 ARJ Software 的站點或攜帶您所需 Linux 發行版的 FTP 伺服器上下載下傳 unarj 源碼。另外,unarj 通常是基本 Linux 發行版的一部分,是以可以在主要分發 CD-ROM 上找到它。如需到所有 Linux 發行版的連結的清單,請參閱 Linux 發行版頁面。

<a>.lzh (.lha)</a>

帶有 <code>.lzh</code> 或 <code>.lha</code> 擴充名的檔案使用的是 LHa、LHarc 或 LHx 壓縮實用程式進行的壓縮。這些實用程式是由 Y. Tagawa、H. Yoshizaki、Momozou 和 Masaru Oki 開發的。這些實用程式已移植到許多作業系統,使用它們所建立的檔案也具有相當的可移植性。Mats Andersson 執行了 Linux 移植。

與 gzip 不同, <code>lha</code> 實用程式執行多個檔案的壓縮。要壓縮單個檔案,輸入 <code>lha a archive file</code> 。

<code>lha</code> 建立的檔案帶有 <code>.lzh</code> 擴充名。如果 <code>archive.lzh</code> 已在目前的工作目錄中存在,那麼您讓

<code>lha</code> 壓縮的檔案就将添加到這一現有的檔案中。 <code>archive.lzh</code> 先前的内容仍被保留,除非它已包含帶有相同名稱的檔案,在這種情況下,舊檔案将被新檔案取代。該操作是

盲目的, 意味着它不檢查檔案的時間戳記;要確定隻有帶有更新時間戳記的檔案才能替換檔案中已儲存的較舊的檔案,這時使用 <code>u</code> 選項而不是

<code>a</code> 選項(例如, <code>lha u archive file</code> )。

當收到 <code>.lzh</code> 檔案的人抱怨無法解壓縮檔案時,嘗試使用 <code>lha ag archive file</code> 或 <code>lha ao archive file</code> 。 <code>g</code> 和 <code>o</code> 選項分别訓示 <code>lha</code> 使用正常或與

<code>lha</code> 相容的歸檔方法。如果您隻更新現有的檔案,使用 <code>u</code> 而不是 <code>a</code> 。

歸檔多個檔案和歸檔單個檔案一樣容易:使用通配符(例如, <code>lha a archive files*</code> )或輸入存儲檔案所在的頂級目錄(例如,

<code>lha a archive directory</code> )。所有檔案和子目錄都将自動存儲在檔案中。檔案替換規則和 <code>u</code> 選項對多個檔案和單個檔案所起的作用是一樣的。通配符使用的文法和您在常用的 shell 中所使用的文法相同。

以下是其它一些 <code>lha</code> 選項:

<code>l</code> -- 列出檔案内容(例如, <code>lha l archive.lzh</code> )

<code>v</code> -- 列出詳細格式的檔案内容(例如, <code>lha v archive.lzh</code> )

<code>t</code> -- 測試檔案的完整性(例如, <code>lha t archive.lzh</code> )

請注意, <code>lha</code> 選項不必以負号 ( <code>-</code> ) 開頭,它們之間也不應該有空格。如需其它選項的清單,請輸入 <code>lha</code> 。

<code>.lzh</code> 和 <code>.lha</code> 檔案的解壓縮相當容易:隻需輸入 <code>lha e archive.lha</code> 。如果希望将檔案解壓縮到不是目前工作目錄的目錄中,輸入

<code>lha ew=path archive.lha</code> 。

也可以使用 <code>lha w=path -e archive.lzh</code> 将檔案的内容抽取到由 <code>path</code> 指定的目錄中。

<code>lha -ie archive.lzh</code> 将抽取檔案内容,但忽略存儲在其中的目錄路徑。

<code>lha</code> 的源碼和二進制版本可以從攜帶您所需 Linux 發行版的伺服器上免費獲得。如需到所有 Linux 發行版的連結的清單,請參閱 Linux 發行版頁面。

<a>.rar</a>

帶有 <code>.rar</code> 檔案擴充名的檔案是使用 RAR 和 WinRAR 歸檔和壓縮工具建立的,這些工具由 Eugene Roshal 開發。他先是發行了用于 MS-DOS 作業系統的這些工具。RAR 受到使用者的青睐是因為他們看重它的廣泛特性和高壓縮比率,以及友好的使用者界面,它與 Norton Commander 的界面(或 Midnight Commander 的界面)很相似。

因為 RAR For Linux 是該軟體的完整移植,是以您可以享受到原始 RAR 的所有好處(除 MC 樣式的界面以外)。但要記住,RAR for Linux 不是免費的;必須向總部在芬蘭的一家公司 T:mi Softronic 注冊它。

RAR for Linux 選項的清單給人的印象深刻,可以用作其它歸檔和壓縮工具開發人員的任務清單。要壓縮單個檔案,輸入 <code>rar a archive file</code> 。

<code>.rar</code> 擴充名将自動附加到檔案後(它的完整檔案名将是 <code>archive.rar</code> )。如果 <code>archive.rar</code> 已在目前工作目錄中存在,您嘗試添加到

<code>archive.rar</code> 的檔案就将直接添加到現有檔案中。隻有在 <code>archive.rar</code> 已包含帶有相同名稱的檔案時,舊檔案才會被新檔案替代。其它存儲在檔案内部的檔案将保持不變。請記住,該操作是

盲目的, 意味着 RAR 不檢查檔案的時間戳記;隻有在 <code>a</code> 選項後添加了 <code>-u</code> 選項時才執行這一檢查。請注意,

<code>a</code> 前面沒有減号 ( <code>-</code> )(例如, <code>rar a -u archive file</code> )。

多個檔案的歸檔非常簡單:要将目前工作目錄中的所有檔案和目錄歸檔,輸入 <code>rar a archive</code> 。要将特定目錄的内容歸檔,輸入 <code>rar a archive /path/to/directory</code> 。要将一組檔案歸檔,将它們括在引号中,象這樣: <code>rar a archive '*.cpp'</code> 。

檔案替換規則和 <code>-u</code> 選項對多個檔案和單個檔案所起的作用是一樣的。通配符使用的文法和您在常用的 shell 中所使用的文法相同,但必須記住要用引号括起它們。

以下是其它一些 RAR 選項:

<code>l</code> -- 列出檔案内容(例如, <code>rar l archive.rar</code> )

<code>v</code> -- 列出詳細格式的檔案内容(例如, <code>rar v archive.rar</code> )

<code>t</code> -- 測試檔案的完整性(例如, <code>rar t archive.rar</code> )

請注意,不是所有 RAR 選項都以減号 ( <code>-</code> ) 開頭;有關詳細資訊,請運作不帶任何選項和自變量的 RAR(例如,如果 RAR 目錄位于目前工作目錄中,運作

<code>rar/rar</code> )。有關詳細資訊,請參閱 RAR 手冊檔案(它是 <code>rar.txt</code> 檔案,同樣位于 RAR 目錄中)。

使用 RAR,您可以解壓縮整個檔案(使用 <code>rar e archive.rar</code> )、單個檔案(使用 <code>rar e archive.rar file</code> )或一組檔案(使用

<code>rar e archive.rar '*.cpp'</code> )。因為 RAR 可以對多個檔案使用,您也可以使用 <code>rar e '*.rar' '*.cpp'</code> 從多個檔案中抽取幾組檔案。

當 RAR 無法從一個檔案中抽取檔案時,使用修複選項進行挽救: <code>rar r archive.rar</code> 。

可以從官方 RAR 站點獲得自抽取檔案形式的 RAR for Linux。需要使用 <code>./rarlnx271.sfx</code> 指令來運作它(結尾的數字可能會因為發行了新版本的 RAR 而有所不同)。檔案将其内容解包到目前工作目錄中自動建立的

<code>rar</code> 子目錄中。您可以在其中找到 <code>rar</code> 二進制。可以将 <code>rar</code> 二進制移到 <code>/sbin</code> 或 <code>/usr/sbin</code> 目錄中,這樣所有使用者都可以使用它。除了 RAR 本身,您還可以獲得 UnRAR,它是一個小型實用程式,用于解壓縮

<code>.rar</code> 檔案,如果您希望允許其它使用者打開這樣的檔案但不建立它們,這個實用程式使用起來非常友善。

<a>.sit</a>

使用 Aladdin Systems 所開發的、用于 Mac OS 的 StuffIt 歸檔程式建立的檔案通常帶有 <code>.sit</code> 擴充名。這些檔案還可以有其它的如

<code>.hqx</code> 或 <code>.bin</code> 這樣的擴充名,表明它們曾使用 BinHex 或 MacBinary 實用程式處理過,來建立可以在計算機網絡上以電子方式傳送的單個文本檔案或二進制檔案。(Macintosh 檔案通常有兩部分,稱為

建立子程序, 必須在傳送之前将它們聯接在一起,以確定它們作為一個整體傳送。)可以使用組成 <code>macutil</code> 軟體包的一些實用程式來處理這樣編碼的檔案,它是免費的,可用于所有正式的 Linux 發行版)。

因為 Aladdin Systems 控制着 StuffIt 的源代碼,在收到 <code>.sit</code> 檔案時唯一的選擇是使用 Aladdin Expander for Linux,它目前還處于 Beta 階段(但已相當合用)。Aladdin Systems 已将這一 beta 版作為免費軟體向公衆提供:您不必為它付錢,但也無法獲得源代碼。目前沒有用于 Linux 的、建立

<code>.sit</code> 檔案的工具。

要解壓縮 <code>.sit</code> 檔案,輸入 <code>unstuff archive.sit</code> 。如果不使用 <code>-d</code> 選項,抽取出的檔案将放在目前工作目錄下,該選項可以讓您指定目标目錄:

<code>unstuff -d=/home/james/oldmacfiles archive.sit</code> 。如果解包的檔案是受密碼保護的,使用 <code>-p</code> 選項: <code>unstuff -p=secret archive.sit</code> 。文本檔案轉換 filer 選項用于處理行結束字元的轉換,将 LF 轉換成 CRLF,然後再轉換回來:

<code>unstuff-text=auto -eol=unix archive.sit</code> 。

可以在 Expander 的 man page 上找到有關它的詳細資訊(輸入 <code>man unstuff</code> 顯示它)。

Aladdin Expander for Linux 可以從 Aladdin Systems 網站上獲得。使用或下載下傳它不用付任何費用,但必須向 Aladdin Systems 注冊。有兩個版本的 Expander,一個用于基于 RPM 的系統(Red Hat、Mandrake、SuSE 等),另一個用于基于 .deb 的系統(Debian、Corel 等)。沒有特定于 Slackware 的軟體包,但要轉換 RPM 包以在 Slackware 上使用它應該并不困難。

<a>.zip</a>

<code>.zip</code> 擴充名表示檔案是使用許多 zip 歸檔程式和壓縮程式之一(但不是 gzip)建立的。因為這是一種非常流行的壓縮格式,算法的較長的描述也有很多,是以可以找到用于所有作業系統的有用的移植形式。這包括建立和擴充帶有

<code>.zip</code> 檔案擴充名的檔案的壓縮和解壓縮實用程式。在 Linux 上有兩種這樣的工具:免費的 Info-ZIP 和以赢利為目的的 PKZIP for Linux。如果您隻是偶爾需要建立或打開 zip 檔案,使用 Info-ZIP。如果希望使用在 MS-DOS 或其它系統上使用的相同工具,請選擇 PKZIP(PKZIP 可用于許多作業系統)。用于微軟 Windows 的 WinZIP 和用于 Mac OS 的 Stufflt 這兩種實用程式可以建立和打開互相之間相容的檔案。

Info-ZIP 在無法使用 gzip 或 tar 的情況下可以提供壓縮和解壓縮的一個不錯的選擇,這或許是在 Linux、微軟 Windows 和 Mac OS 使用者之間交換壓縮檔案的一種最好的形式。有許多不錯的 zip 程式(有開放源碼的,也有商業的)可用于這些作業系統,它們應該能確定檔案的順利交換(當然,隻要是在特定于某個特定工具的特殊功能關閉的情況下)。

要歸檔單個檔案,輸入 <code>zip archive file</code> 。要壓縮多個檔案,使用通配符(例如, <code>zip archive picture*jpg</code> )。還有可能将檔案定向輸出到 zip;輸入

<code>man zip</code> 獲得詳細資訊。要歸檔整個目錄,包括其中所有子目錄的内容,使用 <code>-r</code> 選項,然後在檔案名後輸入目錄名(例如,

<code>zip -r archive directory</code> )。還可以輸入 <code>zip -R archive .</code> 來将目前目前工作目錄進行歸檔。

<code>.zip</code> 擴充名自動添加到檔案名後。

當 <code>zip</code> 發現已有檔案的名稱和您嘗試建立的名稱相同時,它将您希望壓縮的檔案添加到現有檔案中,而不将已存在的檔案除去。這一規則有一個例外:如果存儲在現有檔案中的一個或多個檔案和您希望壓縮的一個或多個檔案具有相同的名稱,舊檔案将由新檔案替換。檔案替換規則可以使用

<code>-u</code> 選項來修改(有關詳細資訊,請參閱 <code>man zip</code> )。

以下是其它一些 zip 選項:

<code>-j</code> -- 隻存儲檔案名,不帶通路路徑(例如, <code>zip -j archive file</code> )

<code>-t</code> -- 測試檔案的完整性(例如, <code>zip -t archive.zip</code> )

<code>-x</code> -- 排除檔案(例如, <code>zip -r archive ./* -x *.tmp</code> )

請注意,不是所有 zip 選項都以負号 ( <code>-</code> ) 開頭。

PKZIP 選項類似于 Info-ZIP,但您應該閱讀 <code>pkzip.htm</code> 手冊(它是一個 HTML 文檔;使用 <code>lynx pkzip.htm</code> 或

<code>netscape pkzip.htm</code> 閱讀)來確定您的操作正确。

要解壓縮 zip 檔案,使用 <code>unzip archive.zip</code> 指令。如果想指定将檔案擴充到哪個目錄中,可以使用 <code>-d</code> 選項(例如,

<code>unzip file.zip -d /home/james/zips</code> 将 <code>file.zip</code> 的内容抽取到 <code>/home/james/zips</code> 目錄中)。

當 zip 無法抽取檔案中的檔案時,使用 <code>-F</code> 或 <code>-FF</code> 修複 zip 選項進行挽救(例如 <code>zip -F archive.zip</code> 或 <code>zip -FF archive.zip</code> )。請記住在嘗試拯救已破壞的檔案之前進行備份。

可以從官方 Info-ZIP 站點獲得二進制或源碼形式的 Info-ZIP for Linux。

可以從 PKZIP 官方站點下載下傳 PKZIP for Linux。它作為自抽取檔案分發。要為它解包,輸入 <code>./pklin251.exe</code> ,檔案的内容将解包到目前工作目錄中。您需要将

<code>pkzip25</code> 二進制檔案複制到 <code>/sbin</code> 或 <code>/usr/sbin</code> 目錄中,這樣系統上的所有使用者都可以使用它。(但您必須購買相應的許可證,因為它是商業軟體包。)

<a>.zoo</a>

<code>.zoo</code> 擴充名在網際網路上不經常出現,但請放心,可以使用 Linux 的 <code>zoo</code> 實用程式打開和建立這樣的檔案。不過要記住,zoo 對于現在使用者的期望來說已有些陳舊和簡單。

要歸檔單個檔案,輸入 <code>zoo a archive file</code> 。同樣,要壓縮多個檔案,可以使用通配符 -- 例如, <code>zoo a archive picture*jpg</code> 。

下面是其它一些 zoo 選項以及它們所添加的功能:

<code>l</code> -- 列出檔案内容(例如, <code>zoo l archive.zoo</code> )

<code>t</code> -- 測試檔案的完整性(例如, <code>zoo -t archive.zoo</code> )

請注意,不是所有 zoo 選項都以負号 ( <code>-</code> ) 開頭

要解壓縮 <code>.zoo</code> 檔案,輸入 <code>zoo e archive.zoo</code> 。

可以獲得用于所有 Linux 發行版的二進制形式的 zoo for Linux。

繼續閱讀