意外删除了 /usr/lib/*.so.*

意外删除了 /usr/lib/*.so.*

当我安装MRTG时,我错误地删除/usr/lib/*.so.*/usr/lib/*.so

我现在无法启动我的系统,它卡在启动画面,当我按下 PAGEDOWN 按钮时,我可以看到有几项内容无法加载。

但是,DHCP 和 WebMin 正在运行,并且从 Webmin 我可以看到系统日志,它告诉我 cups 没有加载,因为libpipeline.so.1缺少其他几个。

我的电脑运行的是 11.04

答案1

您可以花一周的时间寻找所有缺失的内容,也可以花一个小时从 CD 重新安装,然后找回所有旧软件包。

我建议您先启动 LiveCD 环境来备份内容(将它们复制到外部 USB 驱动器或其他分区),然后重新启动。

答案2

由于您只删除了/usr/lib/*而没有删除/lib/*,因此您可能可以恢复。我认为恢复系统所急需的所有程序都只使用 中的库/usr/lib

启动到文本登录提示符。如果正常启动没有login:在文本模式下给您提示,请仅使用最少的服务进行启动。Shift当计算机开始显示 Grub 提示符时按住该键;您需要在 BIOS 初始化键盘之后但在 Grub 加载之前按下该键,这在某些机器上只留下很短的时间窗口并且可能需要多次尝试。在 Grub 提示符下,按下Down以突出显示单用户模式启动项并启动它。

获得命令行后,运行apt-get --reinstall install PACKAGE1 PACKAGE2 …以重新安装包含 中的文件的软件包/usr/lib。您可以运行此 shell 代码片段来获取要重新安装的软件包名称列表:

egrep -l '/usr/lib/[^/]*\.so\.' /var/lib/dpkg/info/a*.list |
sed -e 's!^/var/lib/dpkg/info/!!' -e 's!\.list$!!'

某些软件包安装脚本可能需要其他软件包中的库,因此您可能需要按特定顺序运行重新安装。如果您发现软件包的安装脚本正在尝试使用特定程序,则可以使用 找出该程序需要哪些库。ldd例如,这表明 python 缺少三个需要重新安装的库:

$ ldd /usr/bin/python | grep 'not found'
    libssl.so.0.9.8 => not found
    libcrypto.so.0.9.8 => not found
    libz.so.1 => not found

dpkg -S /usr/lib/libz.so.1显示此文件来自zlib1g,等等。

如果发现apt-get无法下载软件包,请首先从 Live CD 下载几个关键软件包。zlib1glibssl0.9.8这两个软件包您很可能会很早就需要它们。

答案3

/usr/lib坦白地说,包含了共享库,一切除了启动关键软件(这就是进入的软件/lib/和你没有通过包管理器安装的东西(通常/usr/local/lib)。

简而言之,你只是破坏了你的系统。

现在,如果您仍然有/var/cache/apt/archives很多东西,只需运用一些明智的魔法,您也许就能挽救局面。

检查它是否仍然包含以下软件包的档案:

libxapian
libsigc++
apt
libcwidget
libsqlite
libboost-iostreams 

这些软件包包含运行所需的库,/usr/lib如果aptitude您可以在中找到软件包,/var/cache/apt/archives您可以使用手动重新安装它们dpkg -i <packagename,一旦它们全部安装完毕,aptitude 就可以运行。

然后通过运行该命令,aptitude reinstall ~i您将强制重新安装已安装的每个软件包,希望这能恢复您的系统。我无法做出绝对的保证,因为在这种情况下您造成的损害确实相当严重……

答案4

当我做类似的事情时,我很幸运在尝试重启之前就意识到了这一点。此时,您的系统仍然基本正常工作。我的方法是创建一个具有相同版本操作系统的虚拟机,并从中复制丢失的文件。如果您允许 ssh 访问您的虚拟机客户机,则可以从主系统上的终端使用 rsync 来仅提取丢失的文件和链接。就我而言,丢失的文件很少,使用 scp 手动复制是最简单/最安全的,因此以下内容未经测试(!)

sudo rsync -avu user@guestVB:/usr/lib /usr/lib

-a 是存档模式(递归,复制符号链接和属性,包括时间戳、权限等)

如果目标副本较新,则 -u 跳过

-v 是详细的

相关内容