出于各种原因,我玩坏了我的系统………主要出错原因是更改 /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 是按某个关键词进行过滤,可以按照历史进行回退
希望每个人的努力,都不会被辜负。