Linux系统修复依赖冲突的方法
结论: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命令可以看到系统上的依赖之间的冲突(见下图):

即使删除个东西,都会提示这些冲突:
我研究了一下解决方法。
第一步、如果修改了/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
这时候,仍然显示报错(见下图):

按照提示,改用下面的命令来安装:
sudo apt --fix-broken install ./gcc-12-base_12.3.0-1ubuntu1~22.04_amd64.deb
这时候不报错了(见下图):

执行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不兼容:

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个了:

采用sudo apt --fix-broken install 命令解决大批量冲突的情况
这条命令可以解决很多大批量依赖之间冲突的问题:


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

巴伐利亚南大王
校验提示文案
小泽不是玛利亚o0
校验提示文案
弗老大
校验提示文案
飞儿飞吧
校验提示文案
五十包郵解君愁
校验提示文案
大胃王DAVID
校验提示文案
林溪风
校验提示文案
弗老大
校验提示文案
跟我买不亏
校验提示文案
sahara11
校验提示文案
弗老大
校验提示文案
五十包郵解君愁
校验提示文案
五十包郵解君愁
校验提示文案
弗老大
校验提示文案
sahara11
校验提示文案
跟我买不亏
校验提示文案
弗老大
校验提示文案
林溪风
校验提示文案
大胃王DAVID
校验提示文案
五十包郵解君愁
校验提示文案
飞儿飞吧
校验提示文案
弗老大
校验提示文案
小泽不是玛利亚o0
校验提示文案
巴伐利亚南大王
校验提示文案