意外取消了 /usr/lib/libcrypt.a 的链接。有办法恢复吗?

意外取消了 /usr/lib/libcrypt.a 的链接。有办法恢复吗?

我一直在升级 OpenSSH 和 OpenSSL,并且不小心删除了文件/usr/lib/libcrypt.a现在 AIX 中的大多数功能都无法使用。备份/恢复是恢复的唯一方法吗?

答案1

从中选择:


对于未随 AIX 提供的软件,请考虑使用第三方二进制包(rpm 或 installp 格式)。与从源代码构建相比,它们更具可复制性,并且更易于管理。有些可以与 OS 包同时安装。

答案2

最终的解决方案是从备份中进行系统还原,因为所有用户实际上都被锁定在系统之外……

无论如何,我必须重申libcrypt.a不是libcrypto.a。前一个文件发生意外意味着系统完全恢复。另一个只是一种烦恼。

答案3

如果会话仍然打开,但命令不起作用,即出现类似错误

bash-4.4# ls
Could not load program ls:
Could not load module /usr/lib/libc.a(shr_64.o).
        Dependent module libcrypt.a(shr_64.o) could not be loaded.
Could not load module libcrypt.a(shr_64.o).
System error: No such file or directory
Could not load module ls.
        Dependent module /usr/lib/libc.a(shr_64.o) could not be loaded.
Could not load module .

然后您可以尝试使用内置的 echo bash 恢复它,例如:

echo -n -e '\x3c\x62\x69\x67\x61\x66\x3e\x0a\x31\x30\x33\x33\x30\x20\x20\x20\x20\x20\x20\x20' > /usr/lib/libcrypt.a
echo -n -e '\x20\x20\x20\x20\x20\x20\x20\x20\x31\x30\x35\x32\x30\x20\x20\x20\x20\x20\x20\x20' >> /usr/lib/libcrypt.a
...

要生成这样的回显文件,您可以使用以下 c 程序(在其他系统上,您可以从 libcrypt.a 获取副本):

#include <stdio.h>

int main(int argc, char** argv)
{

    int c; // a single byte buffer

    FILE* fp = fopen("./libcrypt.a", "rb"); // open the file in 'read' mode

    int i;

    while (!feof(fp)) { // while not end of file

        printf("echo -n -e '");
        for (i = 0; i < 20; i++) {
            c = fgetc(fp); // get a character/byte from the file
            if (!feof(fp)) {
                printf("\\x%02x", c); // and show it in hex format
            }
        }
        printf("' >> /usr/lib/libcrypt.a\n"); // and show it in hex format
    }
    fclose(fp); // close the file
}

相关内容