Linux无统一查已安装软件包命令,需先用dpkg、rpm、pacman或zypper --version判断发行版及包管理器;Debian/Ubuntu用apt list --installed | grep或dpkg -s,RHEL系用rpm -qa | grep或dnf list installed,Arch系用pacman -Qe,源码安装软件则无法通过包管理命令识别。

dpkg -l、rpm -qa、pacman -Q 这三个命令分别对应 Debian/Ubuntu、RHEL/CentOS/Fedora、Arch 系统的底层已安装包查询,但直接运行它们不保证能查到你想要的软件——**查不到不是命令错了,是系统没用那个包管理器装它**。
先确认你的包管理器,别硬套命令
Linux 没有“通用查已装包”命令。你得先知道当前系统走哪条路,而不是背命令。
- 运行
dpkg --version有输出 → Debian/Ubuntu 系,用apt list --installed或dpkg -l - 运行
rpm --version有输出 → RHEL/CentOS/Fedora/openSUSE,用rpm -qa或dnf list installed(RHEL 8+/Fedora)或yum list installed(CentOS 7) - 运行
pacman --version有输出 → Arch/Manjaro,用pacman -Q - 运行
zypper --version有输出 → openSUSE,用zypper search --installed-only
别信 which apt 或 cat /etc/os-release 就完事——有些系统预装多个包管理器但只启用一个。现场跑命令看哪个有响应,最稳。
查某个具体软件是否装了,别扫全表
全量列表动辄上千行,人工翻等于浪费时间。精准过滤才是日常做法。
- Debian/Ubuntu:
apt list --installed | grep -i nginx(-i避免大小写漏判);更底层可用dpkg -l | grep '^ii' | grep -i nginx,能捕获手动dpkg -i安装的 .deb 包 - RHEL/CentOS/Fedora:
rpm -qa | grep -i httpd比dnf list installed | grep httpd更全——后者可能漏掉rpm -ivh直接装的第三方包 - Arch:
pacman -Qs vim搜索已安装包名和描述(注意:不支持正则,大小写敏感);想精确匹配包名用pacman -Q vim
所有这些 grep 都建议加 -i,因为包名大小写不统一(比如 Nginx vs nginx),不加容易空手而归。
查不到?可能是非包管理器安装的
如果上述命令全无输出,但 which curl 或 command -v python3 能定位到二进制,说明它很可能不是通过系统包管理器装的。
-
snap install vlc→ 查用snap list | grep vlc -
flatpak install flathub org.mozilla.Firefox→ 查用flatpak list | grep Firefox -
pip install --user requests→ 查用pip list | grep requests(注意:--user安装的不会出现在系统级包列表里) - 源码编译(
./configure && make && sudo make install)→ 通常装到/usr/local/bin,用find /usr/local -name "nginx" 2>/dev/null或ls -l $(which nginx)看路径再反推
关键点:包管理器之间完全不共享数据库。rpm 不知道 pip 装了啥,apt 也不管 snap,dpkg -S 和 rpm -qf 只认自己格式的包。
查详情时别只看名字,状态和来源更重要
光知道“装了”不够,还得知道“怎么装的、装得对不对”。
- Debian/Ubuntu:
dpkg-query -s nginx比dpkg -l更干净,直接返回Status: install ok installed或deinstall ok config-files,避免手动解析状态码 - RHEL/CentOS:
rpm -qi httpd显示安装时间、签名、文件列表;rpm -qf /etc/nginx/nginx.conf可确认该配置文件属于哪个包(路径必须存在) - Arch:
pacman -Qi firefox输出比pacman -Q多出构建时间、维护者、依赖等,适合排查冲突
最容易被忽略的是:所有这些命令都看不到 /opt 或 /usr/local 下手动解压的二进制(如官方 Linux 版 VS Code tarball)。它们不在任何包数据库里,只能靠 which + ls -l + 进程树交叉验证。


















