亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Linux服務(wù)器升級(jí)GLIBC失敗導(dǎo)致shell命令不可用的情況怎么處理

 更新時(shí)間:2024年11月16日 11:15:13   作者:zomac  
在某些linux系統(tǒng)里面本身自帶的glibc版本過(guò)低,如果你直接更新系統(tǒng)的glibc版本會(huì)導(dǎo)致系統(tǒng)崩潰,shell中的大部分命令(ls,cat,rm,cp,ln,scp,vi,yum等)都執(zhí)行報(bào)錯(cuò),嘗試新的ssh連接時(shí)提示拒絕連接,筆者最近不幸遇到了這個(gè)問(wèn)題

在某些linux系統(tǒng)里面本身自帶的glibc版本過(guò)低,導(dǎo)致rpm無(wú)法安裝。如果你直接更新系統(tǒng)的glibc版本會(huì)導(dǎo)致系統(tǒng)崩潰,就算你編譯安裝好glibc庫(kù)到非系統(tǒng)目錄,但是你不能去設(shè)置環(huán)境變量 和ld.so.conf 這個(gè)2個(gè)文件,你一但設(shè)置指向新版本的glibc庫(kù),系統(tǒng)分分鐘崩潰。更不能把這個(gè)新庫(kù)直接安裝到系統(tǒng)目錄下。筆者最近不幸遇到了這個(gè)問(wèn)題。

glibc介紹

glibc是什么?為什么升級(jí)風(fēng)險(xiǎn)這么高?glibc的作用是什么?

glibc是GNU發(fā)布的libc庫(kù),即c運(yùn)行庫(kù)。glibc是linux系統(tǒng)中最底層的api,幾乎其它任何運(yùn)行庫(kù)都會(huì)依賴于glibc。glibc除了封裝linux操作系統(tǒng)所提供的系統(tǒng)服務(wù)外,它本身也提供了許多其它一些必要功能服務(wù)的實(shí)現(xiàn)。內(nèi)核實(shí)現(xiàn)一個(gè)功能,glibc要花很久才會(huì)用上,由于glibc和內(nèi)核不是一塊開發(fā)的,所以glibc需要去兼容不同版本的內(nèi)核,而內(nèi)核也要去兼容不同版本的 glibc,雙方都背負(fù)了太多的歷史包袱。

簡(jiǎn)單理解其實(shí)和http api接口類似,區(qū)別在于glibc是調(diào)用內(nèi)核對(duì)底層磁盤,內(nèi)存,網(wǎng)卡等的操作,http api則是對(duì)應(yīng)用層app的操作,比如聽(tīng)一首歌,下載一部電影實(shí)則都是在調(diào)用http api接口。

問(wèn)題發(fā)生

試圖通過(guò)編譯安裝升級(jí)Linux服務(wù)器的glibc庫(kù)版本,install失敗以后,shell中的大部分命令(ls,cat,rm,cp,ln,scp,vi,yum等)都執(zhí)行報(bào)錯(cuò),嘗試新的ssh連接時(shí)提示拒絕連接。

命令報(bào)錯(cuò)類似:

# ls
ls: relocation error: /usr/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

或者

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

可補(bǔ)救·操作空間

有ssh客戶端連接著這臺(tái)服務(wù)器沒(méi)有斷開原始的低版本glibc庫(kù)文件還在cd,pwd,export,echo,sln,chmod命令可用,輸入ls+兩次TAB鍵可以提示目錄下所有文件

開始嘗試修復(fù)

步驟1

glibc是Linux系統(tǒng)底層庫(kù),許多shell命令乃至bash本身都依賴這套動(dòng)態(tài)鏈接庫(kù)。
以上問(wèn)題出在/lib64(/usr/lib64)目錄下的軟連接損壞,或連接的so庫(kù)文件版本不統(tǒng)一,或所連接的so庫(kù)文件本身存在問(wèn)題。
解決思路就是把以下軟連接全部恢復(fù)為指向原始版本(低版本)。
前提是先到/lib64目錄下,用ls+兩次TAB鍵的方法確認(rèn)好自己系統(tǒng)下的libc-<x.xx>.so最低版本號(hào)(也就是好用的版本)是哪個(gè)。

