我删除了 libssl.so.10

Jay*_*Jay 7 linux ssl centos yum

我无法 apt-get,我删除了 libssl.so.10

包括 wget 在内的大多数命令都在 libssl.so.10 的末尾给了我一些东西:无法打开共享对象文件:没有这样的文件或目录

有没有一种可靠的方法可以在我仍然有活动连接的情况下备份我的所有数据。

Fal*_*mot 12

最好的办法是libssl.so.10从运行与您相同版本的 openssl 的工作计算机中找到(运行相同版本的不同 centos 机器应该就足够了),然后使用 U 盘将文件复制回原位。


Sco*_*ack 9

为了解决这个问题,您需要替换文件。提到的一种方法是从另一个系统复制库,另一种方法是重新安装提供它的包。

您提到使用,apt-get所以我假设您使用的是 Ubuntu。第一步是准确查看您需要为该文件安装什么包。如果你运行命令`

dpkg -S libssl.so.10
Run Code Online (Sandbox Code Playgroud)

您将从我的 Ubuntu 12.04.2 系统中获得与此类似的输出

libssl1.0.0: /lib/x86_64-linux-gnu/libssl.so.1.0.0
Run Code Online (Sandbox Code Playgroud)

然后跑步dpkg -l | grep libssl1.0.0给了我

ii  libssl1.0.0                          1.0.1-4ubuntu5.10                        SSL shared libraries
Run Code Online (Sandbox Code Playgroud)

这告诉我们我需要去寻找libssl1.0.0版本1.0.1-4ubuntu5.10并安装它。软件包可以从

http://us.archive.ubuntu.com/ubuntu/pool/main/o/openssl/
Run Code Online (Sandbox Code Playgroud)

在该列表中搜索我可以发现我需要libssl1.0.0_1.0.1-4ubuntu5.10_amd64.deb使用您选择的方法下载文件。

下载文件后,您可以通过发出

dpkg -i libssl1.0.0_1.0.1-4ubuntu5.10_amd64.deb 
Run Code Online (Sandbox Code Playgroud)

幸运的是,您现在将成为新 libssl 的全新所有者。


小智 1

您是否真的删除了真实的.so文件,或者仅删除了指向真实.so文件的软链接,因此库创建者可以动态刷新库并重新编译系统中的所有程序。

如果您只删除了软链接,让我们找到它!

使用

find /usr/lib | grep libssl
Run Code Online (Sandbox Code Playgroud)

要找到真正的 .so 文件,如果找到它,请使用以下命令重新创建软链接:

 ln /usr/lib/path/to/real/libssl /lib/libssl.so.10
Run Code Online (Sandbox Code Playgroud)

也许程序(现在:apt-get)尝试访问指定路径中的共享库,该路径编译到程序中,使用以下命令找到您的程序:

which apt-get
Run Code Online (Sandbox Code Playgroud)

(我的结果是:/usr/bin/apt-get)

并在程序中找到“潜在”共享库位置:

strings /path/to/your/program
Run Code Online (Sandbox Code Playgroud)

(我的结果是:

/lib64/ld-linux-x86-64.so.2
libapt-pkg.so.4.12
libutil.so.1
libstdc++.so.6
libm.so.6
libgcc_s.so.1
libc.so.6
__libc_start_main
   install - Install new packages (pkg is libc6 not libc6.deb)
Run Code Online (Sandbox Code Playgroud)

啊哈它静态使用 /lib64/ld-linux-x86-64.so.2

(看起来像我的 apt-get 编译没有 libssl)

我们来尝试一下吧!