問題解決:Centos誤將/lib64更改爲lib64.bak

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把重要的配置文件輸出到屏幕複製粘貼出來吧,然後嘗試光盤修復

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章