lrwxrwxrwx.  1 root root       10 Jul  4 16:55 ld-linux-x86-64.so.2 -> ld-2.17.so
lrwxrwxrwx.  1 root root       14 Jul  4 16:55 libanl.so.1 -> libanl-2.17.so
lrwxrwxrwx.  1 root root       23 Jul  4 16:55 libBrokenLocale.so.1 -> libBrokenLocale-2.17.so
lrwxrwxrwx.  1 root root       15 Jul  4 16:55 libcidn.so.1 -> libcidn-2.17.so
lrwxrwxrwx.  1 root root       16 Jul  4 16:55 libcrypt.so.1 -> libcrypt-2.17.so
lrwxrwxrwx.  1 root root       12 Jul  4 16:55 libc.so.6 -> libc-2.17.so
lrwxrwxrwx.  1 root root       13 Jul  4 16:55 libdl.so.2 -> libdl-2.17.so
lrwxrwxrwx.  1 root root       12 Jul  4 16:55 libm.so.6 -> libm-2.17.so
lrwxrwxrwx.  1 root root       14 Jul  4 16:55 libnsl.so.1 -> libnsl-2.17.so
lrwxrwxrwx.  1 root root       21 Jul  4 16:55 libnss_compat.so.2 -> libnss_compat-2.17.so
lrwxrwxrwx.  1 root root       17 Jul  4 16:55 libnss_db.so.2 -> libnss_db-2.17.so
lrwxrwxrwx.  1 root root       18 Jul  4 16:55 libnss_dns.so.2 -> libnss_dns-2.17.so
lrwxrwxrwx.  1 root root       20 Jul  4 16:55 libnss_files.so.2 -> libnss_files-2.17.so
lrwxrwxrwx.  1 root root       21 Jul  4 16:55 libnss_hesiod.so.2 -> libnss_hesiod-2.17.so
lrwxrwxrwx.  1 root root       22 Jul  4 16:55 libnss_nisplus.so.2 -> libnss_nisplus-2.17.so
lrwxrwxrwx.  1 root root       18 Jul  4 16:55 libnss_nis.so.2 -> libnss_nis-2.17.so
lrwxrwxrwx.  1 root root       18 Jul  4 16:55 libpthread.so.0 -> libpthread-2.17.so
lrwxrwxrwx.  1 root root       17 Jul  4 16:55 libresolv.so.2 -> libresolv-2.17.so
lrwxrwxrwx.  1 root root       13 Jul  4 16:55 librt.so.1 -> librt-2.17.so
lrwxrwxrwx.  1 root root       15 Jul  4 16:55 libutil.so.1 -> libutil-2.17.so

步驟2

由于ln命令已經(jīng)不能使用,可使用sln命令,創(chuàng)建/修復(fù)軟連接。命令格式:sln <被指向的文件> <軟連接名>。假設(shè)需要回退到版本號(hào)XXX,那么只需以下命令就可以修復(fù)。

cd /lib64
sln  ld-XXX.so              ld-linux-x86-64.so.2
sln  libanl-XXX.so          libanl.so.1
sln  libBrokenLocale-XXX.so libBrokenLocale.so.1
sln  libcidn-XXX.so         libcidn.so.1
sln  libcrypt-XXX.so        libcrypt.so.1
sln  libc-XXX.so            libc.so.6
sln  libdl-XXX.so           libdl.so.2
sln  libm-XXX.so            libm.so.6
sln  libnsl-XXX.so          libnsl.so.1
sln  libnss_compat-XXX.so   libnss_compat.so.2
sln  libnss_db-XXX.so       libnss_db.so.2
sln  libnss_dns-XXX.so      libnss_dns.so.2
sln  libnss_files-XXX.so    libnss_files.so.2
sln  libnss_hesiod-XXX.so   libnss_hesiod.so.2
sln  libnss_nisplus-XXX.so  libnss_nisplus.so.2
sln  libnss_nis-XXX.so      libnss_nis.so.2
sln  libpthread-XXX.so      libpthread.so.0
sln  libresolv-XXX.so       libresolv.so.2
sln  librt-XXX.so           librt.so.1
sln  libutil-XXX.so         libutil.so.1

