各包管理器卸载均不自动清理配置:apt purge仅删包及自身配置,需autoremove--purge等补三步;dnf remove默认保留配置和service文件;pacman -rs不删用户配置,须手动查删;rpm -e需理清依赖链,禁用--nodeps除非必要;编译安装软件需反推路径手动清理。

apt purge 不等于彻底删除
执行 sudo apt purge 软件包名称 只能清除该包及其配置文件,但不会动它安装时顺带拉进来的依赖项,也不会清理已卸载但残留配置的“rc”状态包。很多人以为 purge 之后就干净了,结果发现 /var/lib/软件包名称、/etc/软件包名称 还在,甚至 dpkg -l | grep "^rc" 能扫出一堆残留。
真正要清掉这些,得补三步:
- 先用
sudo apt autoremove --purge清理孤立依赖 + 已卸载包的配置 - 再跑
sudo apt autoclean && sudo apt clean删掉本地缓存的 .deb 文件 - 最后手动检查
/etc/软件包名称、/var/log/软件包名称、~/.config/软件包名称,确认无误后rm -rf
dnf remove 后配置文件还在是正常行为
sudo dnf remove 软件包名称 默认只删程序本体,不碰 /etc/ 下的配置目录、~/.local/share/ 里的数据,也不删 systemd service 文件(哪怕已停用)。这不是 bug,是设计如此 —— DNF 认为用户可能想保留配置重装复用。
所以必须主动处理:
- 查系统级配置:
ls /etc/软件包名称* /usr/lib/systemd/system/软件包名称*.service 2>/dev/null - 删用户级数据:
rm -rf ~/.config/软件包名称 ~/.local/share/软件包名称 - 清缓存:
sudo dnf clean all,否则下次dnf install可能复用旧元数据
pacman -Rs 不能自动删用户配置文件
sudo pacman -Rs 软件包名称 确实会删掉包本身和所有“非共享依赖”,但它不会扫描或删除 ~/.config/ 或 /etc/ 下的配置文件 —— Pacman 数据库只记录它自己装的东西,不追踪用户手动改写的路径。
想确认哪些配置路径被该包注册过,得用:
pacman -Ql 软件包名称 | grep -E '\.(conf|cfg|ini|toml|yaml)$'
输出里每条路径都要人工判断:是否还在用?是否被其他包共用?确认独占后才能 sudo rm -f。别跳过这步,否则重装时可能加载旧配置引发冲突。
rpm -e 强制卸载前必须理清依赖链
直接 sudo rpm -e 软件包名称 很容易报错 “failed dependencies”,因为 rpm 默认拒绝破坏依赖关系。有人图省事加 --nodeps 强制删,结果导致其他软件启动失败或 systemctl list-units --failed 冒出一堆红字。
稳妥做法是:
- 先查完整包名:
rpm -qa | grep -i 关键词(比如mysql、php) - 按依赖顺序删:用
rpm -qR 软件包名称看它依赖谁,反过来用rpm -q --whatrequires 被依赖包名看谁依赖它 - 实在卡住再
--nodeps,但删完立刻rpm -Va校验系统完整性
最麻烦的是编译安装的软件 —— 它根本不在包管理器数据库里,make uninstall 又常常没实现,这时候只能靠 make -n install | grep 'cp\|install' 反推安装路径,再逐个 rm。










