软件包管理
决定Linux发布版质量最重要的因素就是软件包系统(packaging systems)和社区支持的活跃度。软件包管理在在系统上安装和维护软件的一种方法。现在大多数人都可以通过从他们的Linux发布商那儿获取并安装软件包来满足他们的软件需求。这和Linux早期必须下载并编译源代码(source code)安装软件形成鲜明对比。
不同的发布版使用不同的软件包系统,通常,为一个版本制作的软件包不会与其他版本兼容。大多数发布版主要分成两个阵营:Debian的.deb阵营和Red Hat的.rpm阵营。虽然有一些如Gentoo、Slackware和Foresight的例外,但是大多数版本都基于这两种基本系统的一种。
| 软件包系统 | 发布版(部分列表) |
| Debian风格 (.deb) | Debian, Ubuntu, Xandros, Linspire |
| Red Hat风格 (.rpm) | Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS |
软件包系统
软件包管理主要包含三个方面:包格式规范(the package format specification)、包处理工具(the package handler)和包管理工具(the package manager)。
软件包管理的基础是包文件(package files)的格式,包文件是软件包系统的基本单元。软件包文件一般分为二进制包(binary packages)和源代码包(source packages)。一个源代码包可以生成一个或者多个二进制包,但多数情况下只能生成一个二进制包。包文件是组成软件包的文件(一些程序和支持程序的数据文件)的压缩集合。DEB和RPM分别是两大阵营的包格式。deb文件有三部分组成:debian-binary、control.tar.gz和data.tar.gz。debian-binary指明使用的deb格式版本(由于格式会随着时间的改进),control.tar.gz打包了包管理工具所需要的控制信息,data.tar.gz包含软件包在根文件系统下的安装位置。rpm文件使用网络字节序在磁盘上存储,在逻辑上可以被分成四个独立的分区:lead、signature、header和archive。
包处理工具是低层次的工具,主要负责软件安装、删除、查询状态(软件是否安装、删除、清除、保持等)和显示包文件信息等任务。在linux包管理上,删除软件(remove)是指将软件安装的文件删除但不删除软件的配置文件,清除软件(purge)是指将安装的文件和配置文件都清除掉。debian阵营的包处理命令是dpkg (dselect是dpkg的前端工具,现在已不建议使用),Red Hat阵营的包处理命令是rpm。下表是两大阵营的包处理命令的对比列表:
| 功能描述 | dpkg | rpm |
| 显示包文件的信息 | dpkg --info | rpm -qpi |
| 显示包文件的内容 | dpkg --contents | rpm -qpl |
| 安装软件 | dpkg --install | rpm -i |
| 忽略所需要满足的依赖关系,强制安装软件 | dpkg --install --force-depends | rpm -i --nodeps |
| 强制覆盖属于其他包的文件,安装软件 | dpkg --install --force-overwrite | rpm -i --replacefiles |
| 删除软件 | dpkg --remove | n/a |
| 清除软件 | dpkg --purge | rpm -E |
| 显示包的信息 | dpkg --list | rpm -qa |
| 显示包的安装位置 | dpkg --listfiles | rpm -ql |
| 查询包状态 | dpkg --status | rpm -pi |
| 查询安装的文件属于哪个包 | dpkg --search | rpm -pf |
包管理工具是高层次的工具,主要负责元数据查找和依赖关系解析。debian阵营的包管理命令是apt-get和aptitude (aptitude是apt-get的前端工具并记录了为了满足依赖关系而自动安装的包的状态)。Red Hat阵营的包管理命令是yum。下表是两大阵营的包管理命令的对比列表:
| 功能描述 | apt-get | yum |
| 查找软件包 | apt-cache search | yum search |
| 显示包信息 | apt-cache show | yum info |
| 显示该包的依赖信息 | apt-cache depends | n/a |
| 显示依赖该包的信息 | apt-cache rdepends | n/a |
| 显示该包的依赖与被依赖信息 | apt-cache showpkg | n/a |
| 安装软件包 | apt-get install | yum install |
| 只下载软件包(不安装) | apt-get install --download-only (保存在/var/cache/apt/archives/) | yum install --download-only (默认在/var/cache/yum) |
| 删除软件(不删除配置文件) | apt-get remove | n/a |
| 清除软件 | apt-get remove --purge | yum remove |
| 更新软件源中的软件包列表数据库 | apt-get update | n/a |
| 软件更新 | apt-get upgrade | yum update |
| 系统版本升级 | apt-get dist-upgrade | yum --obsoletes update |
| 下载软件包的源代码 | apt-get source (保存到当前工作目录) | n/a |
| 将源代码编译成二进制包时安装其依赖的文件 (否则无法编译) | apt-get build-dep | n/a |
| 查找提供某个位置文件(可以是没有安装到本地系统上)的软件包 | apt-file search | yum provides |
对于debian阵营来说,dpkg需要维持debian软件包数据库的一致性,任何威胁数据库的一致性状态的举动都会被禁止(除非明确指明);apt-get则恰恰相反,会尽最大可能去满足用户的请求。

浙公网安备 33010602011771号