rpm 与 dpkg
100%

软件包 · 第 5 课

rpm 与 dpkg

了解 `dpkg` 和 `rpm` 如何检查并修改各自的原生软件包数据库和本地归档。

dpkg 是 Debian 家族系统上的低层软件包工具,rpm 在 RPM 家族系统上承担类似职责。它们会解包原生归档、运行软件包生命周期操作,并更新已安装软件包数据库。APT 和 DNF 等能够访问仓库的工具建立在这些低层机制之上。

安装前检查归档

软件包归档并不等同于单个可执行文件。它可以包含大量载荷文件、元数据、配置处理逻辑和以特权运行的生命周期脚本。安装前,应检查其来源、签名或经过身份验证的下载路径、元数据和内容。

Debian: $ dpkg-deb --info ./some-package.deb
Debian: $ dpkg-deb --contents ./some-package.deb
RPM:    $ rpm -qip ./some-package.rpm
RPM:    $ rpm -qlp ./some-package.rpm

所示 RPM 查询形式中的 p 表示查询软件包文件,而不是已安装数据库。查询输出有助于审查软件包,但不能证明其中的脚本或程序安全。

哪个低层工具管理 Debian .deb 软件包及其已安装数据库?

安装本地归档

直接进行低层安装时使用:

Debian: $ sudo dpkg -i ./some-package.deb
RPM:    $ sudo rpm -U ./some-package.rpm

dpkg -i 可以解包并配置指定归档,但不会获取缺失的仓库依赖项。原始 rpm 同样不提供常规仓库求解器流程。对于本地归档,通常优先使用高层命令,因为它可以从已配置来源解析依赖项:

Debian: $ sudo apt install ./some-package.deb
RPM:    $ sudo dnf install ./some-package.rpm

确认前应审查事务。前导 ./ 可以让 APT 区分本地 Debian 归档路径与仓库软件包名称。

所示哪个命令可以安装本地 .deb,并解析仓库中可用的依赖项?

移除已安装软件包

移除操作的目标是已安装软件包名称,而不是先前使用的归档文件名:

Debian: $ sudo dpkg --remove package-name
RPM:    $ sudo rpm --erase package-name

在 Debian 上,--remove 通常保留归类为 conffile 的配置文件;--purge 还请求移除这些文件,但仍受软件包脚本和非受管数据影响。两个命令都不保证删除用户创建的数据。高层 apt removednf remove 通常更合适,因为它们可以评估相关软件包并呈现完整事务。

dpkg --remove 期望用什么作为已安装软件包的操作数?

查询已安装状态

使用以下命令列出已安装或已知的软件包记录:

Debian: $ dpkg-query -l
RPM:    $ rpm -qa

进行定向检查时,应优先指定具体软件包名称;脚本要求可靠性时,应使用机器可读格式。软件包数据库描述受管理状态,但本地管理员或应用程序之后仍可修改文件,因此需要将已安装文件与记录元数据比较时,应使用验证功能。

哪个命令查询 RPM 数据库中记录的所有已安装软件包?

课程已完成

你已完成 rpm 与 dpkg

现在,你可以区分低层软件包操作与仓库事务。

  • 安装前检查本地归档的元数据和内容。

  • 使用 dpkg 执行 .deb 低层操作,使用 rpm 执行 .rpm 低层操作。

  • 需要解析依赖项时优先使用 APT 或 DNF。

  • 按已安装软件包名称移除,并单独验证受管理状态。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 软件包