前几天在删除一个软件的的时候使用 apt-get autoremove,结果把所有依赖的软件都卸载了,而且导致很多库文件出了问题,不能再安装任何软件。
后来在 上查了一下,
autoremove – 卸载所有自动安装且不再使用的软件包
例如:C 依赖于 B, D 依赖于B, 且D没有被其他手动安装的包依赖,apt-get autoremove C 将删除B, C, D。其实很多时候我们并不想删除B,D。所以一定慎用autoremove.
经过这次删除后,导致后面任何软件都无法安装了。然后仔细研究了一下ubuntu的安装软件原理。这里讲一下如何在出现上面情况的时候恢复。
当误删后再安装软件,可能会出现下面情况
如果依赖的库不是比较关键的话,根据提示最简单的情况是,使用命令 -f 强制更新一下安装包
如果能仍然不能恢复,出现像下面我遇到的情况,就比较麻烦了。
当执行apt-get -f install 时候仍然有错误,
像我遇到的这个现象,有两个问题,一个是依赖的库又与其他安装的软件的库版本不一样,导致安装不成功,另一个是当时在卸载时候导致一些动态库连接出了问题。
首先解决连接库的问题/sbin/ldconfig.real: /usr/lib/x86_64-linux-gnu/libwind.so.0 is not a symbolic link, 以libwind.so为例。
ls看一下会发现同名但是版本不同的两个库文件,而且大小一致,如果使用diff libwind.so.0 libwind.so.0.0.0看一下的话,会发现两个文件一致没有区别
,这样的话就可以做强制连接库执行ln -sf 将libwind.so.0强制做成链接文件,就能解决提示的错误。这一步只能一个个手动重新建立链接,避免系统里有多个版本,弄错了链接。
当解决完链接问题后,就可以再执行
到这里如果成功,文件解决,如果像我遇到的情况还有另一个问题需要解决,安装的软件冲突问题。
这介个通过手动安装一下,
不过使用dpkg安装软件包的时候,又遇到了一个问题,依赖的库版本不同,
使用dpkg -l 可以查看当前已经安装的版本
这个时候会发现已经安装的版本和期望安装的版本不一致,这只能把已经安装的版本卸载掉,再安装期望的版本。首先是卸载,执行下面命令。
以此把错误的几个版本库都卸载掉。
都卸载完后,再尝试安装软件,但是仍然安装失败了,
提示了这样的错误
这就很奇怪了,然后用find找了一下avostools这个包,看一下到底是什么程序。这个时候想起来这个软件是以前同事自己写的安装包,在我电脑试的,谁能想到这么坑,然后接下来就是把这个软件删除了,然后再find 发现在/var/lib/dpkg/info/下有这个软件安装信息。
其实这个就涉及到了unbutu安装程序的原理了,apt-get 最终也是调用的dpkg进行的安装,为什么每次apt-get -f install 能更新软件,就是因为/var/lib/dpkg下面的信息,每次安装软件会在这个目录下的status文件中增加安装的软件信息,然后info目录下创建同名的***.mdtsums,***.list, ***.postinst文件。就是靠这些信息,进行软件安装和更新的。
既然知道了这些,并且知道这个软件没有用户,果断的删掉这些信息。/info下的这三个文件删除掉。status文件里找到同名的几行信息。删除掉即可。
至此,所有有冲突的版本问题都解决了。
然后在执行
所有软件能够正常更新了。
然后在安装希望安装的软件就可以了。
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门在线安装软件25109 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!