rpm和dpkg分别是红帽系与Debian系Linux发行版的底层包管理工具,不自动解决依赖,用于离线安装、版本锁定、故障排查及审计等场景。

Linux软件安装管理中,rpm和dpkg是两类最基础的包管理工具,分别对应红帽系(RHEL、CentOS、Fedora)与 Debian系(Ubuntu、Debian)发行版。它们不自动解决依赖,但直接操作包文件,是理解更高层工具(如yum、dnf、apt)的前提。
rpm:红帽系底层包管理器
rpm命令用于处理以.rpm为后缀的预编译软件包,核心特点是“只管本包,不管依赖”。安装时若缺失依赖,会明确报错,但不会自动下载或安装缺失项。
- 查是否安装某软件:
rpm -q nginx(已装返回版本号,未装提示“package nginx is not installed”) - 查看所有已装rpm包:
rpm -qa,可配合grep筛选,如rpm -qa | grep python3 - 安装本地.rpm包:
sudo rpm -ivh package.rpm(-i安装,-v显示详情,-h显示进度条) - 强制忽略依赖安装(慎用):
sudo rpm -ivh package.rpm --nodeps - 查询某文件属于哪个包:
rpm -qf /usr/bin/vim - 列出某包安装的所有文件:
rpm -ql nginx
dpkg:Debian系底层包管理器
dpkg处理.deb格式包,逻辑与rpm类似:专注单包操作,依赖需由上层工具(如apt)补全。普通用户可用部分查询命令,安装/卸载必须root权限。
- 查是否安装某软件:
dpkg -l | grep '^ii' | grep nginx(状态ii表示已安装且配置完成) - 更简洁判断方式:
dpkg-query -W -f='${Status}' nginx 2>/dev/null | grep -q "install ok installed"(适合脚本中用退出码判断) - 安装本地.deb包:
sudo dpkg -i package.deb - 修复因依赖缺失导致的半安装状态:
sudo apt-get install -f(这是dpkg常用搭档) - 列出某包安装的全部文件:
dpkg -L nginx - 查看.deb包内元数据(不安装即可读):
dpkg --info package.deb
rpm与dpkg的关键区别
二者设计目标一致,但实现细节不同:
- 包结构:.rpm是cpio+gzip归档,含签名和数据库注册;.deb是ar归档,内含control(控制信息)、data(实际文件)、debian-binary三个组件
- 依赖处理:rpm在安装前校验依赖并报错;dpkg安装时仅检查冲突,依赖缺失通常表现为“unpacked”而非“installed”状态
-
数据库位置:rpm将包信息存于
/var/lib/rpm/;dpkg存于/var/lib/dpkg/status - 跨发行版兼容性:同架构下,.rpm一般只能在同源发行版(如RHEL/CentOS)运行;.deb在Debian/Ubuntu间迁移较宽松,但内核模块等仍受限
何时该用rpm或dpkg,而不是yum/apt
高级工具虽方便,但底层命令不可替代:
- 离线环境部署:没有网络时,直接用rpm/dpkg安装本地包
- 版本锁定:绕过仓库默认策略,精确安装某个旧版或测试版rpm/deb
- 故障排查:当yum/apt异常时,用rpm -Va校验系统完整性,或用dpkg --verify检查deb包状态
- 定制化安装:跳过某些安装脚本(如--noscripts),或仅解压不注册(rpm -Uvh --prefix /opt)
- 审计与取证:通过rpm -ql或dpkg -L快速定位敏感文件路径










