应根据系统类型选择对应命令:debian/ubuntu用apt list --installed,centos 7用yum list installed,centos 8+及fedora用dnf list installed,所有rpm系通用rpm -qa;查包状态优先用dpkg-query -s或yum/dnf list installed而非dpkg -l或rpm -qa,并注意snap/flatpak/pip/npm需单独查询。

直接看包管理器类型:Debian/Ubuntu 用 apt list --installed,CentOS/RHEL 8+ 用 dnf list installed,CentOS 7 及更早用 yum list installed,所有 RPM 系统都可用 rpm -qa —— 这四个命令覆盖 99% 场景,选错工具是新手最常踩的坑。
查 Debian/Ubuntu 已装软件:别只用 dpkg -l
dpkg -l 能看,但输出冗长、状态列易混淆(比如 rc 表示已卸载仅留配置),真正实用的是 apt list --installed:它只显示「当前真正处于 installed 状态」的包,带版本和架构,且支持 grep 过滤,比如 apt list --installed | grep nginx。若想查某个包是否安装并看详情,用 dpkg-query -s <code>nginx 比 dpkg -l 更精准——它会明确告诉你 Status: install ok installed 还是 deinstall ok config-files。
查 CentOS/RHEL/Fedora 已装软件:yum 和 dnf 不兼容
CentOS 7 用 yum list installed,CentOS 8+ 和 Fedora 默认用 dnf list installed;二者命令不互通,强行在 dnf 系统上跑 yum list installed 可能报错或返回空。更底层、跨版本通用的是 rpm -qa,但它输出纯包名(如 vim-enhanced-2:8.0.1994-5.el8_6.1.x86_64),想过滤得加 grep,比如 rpm -qa | grep vim。注意:rpm -qa 不区分“用户安装”和“系统默认预装”,而 yum/dnf list installed 会标出 @anaconda 或 @System 来源,这对判断是否为手动安装更有参考价值。
快速确认包管理器类型,避免命令失效
不确定系统用哪个?先运行 cat /etc/os-release 看 ID 和 VERSION_ID:含 ubuntu 或 debian 就用 apt;含 centos 且 VERSION_ID="7" 用 yum;含 centos 且 VERSION_ID="8" 或 "9",或 fedora,就用 dnf。还有一个硬核办法:command -v apt、command -v dnf、command -v yum 三者中哪个有输出,就优先用哪个——别依赖记忆,现场验证最稳。
容易被忽略的一点:snap、flatpak、pip、npm 安装的软件完全不在上述命令范围内,它们各自有独立列表机制(如 snap list、flatpak list、pip list)。如果查不到某个程序,先确认它是不是通过这些非系统包管理器装的。