至此,如果沒(méi)有操作錯(cuò)誤,ls等關(guān)鍵命令、包括ssh連接都應(yīng)該已經(jīng)可以正常使用,修復(fù)完成。

但是,由于筆者操作過(guò)程中的失誤(“sln xxx yyy"寫成了"sln yyy xxx”),導(dǎo)致ld-2.17.so原始庫(kù)文件被覆蓋成軟連接文件,所以需要進(jìn)一步的補(bǔ)救。

誤操作后的二次補(bǔ)救

解決思路就是恢復(fù)不小心損壞的ld-2.17.so文件,那么就需要一份可用的ld-2.17.so文件數(shù)據(jù)。由于筆者使用的是服務(wù)器集群,原始文件從其他節(jié)點(diǎn)就可以獲取。如果是單機(jī)服務(wù)器,可能需要借助互聯(lián)網(wǎng)獲取ld-2.17.so原始文件。

目前最大的阻礙是:scp,mount,wget等命令都不能使用,需要考慮如何將獲取到的原始文件放到問(wèn)題服務(wù)器的磁盤上——解決方法是echo命令+重定向輸出文件,具體展開如下:

以文本編輯器(例如使用Windows上的EmEditor)的二進(jìn)制模式打開原始文件,全選復(fù)制出文件的原始字節(jié)內(nèi)容,如下:

7F 45 4C 46 02 01 01 00  00 00 00 00 00 00 00 00  03 00 3E 00 01 00 00 00  20 11 00 00 00 00 00 00 
40 00 00 00 00 00 00 00  48 77 02 00 00 00 00 00  00 00 00 00 40 00 38 00  07 00 40 00 1C 00 1B 00 
01 00 00 00 05 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
A0 18 02 00 00 00 00 00  A0 18 02 00 00 00 00 00  00 00 20 00 00 00 00 00  01 00 00 00 06 00 00 00 
40 1B 02 00 00 00 00 00  40 1B 22 00 00 00 00 00  40 1B 22 00 00 00 00 00  38 14 00 00 00 00 00 00 
10 16 00 00 00 00 00 00  00 00 20 00 00 00 00 00  02 00 00 00 06 00 00 00  00 1E 02 00 00 00 00 00 
......(共5107行,略)......

繼續(xù)編輯文本,替換復(fù)制內(nèi)容中的" “(1個(gè)空格)和” “(2個(gè)空格)替換為”\x",并且在每行首也插入"\x",如下:

\x7F\x45\x4C\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x3E\x00\x01\x00\x00\x00\x20\x11\x00\x00\x00\x00\x00\x00
\x40\x00\x00\x00\x00\x00\x00\x00\x48\x77\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x38\x00\x07\x00\x40\x00\x1C\x00\x1B\x00
\x01\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\xA0\x18\x02\x00\x00\x00\x00\x00\xA0\x18\x02\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00
\x40\x1B\x02\x00\x00\x00\x00\x00\x40\x1B\x22\x00\x00\x00\x00\x00\x40\x1B\x22\x00\x00\x00\x00\x00\x38\x14\x00\x00\x00\x00\x00\x00
\x10\x16\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x00\x1E\x02\x00\x00\x00\x00\x00
......(共5107行,略)......

合并所有行為一行,并去掉所有空格,如下:

\x7F\x45\x4C\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x3E\x00\x01\x00\x00\x00\x20\x11\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x48\x77\x02......(略)......

