5.1. 二进制包的结构
Debian 软件包格式的设计满足这样的目的,在任何有如下命令:ar
、tar
和 gzip
(有些系统会有 xz
或者 bzip2
)的 Unix 系统上均能顺利解压。这是个看起来非常简单,却又对可移植性和灾难恢复非常重要的特性。
想象一下,比如您误删了dpkg
程序,您因此不能再安装 Debian 软件包了。 dpkg
本身作为一个 Debian 软件包,它看起来像是系统应该做的… 幸运的是,您知晓软件包的格式,并下载 dpkg 包 .deb
d文件,并手动安装(参见侧边栏工具 dpkg
、APT
和 ar
)。如在某些不幸的情况下,一个或多个程序 ar
、 tar
或者 gzip
/xz
/bzip2
失踪了,您只能从其他系统复制丢失的程序(因为它们中的任一个都以全自动方式工作,没有依赖问题,简单复制即可)。如果您的系统出现了更加不幸的问题,甚至以上手段无法奏效(可能是深处的系统库文件丢失?),您应当试一下 busybox
的静态版本 (在 busybox-static 包中提供),它更加独立化,并能提供如下子命令:busybox ar
、busybox tar
、busybox gunzip
。
工具 dpkg
、APT
和 ar
dpkg
是处理 .deb
文件的命令,尤其是解压、分析和解包它们。
APT
是一组允许对系统进行高级的修改的程序:安装或者删除一个软件包(并且保持依赖关系满足),更新系统,列出可用的软件包等。
对于 ar
程序,ar t *archive*
会显示包含在这样一个归档中的文件列表;ar x *archive*
将文件从归档中提取至当前工作目录, ar d *archive* *file*
从归档中删除一个文件,等。它的手册页 (ar(1)) 记录了它的其他全部特性。ar
是一个非常初步的工具,Unix 管理员仅在极少数情况下使用它,而是通常使用tar
,一个更先进的归档和文件管理程序。这是在误删情况下容易恢复 dpkg
的原因。您仅需要下载 Debian 包,并在系统 root (/
)下从 data.tar.gz
归档中提取内容:
#
基础知识 Man 手册注记
初学者可能会在看到“ar(1)”这样的文字注记时感到疑惑。这通常是个简写,它表示指向 man 手册第一类中标题是 ar
的页面。
有时这种注记也用来避免歧义,比如要区分清楚是 printf
命令,可以用 printf(1) 来指明,如果是 C 语言里的 printf
函数,就可以用 printf(3) 来引用。
第 7 章 问题的解决与相关信息的检索 更详细地讨论手册页 (参见 第 7.1.1 节 “手册页面”)。
来看看 .deb
文件的内容:
$
如你所见, Debian 包的 ar
存档格式由三个文件组成:
debian-binary
。这是一个文本文件,简单写明了该.deb
文件使用的版本(在 2015 年是 2.0 版本)。control.tar.gz
。这个归档文件包含所有可用的元信息,如软件包的名称和版本。有些包的元信息允许软件包管理工具来决定能否安装或卸载它。例如,软件包管理工具会根据机器上已有的软件包列表和软件包元信息来进行相关安装或卸载的操作。data.tar.gz
。这个归档文件包含软件包中所有要解压的文件;这是可执行文件、文档等的存储位置。有些软件包可能会使用其它压缩格式,那样的话文件名会有所不同(bzip2 格式为data.tar.bz2
,XZ 格式是data.tar.xz
)。