无法 sudo mv libtinfo.so.5.bak libtinfo.so.5

无法 sudo mv libtinfo.so.5.bak libtinfo.so.5

一小时前,我mv /lib64/libtinfo.so.5 /lib64/libtinfo.so.5.bak,然后其他人无法ssh服务器。他们的错误消息如下所示:

-bash:加载共享库时出错:libtinfo.so.5:无法打开共享对象文件:没有这样的文件或目录与 10.60.242.30 的连接已关闭。

我想把这个文件改回来sudo mv /lib64/libtinfo.so.5.bak /lib64/libtinfo.so.5

bash:加载共享库时出错:libtinfo.so.5:无法打开共享对象文件:没有这样的文件或目录

这似乎是一个僵局,sudo会使用libtinfo.so.5.

我已经尝试过LD_PRELOAD=./libtinfo.so.5.bak sudo mv /lib64/libtinfo.so.5.bak /lib64/libtinfo.so.5,它不起作用。

有人可以帮助我吗?

答案1

失败mv是因为sudo看到参数列表并决定需要 shell 来解释它。其他简单的命令可能会起作用(例如,在快速检查中,我sh在执行时没有看到中间内容sudo visudo)。如果是这样,您可以编写并编译一个简单的程序并使用执行sudo,例如,

#include <stdlib.h>
int main(void)
{
    rename("/lib64/tinfo.5.bak", "/lib64/tinfo.5" );
    return 0;
}

另一种可能性是一个脚本,例如 Perl 中的脚本,它似乎不依赖于 ncurses:

$ ldd `path perl`
        linux-vdso.so.1 =>  (0x00007ffd0f9f6000)
        libperl.so.5.14 => /usr/lib/libperl.so.5.14 (0x00007fcfc33ba000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fcfc31b6000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcfc2f34000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcfc2d18000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcfc298b000)
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fcfc2754000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fcfc373c000)

如果您可以物理访问服务器,则不需要像这样的解决方法必要的(因为您可以加载恢复 DVD 并离线修复服务器)。如果您不这样做,并且只有 ssh 访问权限(例如,在 Amazon AWS 中),则必须使用类似的解决方法。

进一步阅读:

相关内容