Linux系统修复依赖冲突的方法

2023-11-02 21:13:16 13点赞 36收藏 12评论

结论:sudo apt --fix-broken install命令可以解决很多依赖之间大批量冲突的问题。

特别提醒:采用“sudo dpkg -i 本地deb文件”来安装deb应用程序,很大概率会产生依赖冲突,因为dpkg是不会自动解决依赖冲突的。强烈建议用“sudo apt-get install 本地deb文件”来安装deb程序,这样apt会自动解决依赖冲突。注意:“sudo apt-get install 本地deb文件”来安装deb的时候,必须指明本地deb文件的路径,如果不指明文件路径,apt会在“源”上去找该文件。

最近发现,我的linux系统的依赖关系有点乱,因为之前我强制安装了一些包,导致出现一些冲突。

用sudo apt-get upgrade命令可以看到系统上的依赖之间的冲突(见下图):

Linux系统修复依赖冲突的方法

即使删除个东西,都会提示这些冲突:

我研究了一下解决方法。

第一步、如果修改了/etc/apt/sources.list文件,最好恢复成原来的默认文件。

用下面的命令将/etc/apt/sources.list文件恢复成系统初始文件,这一步的目的是保证将apt-get的源恢复成系统默认的,假如你添加过什么其他源,都要删除掉,避免干扰(高手如果懂原理,可以不用做这一步):

sudo vi /etc/apt/sources.list

第二步、系统提示什么冲突,就解决那个冲突的包(这个方法采用单个包手动解决的方式,适合只有1-2个包的情况,如果出现大批量冲突则要换其他方法来解决)

例如:上面的信息提示下面的信息(见上图):

依赖: gcc-12-base (= 12.3.0-1ubuntu1~22.04)

先到ubuntu.pkgs官网下载gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb文件,然后用下面的命令安装gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb:

sudo apt-get install ./gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb

这时候,仍然显示报错(见下图):

Linux系统修复依赖冲突的方法

按照提示,改用下面的命令来安装:

sudo apt --fix-broken install ./gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb

这时候不报错了(见下图):

Linux系统修复依赖冲突的方法

执行sudo apt --fix-broken install ./gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb这条命令的目的是: apt --fix-broken install 会自动从第一步提到的/etc/apt/sources.list这个apt源里面自动查找并修复冲突的依赖,执行之后,会提示下面的信息,也就是提示你,这些冲突的依赖会自动修复(见上图的截图,我将该命令修复的依赖粘贴到下面,给大家仔细看):

将会同时安装下列软件:

lib32gcc-s1 lib32stdc++6 libc6 libc6-dev-i386 libc6-i386 libclang-14-dev libclang-common-14-dev libclang1-14 libllvm14 libobjc4 libstdc++-11-dev

建议安装:

glibc-doc libstdc++-11-doc

推荐安装:

libnss-nis libnss-nisplus gcc-multilib

下列【新】软件包将被安装:

lib32stdc++6

下列软件包将被升级:

gcc-12-base lib32gcc-s1 libc6 libc6-dev-i386 libc6-i386 libclang-14-dev libclang-common-14-dev libclang1-14 libllvm14 libobjc4 libstdc++-11-dev

特别提醒

sudo apt --fix-broken install ./gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb这条命令需要指定gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb文件的目录(相对目录或者绝对目录都行,我是cd到该文件的下载目录下,所以我使用的是./这个相对目录,你也可以使用绝对目录),如果你不指定gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb文件路径的话,apt会傻傻的去apt源里面找,而且apt肯定找不到这个gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb文件,如果它能智能到找到并安装“源“里面的这个gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb文件,上面我执行sudo apt-get upgrade就不会报缺少gcc-12-base的错了。

如果执行sudo apt --fix-broken install ./gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb命令提示下面的报错信息,也就是提示你将要安装的gcc-12-base和系统已经安装的gcc-12-base不兼容:

Linux系统修复依赖冲突的方法

sudo dpkg --force-overwrite -i 命令强制安装某个包

用下面的命令来强制安装该包(注意:使用该命令有可能导致系统故障,除非你清楚知道自己在干嘛,不然不要轻易强制安装执行,下面的命令使用前要千万小心):

sudo dpkg --force-overwrite -i gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb

上面的命令执行完毕后,再用sudo apt-get upgrade查看一下,冲突的依赖减少到只有下面的3个了:

Linux系统修复依赖冲突的方法

采用sudo apt --fix-broken install 命令解决大批量冲突的情况

这条命令可以解决很多大批量依赖之间冲突的问题:

Linux系统修复依赖冲突的方法Linux系统修复依赖冲突的方法

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
12评论

  • 精彩
  • 最新
  • 封面小姐姐好漂亮,文字内容纯纯干货,先收藏备用

    校验提示文案

    提交
  • 头像好评,剩下的看不懂 [喜极而泣]

    校验提示文案

    提交
  • 看起来已经完全分不清是真是假啦

    校验提示文案

    提交
  • 收藏了,慢慢学 [傻笑]

    校验提示文案

    提交
  • 真的不错呀

    校验提示文案

    提交
  • 收藏,继续跟着大佬学习 [高兴]

    校验提示文案

    提交
  • 除了头图,其他看不懂 [喜极而泣]

    校验提示文案

    提交
  • 再来支持一下大佬,新文求支持啊~

    校验提示文案

    提交
  • 学习了

    校验提示文案

    提交
  • 上次弄个机器学习的环境弄了2天,还是网络问题。科学上网就迎刃而解

    校验提示文案

    提交
  • 再来支持一下大佬,期待上新啊

    校验提示文案

    提交
  • 修复依赖冲突时,使用命令行工具可以批量处理大量的问题,提高系统恢复效率。同时要谨慎操作,在解决冲突时要注意备份和验证,确保系统的完整性和稳定性。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
36
扫一下,分享更方便,购买更轻松