將編輯后的十六進(jìn)制數(shù)據(jù)與echo命令參數(shù)一起,組成echo -e "編輯后的16進(jìn)制數(shù)據(jù)" > ~/savetheworld.bin的形式,粘貼到連接著問(wèn)題服務(wù)器的ssh終端,執(zhí)行。經(jīng)過(guò)漫長(zhǎng)的等待之后(以小時(shí)記,因?yàn)榛仫@很慢??伸`活利用shell客戶端中類似CommandWindow的功能,在輸入框中輸入命令來(lái)節(jié)省時(shí)間),生成的~/savetheworld.bin文件就作為損壞的ld-2.17.so文件的替代,重新用上文sln修復(fù)軟連接的方法,最終修復(fù)成功。

總結(jié)

你只能用第三方工具把glibc引入你的項(xiàng)目,第一是讓rpm安裝包自帶這個(gè)庫(kù) ,第二種是 使用yum或者其他第三方工具庫(kù)進(jìn)行安裝 ,第三種就是換更新的系統(tǒng) ,新出的系統(tǒng)里面自帶高版本glibc。我建議直接換系統(tǒng) 如果對(duì)系統(tǒng)版本沒(méi)有強(qiáng)制要求的情況。

到此這篇關(guān)于Linux服務(wù)器升級(jí)GLIBC失敗導(dǎo)致shell命令不可用的情況怎么處理的文章就介紹到這了,更多相關(guān)Linux升級(jí)GLIBC失敗導(dǎo)致命令不可用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux中l(wèi)ogrotate日志輪詢操作總結(jié)

    Linux中l(wèi)ogrotate日志輪詢操作總結(jié)

    這篇文章主要給大家介紹了在Linux中l(wèi)ogrotate日志輪詢操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • Linux服務(wù)器刪除文件夾、刪除文件、解壓命令的方法

    Linux服務(wù)器刪除文件夾、刪除文件、解壓命令的方法

    今天小編就為大家分享一篇Linux服務(wù)器刪除文件夾、刪除文件、解壓命令的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Linux系統(tǒng)cpu飆高的排查方法

    Linux系統(tǒng)cpu飆高的排查方法

    本文介紹了如何在Linux系統(tǒng)中通過(guò)檢查CPU使用率、系統(tǒng)負(fù)載、進(jìn)程資源、系統(tǒng)調(diào)用、日志分析以及使用性能工具如perf來(lái)診斷CPU占用過(guò)高的問(wèn)題,幫助用戶定位和解決問(wèn)題,需要的朋友可以參考下
    2024-10-10
  • linux下圖形界面卡死不能操作的問(wèn)題及解決

    linux下圖形界面卡死不能操作的問(wèn)題及解決

    這篇文章主要介紹了linux下圖形界面卡死不能操作的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 值得收藏的27個(gè)Linux文檔編輯命令

    值得收藏的27個(gè)Linux文檔編輯命令

    本文是小編給大家收藏整理的27個(gè)Linux文檔編輯命令,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • linux中vi編輯器的練習(xí)心得

    linux中vi編輯器的練習(xí)心得

    給大家分享一下在linux中練習(xí)vi編輯器的心得以及需要避免的一些坑。
    2017-11-11
  • Ubuntu中安裝MySQL更改默認(rèn)密碼的步驟詳解

    Ubuntu中安裝MySQL更改默認(rèn)密碼的步驟詳解

    本文分步驟給大家介紹Ubuntu中安裝MySQL更改默認(rèn)密碼的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-10-10
  • linux ssh 使用深度解析(key登錄詳解)

    linux ssh 使用深度解析(key登錄詳解)

    這篇文章主要介紹了linux ssh 使用深度解析(key登錄詳解),需要的朋友可以參考下
    2015-07-07
  • Ubuntu16.04.4LTS安裝mininet遇到的問(wèn)題及解決方案

    Ubuntu16.04.4LTS安裝mininet遇到的問(wèn)題及解決方案

    今天小編就為大家分享一篇關(guān)于Ubuntu16.04.4LTS安裝mininet遇到的問(wèn)題及解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • windows安裝apache系統(tǒng)中無(wú)apache2服務(wù)解決方案

    windows安裝apache系統(tǒng)中無(wú)apache2服務(wù)解決方案

    一直都是用WIN開發(fā)PHP,今天有用戶反映SHUGUANG CMS在APACHE+PHP中不能正常運(yùn)行,只好自己機(jī)器配置個(gè)環(huán)境測(cè)試,遇到點(diǎn)小問(wèn)題,搜索相關(guān)資料,終于解決
    2011-09-09

最新評(píng)論