当我安装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 下载几个关键软件包。zlib1g
和libssl0.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 是详细的