在尝试修复 Python 的一个问题时,我意外地libz.so.1
通过符号链接毁掉了我的二进制文件。现在很多东西,包括都apt-get
无法工作了。损坏仅限于 libz.so.1(指向libz.so.1.2.8
),所以我应该能够通过找到 x86_64 二进制文件并将其放回原位来修复它,但我只能找到源代码,我无法编译它。我在 Xenial 上。我在哪里可以找到已编译的二进制文件?
答案1
解决此问题的正确方法是手动下载所需的软件包,然后将其安装或提取到系统中。当然,您可以从 LiveCD/LiveUSB 执行此类操作。
如何解决此类问题:
- 访问packages.ubuntu.com。
输入遗漏的文件名搜索包裹内容(在我们的例子中
libz.so.1.2.8
)指定目标分配(xenial
在我们的例子中)和 CPU建筑学(amd64
):点击搜索,它会显示结果页面:
然后点击
zlib1g
关联在下载点击部分
amd64
:在打开的页面上选择最近的镜像,(复制链接或通过浏览器下载 deb 文件)
wget http://mirrors.kernel.org/ubuntu/pool/main/z/zlib/zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb
尝试将下载的包安装到系统:
sudo dpkg -i zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb
如果它不起作用 - 直接将其提取到文件系统:
sudo dpkg -x zlib1g_1.2.8.dfsg-2ubuntu4_amd64.deb /
然后使用 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
甚至无法解压或使用rpm
或alien
。我找到了一个 RPM 版本,但我无法得到二进制文件,因为所有依赖压缩的工具都不起作用。所以我将 RPM 上传到转换并将其转换为 tar、下载、提取并放回其所属位置。
哎呀,我学到了教训,要小心那些共享库!