美文网首页822思享实验室我用 LinuxLinux
Linux(CentOS)GLIBC出错补救方式

Linux(CentOS)GLIBC出错补救方式

作者: 团不慌 | 来源:发表于2017-12-14 22:49 被阅读39次
    出于各种原因,我玩坏了我的系统.........主要出错原因是更改 /usr/lib64 下的 libc.so.6 等文件引起,具体错误及补救方式附上,希望可以帮到心里失火后来人:
    首先,

    不要随便重新启动!!!

    因为libc出错后很容易导致系统无法启动,关了机会很麻烦。其次也尽量不要关闭正在运行的控制台,因为很多东西还可以补救。

    错误严重的可能连基本命令都没法使用

    # ls
    ls: relocation error: /lib64/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference

    好一些的只有安装的程序无法使用

    # gcc
    relocation error: /lib64/libm.so.6: symbol __get_cpu_features, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

    情况最好的是只错误的更改了libc.so.6的软链接,可以尝试

    # ldconfig (注意是 ‘l‘ 不是 ‘i‘ )
    主要功能:在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib.so),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。

    如果没有效果,可能是因为配置文件被移动或重命名,这时需要重新添加路径:

    # LD_PRELOAD="/lib64/libc-2.18.so" ln -s /lib64/libc-2.18.so /lib64/libc.so.6
    他的主要功能有两部分:临时规定libc路径,重新完成链接,如果需要使用其它操作(ls、mv)可以在使用前添加LD_PRELOAD路径,临时使用功能。

    如果上面两个办法都没有作用,很有可能出错的并不是一个文件或者链接。
    进入/lib64目录,使用 ls -ltr 命令

    # ls -ltr
    -rwxr-xr-x. 1 root root 31461 12月 14 19:41 libutil-2.18.so
    lrwxrwxrwx. 1 root root 12 12月 14 19:41 libutil.so -> libutil.so.1
    -rw-r--r--. 1 root root 47416 12月 14 19:41 libutil.a
    -rwxr-xr-x. 1 root root 824446 12月 14 19:41 ld-2.18.so
    drwxr-xr-x. 2 root root 27 12月 14 19:41 audit
    lrwxrwxrwx. 1 root root 12 12月 14 19:41 libm.so.6 -> libm-2.18.so
    lrwxrwxrwx. 1 root root 13 12月 14 19:41 libdl.so.2 -> libdl-2.18.so
    ... ...
    ... ...
    lrwxrwxrwx. 1 root root 14 12月 14 19:41 libanl.so.1 -> libanl-2.18.so
    lrwxrwxrwx. 1 root root 15 12月 14 19:41 libutil.so.1 -> libutil-2.18.so
    ... ...
    ... ...
    lrwxrwxrwx. 1 root root 21 12月 14 21:46 ld-linux-x86-64.so.2 -> /usr/lib64/ld-2.17.so
    lrwxrwxrwx. 1 root root 23 12月 14 21:51 libc.so.6 -> /usr/lib64/libc-2.17.so

    你可以从这里看到所有的链接版本,务!必!让所有版本保持一致,因为上述两个错误造成的原因之一就是更改过程造成了版本的冲突。
    因为ln无法使用,这里可以使用sln命令,把所有该更改的版本改回来

    # sln /usr/lib64/libc-2.18.so /lib64/libc.so.6
    # sln /usr/lib64/ld-2.18.so /usr/lib64/ld-linux-x86-64.so.2

    一般到这里问题就不大了,如果仍然存在问题,推荐灵活使用历史命令

    # history |grep XXX
    这里|grep XXX 是按某个关键词进行过滤,可以按照历史进行回退

    希望每个人的努力,都不会被辜负。

    相关文章

      网友评论

      • 2b5d7e40c66e:大神好,想问一下在最后ls -ltr之后,怎么判断链接版本是否一致呀😭小白急需解决问题
        团不慌:@幺妹儿_5e9e 后面的版本号最好是配套的

      本文标题:Linux(CentOS)GLIBC出错补救方式

      本文链接:https://www.haomeiwen.com/subject/builwxtx.html