Debian 软件包格式被这样设计,在具有经典命令如 ar
、tar
和 xz
或者有时候是 gzip
或 bzip2
的 Unix 系统上,它的内容都可以被解压。这是个看起来琐碎的属性对移植和灾难恢复是非常重要的。
想象一下,例如您误删了
dpkg
程序,因此无法再安装 Debian 软件包了。
dpkg
本身作为一个 Debian 软件包,看起来系统似乎完蛋了... 幸运的是,您知道软件包的格式,这样可以
下载 dpkg 软件包的
.deb
文件,并手动安装(请参见侧边栏
工具 dpkg
、APT
和 ar
)。某些不幸的情况下,一个或多个
ar
、
tar
或者
gzip
/
xz
/
bzip2
程序丢失了,您仅需从其它系统上直接复制缺失的程序(因为它们中的任一个都独立工作而没有依赖的问题,因此简单复制足矣)。如果您的系统出现了更加反常的问题,甚至以上手段无法奏效(可能是最深处的系统库文件丢失?),您应当尝试
busybox
的静态版本 (在
busybox-static 软件包中提供),它更加独立化,并能提供如下子命令:
busybox ar
、
busybox tar
和
busybox xz
。
来看看一个 .deb
文件的内容:
$
ar t dpkg_1.20.9_amd64.deb
debian-binary
control.tar.gz
data.tar.xz
$
ar x dpkg_1.20.9_amd64.deb
$
ls
control.tar.gz data.tar.xz debian-binary dpkg_1.20.9_amd64.deb
$
tar tJf data.tar.xz | head -n 16
./
./etc/
./etc/alternatives/
./etc/alternatives/README
./etc/cron.daily/
./etc/cron.daily/dpkg
./etc/dpkg/
./etc/dpkg/dpkg.cfg
./etc/dpkg/dpkg.cfg.d/
./etc/logrotate.d/
./etc/logrotate.d/alternatives
./etc/logrotate.d/dpkg
./sbin/
./sbin/start-stop-daemon
./usr/
./usr/bin/
$
tar tJf control.tar.xz
./
./conffiles
./control
./md5sums
./postrm
$
cat debian-binary
2.0
如你所见, Debian 包的 ar
存档格式由三个文件组成:
Debian 二进制文件
This is a text file which simply indicates the version of the .deb
file package format version. In Debian Bullseye it is still version 2.0.
control.tar.xz
该档案文件包含所有可用的元信息,如软件包的名称和版本,以及在安装/卸载之前、之中或之后使用的脚本。一些元信息允许软件包管理工具根据例如机器上已有的软件包列表,来决定是否能够安装或卸载它,或者决定一起发布的文件是否已经在本地被修改。
data.tar.xz
, data.tar.bz2
, data.tar.gz
这个归档文件包含软件包中所有要解压的文件,包括可执行文件、库和文档等。软件包可能使用不同的压缩格式,因此文件后缀会有所不同如xz
、bzip2
或 gzip
。