意外卸载许多软件包后,Ubuntu系统损坏


20

我不小心删除了所有以以下名称开头的软件包jpeg

sudo apt-get remove jpeg*

这搞砸了很多事情,删除了Unity,Firefox,Flash Player等。

我设法以某种方式恢复了桌面和统一性,但随后很多事情仍然存在问题。例如.rpm文件,.tag.gz根本不会打开。

我想要的是一种修复所有错误的方法。相当于带有Windows光盘的“修复安装”。

有提示吗?


1
我真的建议全新安装。只需备份/ home /(包括不可见文件)并将其插入新安装中即可。
Paul Woitaschek

Answers:


35

您可以安装ubuntu-desktop任务:

sudo apt-get install ubuntu-desktop^

这将安装您已删除的标准Ubuntu桌面的所有软件包。它不会还原您已安装的不属于标准桌面的软件包(即,它将重新安装Unity和Firefox,但不会重新安装Flash Player)。

要安装这些软件包,您可以查看/var/log/apt/history.log并确切了解已删除的内容。

注意:安装ubuntu-desktop^ 任务与安装ubuntu-desktop 软件包不同。前者将给APT一些提示来解决涉及虚拟软件包的依赖关系,后者将使APT可以自由选择软件包(最终将安装无用的东西,如ubiquity)。

为什么会发生此问题? apt-get remove jpeg*删除开头的所有包jpeg。相反,它将删除jpe名称中包含的所有软件包。这是因为apt-get与正则表达式一起使用,因此jpeg *的意思是:包含jpe的所有内容,后跟零个或多个g


1
好主意,我没想到。我很想看看它是否可以在这里工作!
伊利亚·卡根

@EliahKagan:我已经在chroot中进行了测试。jpeg *软件包仅影响某些图形应用程序,因此必需的“成分”(即用于Internet连接的NetworkManager,APT,终端仿真器等)仍在OP系统上。
Andrea Corbellini 2013年

@EliahKagan:当然,我(不明显)假设OP没有删除其他任何东西。
Andrea Corbellini 2013年

2
请附上警告,切勿使用tasksel它删除任务-请参阅讨厌的
taskel

1
@Attilio:我已经解释了答案的区别。请参阅“注意:安装ubuntu-desktop ^任务与安装ubuntu-desktop软件包不一样...”
Andrea Corbellini 2015年

8

解决此问题的最佳方法可能是重新安装Ubuntu。(即使您计划在不重新格式化的情况下重新安装,也应首先备份文档。)

如果您确实想尝试在适当的位置修复系统,请查看程序包管理器的日志文件以查看删除了哪些程序包,然后重新安装它们:

  • /var/log/dpkg.log (完整的信息,但很难阅读)
  • /var/log/apt/history.log (缩写会告诉您每个已删除或以其他方式修改的软件包-可能是您最好的选择)
  • /var/log/apt/term.log(如果您apt-get在终端中使用删除了这些软件包,则应该显示您所看到的内容,包括要删除哪些软件包的列表-因此,这可能是最好的方法)

仅重新安装以名字开头的软件包是jpeg行不通的,因为删除了许多(几乎可以肯定是大多数)软件包,因为它们依赖于那些软件包。

将来,我建议您仔细检查卸载软件包的后果。如果您使用命令行工作,则会始终收到通知。(除非您使用该-y选项,否则通常不会使用。除非您知道自己在做什么,尤其是对于删除操作,否则我建议不要使用该选项。)

检查程序包管理操作的后果apt-get而又不冒险发生的一种方法是运行apt-get -s而不是sudo apt-get。这仅模拟指定的操作,并报告结果将影响哪些软件包以及如何受影响。


1

sudo apt-get purge wine*在Ubuntu 15.10上运行,因此仅引导终端登录选项上没有图形界面。

正如Eliah Kagan所建议的那样,我使用了/var/log/apt/history.log 我在history.log上运行nano的信息,并制作了一个简单的脚本,该脚本包含sudo apt-get install在以下在线找到的所有清除的软件包中:

Purge: evolution:amd64 (3.16.5-1ubuntu3.1), libtotem-plparser18:amd64 (3.10.5-1) ...... etc

但首先,我必须手动删除所有:和之间的文本,包括:,

在这一步,一个新的脚本将很有帮助,因为程序包有数百个。之后,我运行脚本并删除了一些脚本Unable to locate packages(我已经手动安装了)。再次运行脚本,就这样。一切都很好...幸运的是


0

安装ubuntu-desktop安装ubuntu-desktop软件包

sudo apt-get update && sudo apt-get install ubuntu-desktop

它将为您的系统安装必要的软件包。


这对我来说失败了,因为没有安装ubuntu-desktop的依赖项。
kevinkayaks

0

我不小心卸下libssl1.0.0了机器,并将其弄伤了。为了恢复,我做了:

  1. 备份已删除内容的日志 cp /var/log/apt/term.log ~/libssl.term.log
  2. 删除与libssl操作无关的行 vi ~/libssl.term.log
  3. 如果缺少网络(无法ping google.com),则以恢复模式重新启动并启用网络
  4. 重新安装已删除的软件包 cat ~/libssl.term.log | grep ^Removing | sed -e 's/^Removing //g;s/ (.*$//g;/diversion of/d;/dangling symlinks/d' | xargs sudo apt-get -y install

0

这是一个小的python脚本,您可以在其中通过on进行批量卸载来编写(不可用)软件包字符串/var/log/apt/history.log。它将输出一个字符串,您可以将其复制粘贴到apt-get install命令中,以便轻松安装所有已删除的软件包。

import re

apt_str = u"INSERT YOUR PACKAGE STRING HERE, BETWEEN THE QUOTES"

match =  re.findall(r'([\w\d\.-]+).+? \(.+?\)', apt_str)
print " ".join(match)

逗号?你是说引号吗?
wjandrea

@wjandrea是的,我的意思是报价
joaoroque '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.