原始操作记录 #

有时在Linux下卸载某些包时,会出现类似如下错误:

YAML
dpkg: error processing glx-diversions (--remove):
subprocess installed post-removal script returned error exit status 2
configured to not write apport reports
Errors were encountered while processing:
glx-diversions
E: Sub-process /usr/bin/dpkg returned an error code (1)
A package failed to install. Trying to recover:

这说明对应的包在dpkg info 中已经出现了错误,此时有两种解决方法:

1:彻底删除更新dpkg info

Bash
mv /var/lib/dpkg/info /var/lib/dpkg/info.bak && mkdir /var/lib/dpkg/info && apt install -f

之后,异常就会消失。

不过这种方法有缺陷。原理是相当于直接把出错的dpkg info连同正确的一并移除了,这样的后果是以后安装什么软件都会报一大堆如下的警告:

YAML
dpkg: warning: files list file for package `*****' missing, assuming package has no files currently

所以这种方法不推荐。如果已经出现了这些警告,解决方法是直接用 apt install --reinstall 命令重新安装警告的包即可。

2:只移除出错信息

正确的做法是如果 apt-get 出现类似如下错误

TEXT
“subprocess installed post-installation script returned error exit status 1″
dpkg: error processing util-linux (–configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
util-linux
E: Sub-process /usr/bin/dpkg returned an error code (1)

进入 /var/lib/dpkg/info 目录,将出错的包档案删除即可。

比如出错的包名是xxx 直接进入这个目录rm xxx* 即可

最后

Bash
apt-get autoclean
apt-get update
apt-get upgrade

即可回复正常。

关键理解 #

这类笔记最重要的不是把命令背下来,而是弄清楚它解决的是什么问题、依赖什么环境、执行后会改变什么。以后再次遇到类似情况时,可以先根据标题判断问题方向,再对照原始命令确认是否适合当前系统版本。

如果命令中包含具体路径、网卡名、磁盘名、进程名、IP 地址、端口号、用户名称或软件版本,实际执行时都要替换成自己环境中的真实值。不要直接照抄示例里的占位内容。

验证方法 #

执行完成后不要只看命令是否返回成功,还应结合服务状态、配置文件内容、日志输出和实际访问结果一起判断。常用检查命令包括 systemctl statusjournalctl -xeip addrip routecatgrep 等。

如果验证结果和预期不一致,建议先不要继续叠加更多修改,而是回到第一步检查环境差异。很多问题并不是命令本身错误,而是当前系统版本、软件版本、路径名称或权限条件与原记录不一致。

注意事项 #

如果是在远程服务器上操作,尤其是网络、SSH、DNS、防火墙相关配置,必须提前准备控制台、VNC、快照或备份,避免因为配置错误导致无法重新连接。

对于旧文章中的命令,还要考虑软件版本变化。浏览器 flags、Linux 发行版默认配置、Python 包版本、Windows 系统设置都会随着时间调整。再次使用时,最好把这篇记录当成排查思路,而不是绝对固定的唯一答案。

小结 #

这篇记录可以作为一个快速索引:先看标题确认问题类型,再看原始命令找到核心操作,最后结合验证方法确认是否真正生效。这样既保留了早期备忘的简洁性,也能减少以后重复排查的时间。