最稳判断法是依次执行 dpkg --version、rpm --version、pacman --version 等,首个返回版本号者即当前实际使用的底层包管理器;各命令覆盖范围不同:dpkg -l 列所有状态包(含残留配置),apt list --installed 仅列 APT 认为有效安装的包,rpm -qa 直读数据库,比 dnf list installed 更可靠。

直接告诉你结论:没有一个命令能通用所有 Linux 发行版。你得先确认系统用的是哪个包管理器,再选对应命令——硬套 apt list --installed 到 CentOS 上,或在 Ubuntu 里死磕 rpm -qa,结果就是查不到、报错、或列出一堆无关包。
怎么快速判断当前系统用的是 dpkg、rpm 还是 pacman
别看 /etc/os-release,也别信 which apt ——有些系统预装多个工具但只启用一个。最稳的办法是挨个试版本命令,看哪个有输出:
-
dpkg --version有输出 → Debian/Ubuntu 系(用apt或dpkg) -
rpm --version有输出 → RHEL/CentOS/Fedora/openSUSE(用rpm或dnf) -
pacman --version有输出 → Arch/Manjaro(用pacman -Q) -
zypper --version有输出 → openSUSE(用zypper se --installed-only) -
apk --version有输出 → Alpine(用apk info)
只要有一个返回版本号,就说明它是当前实际在用的底层包管理器。
dpkg -l 和 apt list --installed 有什么区别
两者都适用于 Debian/Ubuntu,但行为和覆盖范围不同:
-
dpkg -l直读本地数据库,不依赖网络或缓存,能列出所有状态的包:-
ii:已安装且配置完成(你真正要找的) -
rc:已卸载但配置文件还在(apt remove后残留,apt list --installed不会显示它)
-
-
apt list --installed只显示 APT 认为“当前有效安装”的包,带源信息(比如[ubuntu-security]),适合排查版本来源,但漏掉手动dpkg -i安装的 .deb 包。
常见操作建议:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 想确认某个软件(如
nginx)是否真在运行:用dpkg -l | grep '^ii' | grep -i nginx - 想知道这个包是从哪个仓库装的:用
apt list --installed | grep nginx - 想导出可复现的安装列表(比如迁移环境):用
apt list --installed | cut -d'/' -f1 | sort > pkg-list.txt,但注意[installed,local]的包不会被apt install自动重装
rpm -qa 为什么比 dnf list installed 更可靠
在 RHEL 8+/Fedora 上,dnf list installed 是推荐命令,但它依赖 DNF 自己的日志和 repo 元数据;而 rpm -qa 绕过所有上层逻辑,直接读 /var/lib/rpm 数据库,所以:
- 能查到
rpm -ivh手动装的第三方包(比如从官网下载的docker-ce-24.0.7-1.el9.x86_64.rpm) - 不受 repo 失效、签名异常、DNF 缓存损坏影响
- 支持
--last按安装时间倒序(rpm -qa --last | head -10),方便定位最近装了啥
但要注意:
-
rpm -q nginx查单个包时,必须写完整包名(如nginx-1.20.1-2.el9),否则报package nginx is not installed - 如果只想看用户主动装的(非依赖),
dnf list installed --userinstalled更准,rpm -qa没这能力
查不到包?可能是 snap / flatpak / pip / 源码安装的
所有上面的命令都只管系统级包管理器。如果你运行 dpkg -l | grep vim、rpm -qa | grep vim、pacman -Q | grep vim 全无输出,但 which vim 能定位到二进制,那它大概率不是系统包管理器装的:
-
snap list | grep vim→ snap 安装 -
flatpak list | grep vim→ flatpak 安装 -
pip list | grep requests或pip3 list --user | grep requests→ Python 包 -
npm list -g | grep eslint→ Node.js 全局包 -
which vim返回/usr/local/bin/vim→ 很可能是源码编译安装(查ls -l /usr/local/src/或翻安装日志)
这些方式安装的软件,不会出现在 dpkg、rpm、pacman 的数据库里,强行用系统命令查,只会让你怀疑人生。
最麻烦的是混合安装:比如用 apt install nginx 装了主程序,又用 pip install nginx-admin 装了个管理插件——它们彼此不可见,卸载时也得各走各路。

















