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
。
来看看 .deb
文件的内容:
$
ar t dpkg_1.17.23_amd64.deb
debian-binary
control.tar.gz
data.tar.gz
$
ar x dpkg_1.17.23_amd64.deb
$
ls
control.tar.gz data.tar.gz debian-binary dpkg_1.17.23_amd64.deb
$
tar tzf data.tar.gz | head -n 15
./
./var/
./var/lib/
./var/lib/dpkg/
./var/lib/dpkg/parts/
./var/lib/dpkg/info/
./var/lib/dpkg/alternatives/
./var/lib/dpkg/updates/
./etc/
./etc/logrotate.d/
./etc/logrotate.d/dpkg
./etc/dpkg/
./etc/dpkg/dpkg.cfg.d/
./etc/dpkg/dpkg.cfg
./etc/alternatives/
$
tar tzf control.tar.gz
./
./conffiles
./postinst
./md5sums
./prerm
./preinst
./control
./postrm
$
cat debian-binary
2.0
如你所见, Debian 包的 ar
存档格式由三个文件组成:
debian-binary
。这是一个文本文件,简单写明了该 .deb
文件使用的版本(在 2015 年是 2.0 版本)。
control.tar.gz
。这个归档文件包含所有可用的元信息,如软件包的名称和版本。有些包的元信息允许软件包管理工具来决定能否安装或卸载它。例如,软件包管理工具会根据机器上已有的软件包列表和软件包元信息来进行相关安装或卸载的操作。
data.tar.gz
。这个归档文件包含软件包中所有要解压的文件;这是可执行文件、文档等的存储位置。有些软件包可能会使用其它压缩格式,那样的话文件名会有所不同(bzip2 格式为 data.tar.bz2
,XZ 格式是 data.tar.xz
)。