|
|
|
|
公众号矩阵

如何修复Linux中损坏的软件包?

Apt和DNF等Linux软件包管理器功能异常强大、界面异常直观,但这并不意味着就不会出岔子。有时软件包安装会出问题,您得收拾残局。软件包管理器能够修复损坏的软件包并跳过损坏的更新,使系统重新运行并避免将来遇到麻烦。本文介绍如何在Linux中修复损坏的软件包。

作者:布加迪编译来源:51CTO|2020-11-11 08:00

【51CTO.com快译】Apt和DNF等Linux软件包管理器功能异常强大、界面异常直观,但这并不意味着就不会出岔子。有时软件包安装会出问题,您得收拾残局。软件包管理器能够修复损坏的软件包并跳过损坏的更新,使系统重新运行并避免将来遇到麻烦。本文介绍如何在Linux中修复损坏的软件包。

这些提示和技巧可在大多数情况下帮助您解决问题。它们都相当普遍,但是每种情况都不尽相同,因此试着自行解决问题时牢记这一点。

修复Ubuntu中损坏的软件包

Apt有几个标志(flag),可用于修复安装过程中因某个原因而损坏的缺失的依赖项或软件包。一个常见的情况是安装第三方.deb,发现它有您不了解的依赖项。这些依赖项可能不会自行获取,dpkg会抱怨缺少软件包。不管怎样,您可以尝试下列步骤。

图1

首先,运行更新以确保没有所需软件包的较新版本。

  1. sudo apt update --fix-missing 

下一步,您可以试着强制Apt查找并更正所有缺失的依赖项或损坏的软件包。实际上,这将安装所有缺失的软件包,并修复现有的安装。

  1. sudo apt install –f 

软件包安装中可能出错误的另一个地方是配置过程。在后台负责这部分的是dpkg,而不是Apt,因此有理由认为:软件包在配置期间失灵时,dpkg是用来修复它的工具。

图2

先尝试强制dpkg重新配置所有损坏的或部分配置的软件包。

  1. sudo dpkg --configure -a 

如果这解决不了问题,可以采取更强制的方法。先列出dpkg标记为要重新安装的所有软件包。

  1. sudo dpkg -l | grep ^..r 

您应该在这里看到有问题的软件包。只要没有似乎不属于这里的任何软件包,您都可以强行删除损坏的软件包。

  1. sudo dpkg --remove --force-remove --reinstreq 

dpkg完成后,试着用Apt清理一下。

  1. sudo apt clean 
  2. sudo apt update 

运气好的话,它们会让您回到开始的地方。它不会给您试图安装的损坏软件包,但至少Apt可以再次发挥作用。

永久DPKG锁

有一个不太常见的问题:可笑的dpkg锁阻止您执行任何操作。每当您试着使用Apt或dpkg,都会出现错误,提示另一个应用程序已经在使用Apt或dpkg,实际上并非如此。

实际上,很容易删除阻止您使用Apt、回去执行要执行的操作的锁定文件。有时,安装出现错误后,这些锁定文件仍会在那里,阻止文件被自动删除。这种情况下,您需要自行操作。

  1. sudo rm /var/lib/apt/lists/lock 

另外,删除缓存中的锁。

  1. sudo rm /var/cache/apt/archives/lock 

修复Fedora/CentOS/RHEL中损坏的软件包

修复Fedora/CentOS/RHEL中损坏的软件包不大常见,因为yum和dnf在确保软件包正确安装方面做得非常好。然而有时软件包使用还是会出问题。在基于rpm的系统上执行此操作的命令是:

  1. sudo rpm –Va 

图3

-V选项用于验证,这意味着它将检查安装文件方面的信息,并与rpm数据库中存储的信息进行比较。这一点帮助不大,因为它通常会给出一长串文件,但如果您遇到某个应用程序的问题,至少有地方可以入手。您可以对该列表中看到的任何可能带来麻烦的软件包运行dnf重新安装。

  1. sudo dnf --refresh reinstall PACKAGE_NAME 

这将所有元数据设为到期,以便它可搜索您启用的每个存储库,查找该软件包的新版本。如果您发现该软件包有坏的依赖项,DNF可能会告诉您使用--skip-broken标志。这还可能意味着您没有启用特定的存储库来提取依赖项,因此您可能得搜寻一番。

结束语

但愿这些修复方法管用,那样您可以正常使用Linux系统了。请记住,要处理完全失控的情况,最佳方法是试着恢复到以前的状态。除非您知道自己到底在干什么,否则不要忙中添乱。

原文标题:How to Fix Broken Packages in Linux,作者:John Perkins

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

  1. Linux黑话解释:什么是Linux中的GUI、CLI和TUI?
  2. 一例 Go 编译器代码优化 bug 定位和修复解析
  3. Python超市进销存管理系统!老妈开超市有系统了
  4. 深究 Linux 多线程中的信号量 Semaphore
  5. Linux 更安全?大规模 Windows 勒索软件移植至 Linux
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

28人订阅学习

数据中心和VPDN网络建设案例

数据中心和VPDN网络建设案例

漫画+案例
共20章 | 捷哥CCIE

190人订阅学习

搭建数据中心实验Lab

搭建数据中心实验Lab

实验平台Datacenter
共5章 | ITGO(老曾)

119人订阅学习

视频课程+更多

Spring 5.x框架

Spring 5.x框架

讲师:张晨光645人学习过

Wireshark网络安全协议分析

Wireshark网络安全协议分析

讲师:曲广平2728人学习过

k8s之中小型企业实战-基础篇

k8s之中小型企业实战-基础篇

讲师:小李哥1413人学习过

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微