The Debian package format is designed so that its content may be extracted on any Unix system that has the classic commands ar
, tar
, and gzip
(sometimes xz
or bzip2
). This seemingly trivial property is important for portability and disaster recovery.
Imagine, for example, that you mistakenly deleted the dpkg
program, and that you could thus no longer install Debian packages. dpkg
being a Debian package itself, it would seem your system would be done for... Fortunately, you know the format of a package and can therefore download the .deb
file of the dpkg package and install it manually (see the “TOOLS” sidebar). If by some misfortune one or more of the programs ar
, tar
or gzip
/xz
/bzip2
have disappeared, you will only need to copy the missing program from another system (since each of these operates in a completely autonomous manner, without dependencies, a simple copy will suffice).
来看看 .deb
文件的内容:
$
ar t dpkg_1.16.10_amd64.deb
debian-binary
control.tar.gz
data.tar.gz
$
ar x dpkg_1.16.10_i386.deb
$
ls
control.tar.gz data.tar.gz debian-binary dpkg_1.16.10_i386.deb
$
tar tzf data.tar.gz | head -n 15
./
./var/
./var/lib/
./var/lib/dpkg/
./var/lib/dpkg/updates/
./var/lib/dpkg/alternatives/
./var/lib/dpkg/info/
./var/lib/dpkg/parts/
./usr/
./usr/share/
./usr/share/locale/
./usr/share/locale/sv/
./usr/share/locale/sv/LC_MESSAGES/
./usr/share/locale/sv/LC_MESSAGES/dpkg.mo
./usr/share/locale/it/
$
tar tzf control.tar.gz
./
./conffiles
./preinst
./md5sums
./control
./postrm
./prerm
./postinst
$
cat debian-binary
2.0
如你所见, Debian 包的 ar
存档格式由三个文件组成:
debian-binary
. This is a text file which simply indicates the version of the .deb
file used (in 2013: version 2.0).
control.tar.gz
. This archive file contains all of the available meta-information, like the name and version of the package. Some of this meta-information allows package management tools to determine if it is possible to install or uninstall it, for example according to the list of packages already on the machine.
data.tar.gz
,这个存档文件包含所有要被从软件包里解压缩出来的文件;这是可执行文件、文档等存储的地方。有些软件包可能会使用其它压缩格式,那样的话文件名会有所不同(bzip2 是 data.tar.bz2
,XZ 是 data.tar.xz
for XZ,LZMA 是 data.tar.lzma
)。