dpkg -l | grep '^rc' 会列出所有状态为“已卸载但配置文件仍保留”的包(rc表示removed, config remains),这些包虽无主程序,但其配置文件仍驻留在/etc等路径,可能干扰重装或占用inode,需用sudo dpkg -p 包名或批量命令彻底清除。

dpkg -l | grep '^rc' 能看到哪些残留
执行 dpkg -l | grep '^rc' 会列出所有状态为 rc 的包——意思是“已卸载(r),但配置文件还在(c)”。这类包不会出现在正常安装列表里,但它们的配置仍躺在 /etc 或其他系统路径下,可能干扰新版本安装或占用磁盘空间。
常见现象包括:which firefox 找不到命令,但 dpkg -l | grep firefox 显示 rc 行;重装同名软件时提示“配置文件已存在”;apt install 报错说某个配置目录被占用。
-
rc状态不等于“已清理”,只是标记为待清除,必须手动或用dpkg -P处理 - 某些 Snap/Flatpak 软件不会进入 dpkg 列表,
dpkg -l对它们完全无效 - 如果输出为空,不代表没残留——用户级配置(如
~/.config)和日志、缓存都不在此列
sudo dpkg -P 强制清除 rc 包最稳妥
dpkg -P(即 purge)是唯一能安全删除 rc 状态包全部残留的方式。它比 apt purge 更底层,不依赖 APT 数据库一致性,适合修复因中断安装/卸载导致的卡住状态。
批量执行推荐命令:dpkg -l | grep '^rc' | awk '{print }' | sudo xargs dpkg -P
- 不要用
rm -rf /etc/xxx直接删目录——dpkg -P会按包注册信息精准删除,避免误伤其他软件共用的配置项 - 执行后再次运行
dpkg -l | grep '^rc',应无输出;若有残留,说明该包被其他已安装包依赖,需先处理依赖关系 - 部分包(如内核模块)可能因正在使用被拒绝清除,此时需先重启或卸载相关驱动
~/.config 和 ~/.cache 必须手动删
APT 和 dpkg 完全不管用户主目录下的文件。像 ~/.config/firefox、~/.cache/spotify、~/.local/share/telegram-desktop 这类路径,即使软件被 purge 干净,也原封不动留着。
正确做法不是盲目 rm -rf ~/.config/*,而是按软件名精确清理:
- 先确认残留位置:
ls -la ~/.config | grep -i firefox、find ~/.cache -maxdepth 1 -type d -iname "*spotify*" - 再执行删除:
rm -rf ~/.config/firefox、rm -rf ~/.cache/Spotify - 注意大小写和拼写变体(如
TelegramDesktopvstelegram-desktop),建议用find配合-iname(忽略大小写)
Snap 和 Flatpak 残留得单独处理
如果你卸载的是 Snap 或 Flatpak 应用,dpkg -l 和 apt purge 均无效。它们有独立的数据存储机制:
- Snap:用
sudo snap remove <code>package_name卸载后,用户数据默认保留在/home/username/snap/<code>package_name/,需手动rm -rf ~/snap/<code>package_name/ - Flatpak:用
flatpak uninstall --delete-data <code>app_id(如org.mozilla.firefox),不加--delete-data不会清用户数据 - 两者都可能在
/var/lib下留缓存,Snap 缓存路径是/var/lib/snapd/cache/,Flatpak 运行时可执行flatpak uninstall --unused
最容易被忽略的是:同一软件可能同时存在 apt、Snap、Flatpak 三种安装方式,只清一种并不等于彻底清理。











