CentOS系统中,lib目录下的库对系统的正常运行起着非常关键的作用。一旦误操作将导致系统瘫痪。

/lib64被重命名
故障表现
由于操作失误,把/usr/lib64重命名成了/usr/lib64.bak,结果发现,在运行所有外置命令的时候报错:

mv命令无法使用

-bash: /bin/mv: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

cp命令无法使用

-bash: /bin/cp: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

ls命令无法使用

-bash: /bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

ssh命令无法使用

-bash: /usr/bin/ssh: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
想使用mv把文件重命名回来已经不行了,就连重新ssh远程都远程不了。

修复方法
方法一
光盘修复,安装glibc,如果机器允许重启的话

方法二
系统一般情况下会设置LD_LIBRARY_PATH, LD_PRELOAD这两个环境变量,来改变应用程序所调用库文件的路径。这两个环境变量只对应用程序有效,可能会对shell命令不起作用

因为默认的库文件路径/usr/lib64被改成了/usr/lib64.bak,因此尝试:

export LD_LIBRARY_PATH=/usr/lib64.bak
export LD_PRELOAD=/usr/lib64.bak
cp /usr/lib64.bak /usr/lib64
方法三
在一个正常的操作系统上<我们可以发现/lib64/ld-linux-x86-64.so.2只是个软链,真实文件是/usr/lib64/ld-2.17.so,而且这个文件本身并不是库文件,可以简单的认为他是库文件的管理程序。

ld-linux-x86-64.so.2是操作系统的核心,并不受LD_LIBRARY_PATH环境变量的影响。如果想改变其调用方式,可以查看man文档

根据使用帮助,我们手动指定库路径进行调用cp命令
/lib64/ld-linux-x86-64.so.2 --library-path /lib64.bak /bin/cp /lib64.bak /lib64 -afr
误删除/lib64/ld-linux-x86-64.so.2
解决方法同上,删除的是软连接文件,链接回来即可

/lib64/ld-2.17.so --library-path /lib64/ld-2.17.so /bin/ln -sv /lib64/ld-2.17.so /lib64/ld-linux-x86-64.so.2
/lib64被误删
这个是致命的故障,趁没有关闭ssh连接,赶紧使用内置命令while read把重要的配置文件输出到屏幕复制粘贴出来吧,然后尝试光盘修复