先确认安装方式:dpkg -l查.deb、rpm -qa查.rpm、snap list查snap、flatpak list查flatpak,全无则可能是源码或二进制安装。

Linux 查看已安装软件列表,关键不是“用哪个命令”,而是“先搞清软件是怎么装的”。不同安装方式对应不同查询和卸载路径,混用会导致查不到、卸不干净、甚至误删系统组件。
怎么确认软件是用什么方式安装的?
这是所有操作的前提。包管理器不会跨系统记录安装来源,必须人工判断:
- 运行
dpkg -l | grep 软件名有输出 → 很可能是apt或dpkg安装的(Debian/Ubuntu) - 运行
rpm -qa | grep 软件名有输出 → 很可能是yum、dnf或直接rpm安装的(RHEL/CentOS/Fedora) - 运行
snap list | grep 软件名有输出 → 是snap安装的 - 运行
flatpak list | grep 软件名有输出 → 是flatpak安装的 - 以上都查不到,但
which 软件名或command -v 软件名能定位到可执行文件(比如在/usr/local/bin),大概率是源码编译安装的
各主流包管理器查看已安装软件的命令
查不到 ≠ 没装,很可能是命令不匹配发行版或安装方式:
- Debian/Ubuntu:
apt list --installed(推荐)或dpkg -l(更底层,含状态标记) - RHEL/CentOS 7 及以前:
yum list installed - Fedora/CentOS 8+:
dnf list installed - Arch Linux:
pacman -Q(只列显式安装)或pacman -Qq(纯包名列表) - Alpine Linux:
apk info - openSUSE:
zypper search --installed-only
注意:apt list 和 dnf list 默认只显示通过对应包管理器安装的包,不会包含 snap/flatpak/源码安装项;dpkg -l 和 rpm -qa 是系统级记录,覆盖范围更广,但仅限其原生格式(.deb/.rpm)。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
卸载时最常踩的三个坑
卸载失败或残留,90% 出现在这三类场景:
-
混淆 purge 和 remove:在 Ubuntu 上用
apt remove firefox只删二进制,配置还在/etc/firefox/和用户目录;要清空得用apt purge firefox -
忽略依赖自动清理:比如用
dnf remove httpd卸载 Apache 后,mod_ssl、httpd-tools等依赖仍留在系统里;应补一句dnf autoremove -
对源码安装程序硬删文件:直接
rm -rf /usr/local/bin/mytool可能漏掉/usr/local/share/mytool/或/etc/mytool.conf;优先尝试进原解压目录运行make uninstall(如果 Makefile 支持)
Flatpak 和 Snap 应用的特殊性
它们不走系统包管理器,也不写入 /usr,因此 dpkg、rpm 都看不到。但这也意味着卸载更安全、更隔离:
- Snap:
sudo snap remove <code>软件名(如sudo snap remove vlc) - Flatpak:
flatpak uninstall <code>包名(包名通常带反斜杠,如org.videolan.VLC;可用flatpak list确认)
Flatpak 默认只对当前用户生效,加 --system 才是全局安装;Snap 则默认全局,加 --classic 或 --devmode 是特殊权限模式,卸载逻辑不变。
真正麻烦的永远不是标准包管理器,而是那些没有注册到任何数据库的二进制释放包、手动拷贝的脚本、或者用 curl | bash 安装的工具——它们不会出现在任何 list 命令里,只能靠 ps aux、lsof -i、find /usr -name "*关键词*" 这类手段逆向追踪。










