为什么要有已安装清单
盘点已安装的软件包是资产管理与合规检查的基础数据:RHEL 系用 rpm -qa 或 dnf list installed,Debian 系用 dpkg-query -W 配合输出格式。把结果排序导出成基线文件,日后与现状比对就能看出机器漂移了哪些包。升级、迁移、审计与安全事件复盘时,这份清单是最直接的依据。
基本信息
| 适用平台 | RHEL/CentOS/Rocky 与 Debian/Ubuntu |
|---|---|
| 常用命令 | rpm -qa、dnf list installed、dpkg-query -W、apt list --installed |
| 产出 | 排序后的清单文件,建议带主机名与日期 |
| 比对方式 | sort 配合 comm 或 diff |
| 权限要求 | 普通用户即可查询 |
典型使用场景
- 建立装机基线与现状比对,发现意外安装的软件
- 迁移前清点目标机需要哪些包
- 安全事件复盘时确认是否装了受影响版本的组件
- 合规审计需要提交已安装软件清单
- 版本升级前评估影响范围
导出与比对
导出与比对
rpm -qa | sort > /tmp/pkgs-$(hostname)-$(date +%F).txt # RHEL 系清单
dnf list installed | tail -n +2 | wc -l # 数量概览
dpkg-query -W -f='${Package} ${Version}\n' | sort > /tmp/pkg-deb.txt # Debian 系带版本
apt list --installed 2>/dev/null | tail -n +2 | wc -l # Debian 系数量概览
comm -3 <(sort base.txt) <(rpm -qa | sort) | head -n 40 # 与基线比对差异
dnf repoquery --installed --qf '%{name} %{version}' | head -n 5 # 需要更细字段时两系命令对照
| 目的 | RHEL 系 | Debian 系 |
|---|---|---|
| 全部包名 | rpm -qa / dnf list installed | dpkg-query -W / apt list --installed |
| 带版本导出 | dnf repoquery 指定 qf 字段 | dpkg-query -W -f 指定格式 |
| 查某个包是否安装 | rpm -q 包名 | dpkg -l 包名 |
| 与基线比对 | sort 后 comm 或 diff | 同样适用 |
| 按大小排序定位大包 | rpm 查询配合排序 | dpkg-query 指定格式后排序 |
长期漂移的机器直接比对基线会全红:先把现状导出确认为新基线,再逐项收敛,否则比对结果没有指导意义。
rpm -qa 只覆盖 RPM 世界:源码安装、snap、语言级包管理器(pip、npm)以及容器镜像内的软件都不在清单里,安全审计时这些要分别清点。
导出字段建议固定为包名加版本:只存包名会在安全比对时丢掉关键信息,例如同一个包从受影响版本升级到修复版本,清单上看起来毫无变化。
清单本身可能带敏感信息(自研包名会暴露内部架构):对外提交审计材料前先脱敏,去掉自研包前缀或与安全团队确认提交范围。