【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++忠实粉丝25 分钟前
Linux环境基础开发工具使用(2)
linux·运维·服务器
康熙38bdc1 小时前
Linux 环境变量
linux·运维·服务器
存储服务专家StorageExpert1 小时前
DELL SC compellent存储的四种访问方式
运维·服务器·存储维护·emc存储
hakesashou2 小时前
python如何比较字符串
linux·开发语言·python
Ljubim.te2 小时前
Linux基于CentOS学习【进程状态】【进程优先级】【调度与切换】【进程挂起】【进程饥饿】
linux·学习·centos
cooldream20092 小时前
Linux性能调优技巧
linux
大G哥2 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
长天一色2 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
醉颜凉2 小时前
银河麒麟桌面操作系统修改默认Shell为Bash
运维·服务器·开发语言·bash·kylin·国产化·银河麒麟操作系统
QMCY_jason3 小时前
Ubuntu 安装RUST
linux·ubuntu·rust