Linux遇到的错误‘The package needs to be reinstalled…’
转载:https://www.jianshu.com/u/369d427430e8
问题描述
在使用apt时,总是出现E: Sub-process /usr/bin/dpkg returned an error code (1)的错误。一直卡在一个叫libgs9-common的软件包上,该软件包已经损坏,但是,重新安装时,会显示“已安装最新版本”,卸载时又显示“该软件包不妥,建议重新安装”,真是安装不了又卸载不了。出现这个问题的原因应该是因为已安装的软件包中有该软件包的记录导致的,只要将该记录删除,就能重新安装该软件包。
于是,我上百度搜索该错误的解决方式,发现遇到该问题的还不少人。每个解决方案都一样。以下是给出的解决方法。
具体指令流程:(行不通)
cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
sudo apt update
sudo apt install -f
sudo mv info/* info.bak/
sudo rm -rf info/
sudo mv info.bak/ info/
每个解决方案几乎都是将/var/lib/dpkg/文件夹下的info/文件夹备份后,重新再建一个info/文件夹,也就是将该文件夹中所出错的包的记录给清楚,再用指令apt update;apt install -f,这样就能得到新的info/文件夹的内容,再将新的info/文件夹中的内容移动到备份的文件夹中,再恢复备份的info/文件夹。
但是,我照做了后,还是没能解决。于是,我继续百度,找到了一个英文网站。该网站给了一个不同的解决方法。这个方法试了之后,解决了这个问题。以下是解决方法。
正确解决方法
//备份/var/lib/dpkg/status文件
sudo cp /var/lib/dpkg/status status.bkp
//编辑该文件
sudo vim /var/lib/dpkg/status
//定位到出错的软件包,将该软件包的记录删除,保存,就完成了。
注:解决思想主要是先备份/var/lib/dpkg/status,再用你熟悉的编辑器编辑该文件,定位到出错的软件包记录(我用的vim编辑器,在指令界面可用:/<软件包名>查找记录),最后将该软件包记录删除。
编辑/var/lib/dpkg/status文件,并定位到出错包记录行。我出错的包名为libgs9-common。然后该软件包的记录全部删除!删除!删除!不要手下留情!(不过别删过了。。。),保存!这样就完成了!开心!