删除/lib64/libc.so.6软连接后Linux系统崩溃

在执行realm程序时遇到GLIBC_2.18版本缺失的问题,误删/lib64/libc.so.6导致系统命令无法执行。解决方法包括使用sln或ln-s命令恢复libc.so.6及相关库的软链接,以及通过设置LD_PRELOAD环境变量临时恢复系统功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除/lib64/libc.so.6软连接后Linux系统崩溃

适用于:

Linux系统修改glibc系统崩溃,但还未退出ssh或终端
退出终端后就只能挂盘处理了。


问题描述

执行realm程序时,报错:/lib64/libc.so.6: version 'GLIBC_2.18' not found (required by realm)

image.png
然后执行了删除/lib64/libc.so.6,系统就无法执行任何命令了.

# 删除/lib64/libc.so.6
rm -rf /lib64/libc.so.6

排查步骤

# 进入/lib64目录
cd /lib64

# 查看软连接是否正确
ls -ltr

可以从这里看到所有的链接版本
image.png


解决办法

https://blog.youkuaiyun.com/u010549608/article/details/126281354
libc是最底层的解释器,干掉libc,啥都运行不了了.
需要让所有版本保持一致,可以用sln命令,把所有该更改的版本改回来:

## sln相当于ln -s
sln [源文件] [目标文件]
ln -s 源文件 目标文件

注意redhat系统没有sln命令

https://deepinout.com/linux-cmd/linux-folder-file-cmd/linux-cmd-sln.html

# RHEL查看Glibc的详细版本信息
/usr/lib64/libc.so.6

# Debian和Ubuntu查看Glibc的详细版本信息
/lib/x86_64-linux-gnu/libc.so.6

在这里插入图片描述

# 临时指定LD_PRELOAD变量
## 指定LD_PRELOAD变量后系统命令都可以执行了
## Centos7的libc.so默认版本是2.17
# export LD_PRELOAD="/usr/lib64/libpthread.so.0"
export LD_PRELOAD="/usr/lib64/libc-2.17.so"

# 创建回/lib64/libc.so.6连接,系统就恢复运行了
## ln -s 源文件 目标文件
## -s 软连接
## -f 强制创建(覆盖原有链接文件)
## 恢复libc.so.6---重要
ln -sf /lib64/libc-2.17.so /lib64/libc.so.6

# 恢复ld-linux-x86-64.so.2
ln -sf /lib64/ld-2.17.so /lib64/ld-linux-x86-64.so.2

# 恢复libm.so.6
ln -sf /lib64/libm-2.17.so /lib64/libm.so.6

# 恢复/lib64/libdl.so.2
ln -sf /lib64/libdl-2.17.so /lib64/libdl.so.2
### 关于 GLIBC_2.34 找不到的问题分析 当遇到 `error 'GLIBC_2.34' not found` 的情况时,通常是因为当前系统的 GNU C Library (glibc) 版本低于所需版本。此错误可能发生在运行某些依赖较新 glibc 版本的应用程序或工具时。 #### 可能的原因 1. 当前操作系统自带的 glibc 版本较低,无法满足应用程序的需求[^4]。 2. 如果 `/lib64/libc.so.6` 文件被误删或者损坏,则可能导致整个系统崩溃甚至无法正常启动[^2]。 #### 解决方案 ##### 方法一:升级现有 glibc 到最新版 可以通过重新编译安装更高版本的 glibc 来解决问题。然而需要注意的是,在尝试更新之前备份旧版本是非常重要的操作之一,因为如果过程失败可能会导致系统不可用状态发生风险增加的情况存在不确定性因素影响较大因此建议谨慎行事并遵循以下步骤执行: ```bash sudo apt-get update && sudo apt-get upgrade -y wget https://ftp.gnu.org/gnu/glibc/glibc-2.34.tar.gz tar zxvf glibc-2.34.tar.gz cd glibc-2.34 mkdir build cd build/ ../configure --prefix=/usr make -j$(nproc) sudo make install ``` 上述命令会下载、解压、配置以及构建最新的 glibc 库,并将其安装到系统目录下替换掉原来的版本[^1]。 注意:对于生产环境中的服务器来说直接覆盖原生发行版提供的件包并不是最佳实践方式;推荐考虑使用容器化技术如 Docker 或者 chroot 环境来隔离不同应用所需的特定 runtime environments 需求从而避免冲突问题出现的可能性降低维护成本提高灵活性增强安全性等方面表现更优的选择方案可以参考链接中提到的相关文章进一步了解具体实现细节部分[^3]。 ##### 方法二:创建连接指向兼容版本 另一种快速修复办法就是找到一个已经包含了所缺失符号定义的新一些但又不至于太新的共享对象文件然后建立相应名称路径下的符号链接过去即可完成临时性的应急处理措施如下所示: 假设我们有一个较高版本号但是还不至于完全不匹配目标平台架构特性的动态链接库位于某个自定义位置比如 `$HOME/libs/libc-2.34.so` ,那么就可以这样做 : ```bash sudo ln -sf $HOME/libs/libc-2.34.so /lib/x86_64-linux-gnu/libc.so.6 ``` 这样做的好处是不会轻易破坏原有的基础设置结构同时也能够迅速恢复基本功能正常使用状况达到目的同时保留回退余地以便后续调整优化之需. #### 注意事项 无论采取哪种方式进行修正都需要提前做好充分准备包括但不限于数据备份工作以防万一出现问题时候有挽回手段可用另外也要仔细阅读官方文档确认每一步骤都按照指导手册严格执行减少人为失误带来的额外麻烦最后再次强调未经测试验证过的更改动作切勿贸然应用于正式线上业务场景以免造成难以预料后果损害企业利益形象等问题的发生几率提升至最低水平线以内才是明智之举[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值