标题：deb
Linux软件包
DEB是Debian软件包格式的文件扩展名，跟Debian的命名一样，DEB也是因Debra Murdock而得名，她是Debian创始人Ian Murdock的太太。 
Debian包是Unixar的标准归档，将包文件信息以及包内容，经过gzip和tar打包而成。 
处理这些包的经典程序是dpkg，经常是通过Debian的apt-get来运作。 
通过Alien工具，可以将deb包转换成rpm、tar.gz格式。
deb包在Linux操作系统中类似于windows中的软件包（exe)，几乎不需要什么复杂的编译即可通过鼠标点击安装使用。此外,deb广泛应用于越狱后iOS软件及MeeGo（含Maemo软件）中。
苹果iPhone应用格式
deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式，配合 APT 软件管理系统，成为了当前在 Linux 下非常流行的一种安装包。进入 2.x 时代之后有 Cydia 作者 Jay Freeman（saurik） 移植到 iPhone 平台上，一起的还有 APT 软件管理系统。安装包格式deb 是 Unix 系统(其实主要是 Linux )下的安装包，基于 tar 包，因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。
由于 Unix 类系统对权限、所有者、组的严格要求，而 deb 格式安装包又经常会涉及到系统比较底层的操作，所以权限等的设置尤其重要。
deb 包本身有三部分组成：数据包，包含实际安装的程序数据，文件名为 data.tar.XXX；安装信息及控制脚本包，包含 deb 的安装说明，标识，脚本等，文件名为 control.tar.gz；最后一个是 deb 文件的一些二进制数据，包括文件头等信息，一般看不到，在某些软件中打开可以看到。
deb 本身可以使用不同的压缩方式。tar 格式并不是一种压缩格式，而是直接把分散的文件和目录集合在一起，并记录其权限等数据信息。之前提到过的 data.tar.XXX，这里 XXX 就是经过压缩后的后缀名。deb 默认使用的压缩格式为 gzip 格式，所以最常见的就是 data.tar.gz。常有的压缩格式还有 bzip2 和 lzma，其中 lzma 压缩率最高，但压缩需要的 CPU 资源和时间都比较长。
data.tar.gz包含的是实际安装的程序数据，而在安装过程中，该包里的数据会被直接解压到根目录(即 / )，因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。
而 control.tar.gz 则包含了一个 deb 安装的时候所需要的控制信息。一般有 5 个文件：control，用了记录软件标识，版本号，平台，依赖信息等数据；preinst，在解包data.tar.gz 前运行的脚本；postinst，在解包数据后运行的脚本；prerm，卸载时，在删除文件之前运行的脚本；postrm，在删除文件之后运行的脚本；在 Cydia 系统中，Cydia 的作者 Saurik 另外添加了一个脚本，extrainst_，作用与 postinst 类似。安装包特点丰富的资源：Cydia 上本身就不少，更何况任何格式的安装包都可以转换为 deb。
相对方便的在线购买模式：Cydia Store，不过尽管没有 App Store 的5台设备的限制，但对国内用户来说，付款方式比较困难。
破解难度较大，没有使用 App Store 的验证方式，所以必须将验证和防破解措施加入程序里面，这样就比较难破解，对软件开发者来说是个好事。
完善的 Unix 文件系统支持：无需以命令设置文件的权限、所有者和用户组（当然也可以以脚本来设置）
完善的脚本支持：5个脚本依照安装和卸载的先后顺序执行，可以提供更多选择。比如备份还原操作，可以在 preinst 中备份文件，而在 postrm 中还原文件
严格的依赖关系：deb 遵循严格的依赖关系（于 Depends 和 Pre-Depends 指定），可以确保软件运行所必需的组件。在线安装的时候会自动安装所依赖的软件包。卸载时也很重要，比如软件包 A 依赖于 B，当卸载 B 的时候会提示 A 依赖于 B，卸载掉 B 的话会导致 A 不能用，这样可以确保系统的完整性和稳定性。
Conflicts、Replaces、Provides 等键值的存在可以实现冲突提示或替换其它软件包。
完全权限：由于 deb 必须以最高权限 root 的身份运行，deb可以对系统任何位置进行操作，换句话说，deb 拥有对整个系统的完全控制，因此 deb 安装包软件可以实现很多 ipa 不能实现的功能。
相对简单的获取方式（在线或离线）和安装方式，也不用担心在不同机器上同步会删掉程序的问题。
安装相对简单：其实无论是哪种安装包，安装方法都不算很复杂，只不过 deb 稍微复杂一些。安装方法Cydia 或同类 APT 管理软件在线安装，这个是最佳的安装方式，因为通常无需考虑依赖关系，但缺点是对网络的要求比较高；
命令行中以 dpkg -i XXX.deb 的形式安装，好处是可以以通配符一次性安装多个 deb，而且也可以直接看到脚本的运行状况和安装成功/失败的提示信息，缺点是需要命令行软件的支持，如 Putty/WinSCP的控制台/iSSH/MobileTerminal，很多人也不熟悉命令行下的操作。另外，安装完后会不显示图标；
放置于 AutoInstall 目录重启安装。该方法实际是 Cydia 提供的一个启动脚本，在每次系统启动时以 dpkg 命令安装 AutoInstall 目录下的 deb，好处是不需要命令行操作，缺点是必须要重启，有些甚至要重启两次，也会出现不显示图标的情况；
利用 iFile 安装，好处是图形化操作，桌面会显示图标，缺点是不能一次安装多个 deb；
用 Cyder II 等软件来安装，其原理是模拟一个 APT 软件管理器来下载相应的 deb 文件并传到设备，然后以前面几种方式来安装。
总体来说，deb 的安装都是依赖于 dpkg -i 命令来安装，只不过有些是在命令行下输入命令，有些是提供了图形界面。但除了 Cydia 安装一种方式之外，其余几种安装方式都存在一些共有的问题：
不会自行搜索依赖关系，必须手动提供所依赖的 deb；
Cydia 会读取安装脚本里的一些特殊语句，比如仅在全新安装时执行而不在升级时执行，安装完成后重启 SpringBoard 或设备等等。卸载方法Cydia 里卸载，优点是卸载过程和提示信息很详细，全图形界面操作，同时也提供了重新安装的选项；
以 dpkg -r Package_ID 命令或 dpkg -P Package_ID 命令来卸载；
Cydelete 来卸载，优点是可以直接在桌面上卸载有图标的软件，但对那些没有图标的无能为力。
安装过程　读取数据库并锁定，避免同时有两个安装程序在运行
读取 control 中的 Package（软件包标识）和版本信息，并搜索数据库，若已存在，则卸载之后再安装；
检查 Depends, Pre-Depends, Conflicts 和 Replaces，如果检测到已存在 Conflicts 中存在的软件，则报错并终止安装。如未找到 Pre-Depends 指定的软件，则报错并终止安装。如找到 Replaces 中指定的软件，则卸载之；
将数据写入 /var/lib/dpkg/status 文件中；
执行 preinst 脚本（如果有）；
解包 data.tar.gz，将文件放置于相应位置，并将文件列表写入 /var/lib/dpkg/info/XXX.list；
运行 postinst 和 extrainst_ 脚本（如果有）；
如果之前的安装都没有出错，即安装成功，那么会在 status 文件中写入 Status: install ok installed 信息，否则会写入其它状态数据，比如 Unpacked （未解包数据）、Failed-config（脚本未能成功执行）、Half-installed（安装失败等）；
重新加载数据库并解除锁定。
卸载过程　读取数据库并锁定；
根据软件标识搜寻数据库；
检查是否有软件依赖于待卸载的软件，如果有则提示，并中断卸载；
执行 prerm 脚本（如果有）；
读取 /var/lib/dpkg/info/XXX.list 文件，并删除 list 文件中记录的全部文件和非空文件夹；
运行 postrm 脚本；
如果卸载命令是 dpkg -r，则保留 status 中的记录并改为 Status: Not installed；
如果卸载命令是 dpkg -P，则删除全部数据；
如果卸载过程没有错误的话，重新读取数据库并解除锁定。
由于 deb 安装的软件可能会在运行时在 /var/mobile/Documents 下放置存档文件，或在 /var/mobile/Library/Preferences 下放置设置文件，而这些文件并没有记录在 list 文件里，所以卸载的时候不会被删除。
MeeGo软件包格式
MeeGo系统基于Linux架构，同样采用deb格式软件包。
N9识别以QT开发工具主导的deb文件；meego上网本识别以linux caneflip的rpm和qt的deb文件，但由于界面不同，N9的程序不能很好地适应在桌面系统上。