Linux誤刪C基本運行庫libc.so.6急救方法

來源:互聯網
上載者:User

標籤:

首先普及一下關於libc.so.6的基本常識:

libc.so.6是glibc的軟連結

ll  /lib64/libc.so.6
lrwxrwxrwx 1 root root 11 Aug 27 2014 /lib64/libc.so.6 -> libc-2.5.so

glibc是gnu發布的libc庫,即c運行庫。glibc是linux系統中最底層的api,幾乎其它任何運行庫都會依賴於glibc,所以說絕大部分操作命令都缺少不了它


如何誤刪了/lib64/libc.so.6,大部分系統命令將無法執行,ssh登入系統也不成功,只會無休止的提示以下錯誤:
error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

這種情況下,大部分命令已經不能執行了,只能執行例如cd,echo等小部分命令,而實用的cp,mv則不可用
經過各種百度,得到解決方案(而此種方法的前提是ssh還沒斷開,如果ssh已斷開則無法重新串連上,得使用另外的方法用光碟片重啟進入急救模式):
在同版本系統上查看/lib64/libc.so.6得知是屬於libc-2.5.so的軟連結,因此,libc-2.5.so檔案肯定還是存在的,誤刪的只是軟連結而已,但此時想用ln命令重建立立軟連結是失敗的,但是可以這樣強制設定變數就能執行成功

LD_PRELOAD=/lib64/libc-2.5.so  ln -s /lib64/libc-2.5.so /lib64/libc.so.6

注意的是,這整條命令要在同一行執行,不能分兩行,否則就無效了

glibc是一個非常底層的庫,bash也依賴她,所以,如果把這個庫幹掉了,基本上啥事都幹不了了,但是為啥前面設定一下LD_PRELOAD變數 就可以了呢?是這樣的,LD_PRELOAD可以影響程式的運行時的連結(Runtime linker), 它允許你定義在程式運行前優先載入的動態連結程式庫,之前把libc.so.6這個軟串連給幹掉了,所以系統找不到這個庫了,但是通過LD_PRELOAD設定一下glibc這個庫的真真實位址就可以解決這個問題了

 

通過前面設定一下LD_PRELOAD變數,後面也是可以執行其它例如cp,mv等命令的

例如我一開始不是誤刪,只是把libc.so.6改名了,從而也導致了上面的錯誤,於是就可以按照下面方法恢複libc.so.6

LD_PRELOAD=/lib64/libc-2.5.so mv /lib64/libc.so.6.bak /lib64/libc.so.6

 

Linux誤刪C基本運行庫libc.so.6急救方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.