我如何恢复 libz.so.1?

我如何恢复 libz.so.1?

在尝试修复 Python 的一个问题时,我意外地libz.so.1通过符号链接毁掉了我的二进制文件。现在很多东西,包括都apt-get无法工作了。损坏仅限于 libz.so.1(指向libz.so.1.2.8),所以我应该能够通过找到 x86_64 二进制文件并将其放回原位来修复它,但我只能找到源代码,我无法编译它。我在 Xenial 上。我在哪里可以找到已编译的二进制文件?

答案1

解决此问题的正确方法是手动下载所需的软件包,然后将其安装或提取到系统中。当然,您可以从 LiveCD/LiveUSB 执行此类操作。

如何解决此类问题:

  1. 访问packages.ubuntu.com
  2. 输入遗漏的文件名搜索包裹内容(在我们的例子中libz.so.1.2.8)指定目标分配xenial在我们的例子中)和 CPU建筑学amd64):

    搜索选项

  3. 点击搜索,它会显示结果页面

    搜索结果

  4. 然后点击zlib1g关联

  5. 下载点击部分amd64

    下载 <code>zlib1g</code>

  6. 在打开的页面上选择最近的镜像,(复制链接或通过浏览器下载 deb 文件)

    镜子

    wget http://mirrors.kernel.org/ubuntu/pool/main/z/zlib/zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb
    
  7. 尝试将下载的包安装到系统:

    sudo dpkg -i zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb
    

    如果它不起作用 - 直接将其提取到文件系统:

    sudo dpkg -x zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb /
    
  8. 然后使用 APT 重新安装它:

    sudo apt-get install --reinstall zlib1g
    

答案2

扩展至N0rbert 的指示,如果你在现场会话中执行此操作,确保你将软件包解压到损坏的 Ubuntu 安装的根目录,而不是实时会话本身的根源(这不会解决任何问题并且会在重启时消失)。

从实时会话的角度来看,损坏的安装将安装在类似/media/ubuntu/ae7r0-9s90s-ejf8d-d9d9f(不是实际值,而是一些类似的长哈希值)的位置。您可能必须在文件资源管理器中浏览它才能显示文件夹。

因此,在实时会话中,您可以使用以下命令进行提取:

sudo dpkg -x zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb /media/ubuntu/ae7r0-9s90s-ejf8d-d9d9f/

一旦丢失的内容libz.so.1恢复/media/ubuntu/ae7r0-9s90s-ejf8d-d9d9f/lib/x86_64-linux-gnu/,您应该能够重新启动,sudo apt-get install --reinstall zlib1g在 tty1 中运行,然后重新启动进入工作系统。

答案3

好吧,因为我把原始文件弄丢了,所以我apt甚至无法解压或使用rpmalien。我找到了一个 RPM 版本,但我无法得到二进制文件,因为所有依赖压缩的工具都不起作用。所以我将 RPM 上传到转换并将其转换为 tar、下载、提取并放回其所属位置。

哎呀,我学到了教训,要小心那些共享库!

相关内容