【Linux】解决误操作libc.so.6导致的问题,补充:升级glibc注意事项

千万不要轻易动/usr/lib64/libc.so.6。

glibc是Linux系统中最底层的api,Linux几乎所有运行库都依赖glibc。/usr/lib64/libc.so.6属于glibc,在centos7中是个软链接。

一旦误删或误操作libc.so.6,或者glibc新版本不兼容等原因,都可能导致很多命令不可用、不能连接系统、系统崩溃、无法开机等问题。

1、若误删libc.so.6,导致很多命令不能使用,没有关机或重启。

若使用rm或者mv误删或改动过/usr/lib64/libc.so.6,最直接的问题就是很多命令都不能用(包括ls,grep,ln)。

报错信息:error while loading shared libraries:libc.so.6 cannot open shared object file:No such file or directory

幸运的是,没有关机或重启,则赶紧恢复软链接,但此时 ln -s 已经不能使用了,可以使用sln命令恢复软链接。

例如:在/usr/lib64目录下,libc.so.6软链接指向libc-2.17.so。删除libc.so.6软链接,立即报错。

使用sln创建新的软链接,但不是libc-2.17.so,结果无效。恢复libc.so.6软链接,才正常使用。

bash 复制代码
# 切换到库文件目录下
cd /usr/lib64

# 恢复原软链接
sln libc-2.17.so libc.so.6
2、若误删libc.so.6, 且关机 或重启**,导致无法开机。**

若使用rm或者mv误删或改动过/usr/lib64/libc.so.6,又很不巧的关机或重启,最终无法开机,此时已经影响了系统开机的程序。可以尝试使用U盘启动盘,开启系统并修复。

本系统是Window系统中VMware虚拟机centos7,可以使用ISO映像文件进入救援模式修复系统。

第一步、使用CD/DVD(ISO映像文件),开机进入救援模式(rescue)。

第二步、在救援模式(rescue)下,修复系统。

在救援模式下,系统数据存放在/mnt/sysimage目录下。

切换到库文件目录(/mnt/sysimage/usr/lib64)下,恢复libc.so.6软链接。

bash 复制代码
# 切换到系统数据的库文件目录下
cd /mnt/sysimage/usr/lib64

# 恢复原软链接(若ln -s不能使用,则使用sln)
ln -s libc-2.17.so libc.so.6

第三步、修复后,重启(reboot),重新登录。

bash 复制代码
# 重启
reboot
3、 若正在编译安装较高版本的glibc,突然系统中断,导致无法开机。

解决方法同2,只是第二步不同。

在救援模式(rescue)下,修复系统。但不是恢复软链接,软链接并没有手动改动过,查看也并无异常。

而是:

① 在系统数据的库文件目录(/mnt/sysimage/usr/lib64)下,删除正在下载的该版本的glibc相关的文件。

bash 复制代码
​# 切换到系统数据的库文件目录下
cd /mnt/sysimage/usr/lib64

# 删除正在下载的glibc相关的文件(删除之前先查看,以防删错)
rm -rf *2.38*

② 在救援模式的根目录(/)下,创建新目录(/media)挂载光盘(ISO映像,/dev/cdrom)。

bash 复制代码
​# 切换到救援模式的根目录下
cd /

# 创建新目录,用于挂载光盘(ISO映像文件)
mkdir media

# 查看/dev目录下所有文件(其中cdrom为ISO映像文件)
ls /dev

# 挂载光盘(ISO映像文件)
mount /dev/cdrom /media

③ 在挂载目录的rpm包目录(/media/Packages)下,使用rpm安装与glibc相关的RPM包。

bash 复制代码
# 切换到ISO映像的rpm包目录下
cd /media/Packages

# 安装glibc相关的RPM包
rpm -ivh --force --root=/mnt/sysimage glibc-*

补充:升级glibc注意事项:

1、升级glibc前,系统备份。若是VMware虚拟机,关机 拍摄快照(保存升级前系统数据)。

2、仔细查看安装说明文档(解压缩后的目录下的INSTALL文件)。

3、配置编译参数时,尽量指定安装路径为/usr。

bash 复制代码
../configure --prexfix=/usr ...其它配置参数

# 例如:
../configure  --prefix=/usr --disable-profile --enable-add-ons --with-binutils=/usr/bin --with-headers=/usr/include --disable-sanity-checks --disable-werror

4、编译安装前,检测系统。

bash 复制代码
make check

若make check报错,查看INSTALL文件,检查相关依赖包是否符合要求。

查看网页上统计的关于glibc的问题:FAQ - glibc wiki (sourceware.org)

相关推荐
乌萨奇也要立志学C++5 分钟前
【Linux】信号量 信号量详解与应用和基于环形队列实现单 / 多生产消费模型
linux·c++
DN金猿7 分钟前
ubuntu在apt安装时出现的弹窗详解
linux·运维·ubuntu
山上三树17 分钟前
Linux C多线程的**所有底层核心原理**
linux
大地的一角24 分钟前
(Linux)进程间通信
linux·运维·服务器
乾元24 分钟前
当奥本海默遇到图灵:AI 开启的网络安全新纪元
服务器·网络·人工智能·网络协议·安全·web安全
weixin_4624462326 分钟前
【原创实践】在 CentOS 上安装 JupyterHub 并配置 R 语言支持 Kernel
linux·r语言·centos
cly132 分钟前
Jenkins重置管理员密码
运维·servlet·jenkins
零基础的修炼33 分钟前
Linux网络---UDP原理
linux·网络·udp
Flash.kkl7 小时前
Linux——进程信号
运维·服务器
苏宸啊9 小时前
Linux权限
linux·运维·服务器