文件的压缩和解压缩是计算历史上最有用的创造之一,但缺乏可移植性和开放工具是阻碍它发挥其应有作用的最主要的一个障碍。只要我们是与其他使用类似 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。