误删libc.so.6拯救小记

文章讲述了在升级glibc版本后,apt、gdb等命令无法使用的问题。作者提供了三种解决方案:设置LD_PRELOAD环境变量临时解决问题(仅限root权限),使用liveCD在虚拟机中修改lib文件并重置,以及重装系统或使用快照恢复。

起因

升级glibc版本后,apt、gdb等不能使用,报version `GLIBC_2.34’ not found,于是在硬盘上搜了一个包含GLIBC_2.34版本的libc.so.6,去替换原来的文件,但是手误,在普通用户下将libc.so.6改为了libc.so.6.bak,于是sudo su cp mv 等一系列依赖于glibc的命令全部不能使用了 呜呜呜~~~

解决方案

网上搜索的解决方案汇集如下:

1、通过设置LD_PRELOAD环境变量,使用指定的libc.so.6

LD_PRELOAD=/lib/libc-2.12.so ln -s /lib/libc-2.12.so /lib/libc.so.6

***其中的文件路径需要根据真实路径修改

但是,该方法仅限当前在root权限下

2、使用liveCD修改文件

我是在vmware里安装的镜像,在虚拟机中指定一个CD镜像(这个镜像版本不用与安装版本一致),保存

重新启动客户机,在vmware启动界面,按ESC进入Boot menu(注意鼠标要在虚拟机里,否则今进不去),选择CD_ROM Drive

进入到ubuntu的安装引导程序,选择try ubuntu,就是启动liveCD的体验版本,而非安装

在命令行中挂载硬盘,我这里是/dev/sdb1

mount /dev/sdb1 /mnt
mv /mnt/lib/libc.so.6.bak /mnt/lib/libc.so.6
sync

修改完毕,重启,问题修复

3、重装或者快照

<think>我们正在讨论的是如何运行 `libc.so.6` 文件。根据之前的讨论,我们知道 `libc.so.6` 是一个特殊的共享库文件,它被设计成可以直接执行以显示版本信息。 引用[3]中提到:直接运行 `libc.so.6` 会输出其版本信息。具体来说,我们可以通过终端执行它(需要提供完整路径)。 步骤: 1. 首先,我们需要知道 `libc.so.6` 在系统中的位置。通常它位于 `/lib`、`/lib64`、`/usr/lib` 或 `/usr/lib64` 等目录下。对于64位系统,常见路径是 `/lib/x86_64-linux-gnu/libc.so.6` 或 `/lib64/libc.so.6`。 2. 在终端中,使用绝对路径运行该文件。注意:由于这是一个共享库文件,直接运行它并不会像普通程序那样执行应用程序逻辑,而是会打印出该库的版本信息。 示例命令: ```bash /lib/x86_64-linux-gnu/libc.so.6 ``` 或者 ```bash /lib64/libc.so.6 ``` 注意:运行它不需要任何参数,直接执行即可。 但是,请注意以下几点: - 如果系统中没有该文件,或者路径不正确,命令会失败。 - 运行共享库文件通常不是常规操作,但 `libc.so.6` 是一个特例,它被编译为可以执行以显示版本信息。 根据引用[2]中的经验,我们也要注意:不要随意替换或删除这个文件,否则可能导致系统崩溃。 因此,运行 `libc.so.6` 的方法就是直接在终端中通过其绝对路径执行。 如果运行后出现错误,比如提示没有权限,可以使用 `sudo` 来运行(但通常不需要,因为该文件一般对所有用户可执行)。如果提示找不到文件,请确认路径是否正确。 另外,如果系统已经因为操作此文件而出现问题(如引用[2]中的情况),则可能需要使用救援模式或使用 `LD_PRELOAD` 技巧来修复。 所以,针对用户的问题“如何执行或运行 libc.so.6 文件”,我们给出如下答案:</think>要运行 `libc.so.6` 文件,请按照以下步骤操作: ### 1. 确认文件位置 首先找到 `libc.so.6` 的完整路径(通常在 `/lib` 或 `/lib64` 目录): ```bash $ ls -l /lib/x86_64-linux-gnu/libc.so.6 lrwxrwxrwx 1 root root 12 Apr 10 2023 /lib/x86_64-linux-gnu/libc.so.6 -> libc-2.31.so ``` ### 2. 直接执行文件 使用绝对路径直接运行(这是 `libc.so.6` 特有的功能): ```bash $ /lib/x86_64-linux-gnu/libc.so.6 ``` 输出示例: ``` GNU C Library (Ubuntu GLIBC 2.31-0ubuntu9.9) stable release version 2.31. Copyright (C) 2020 Free Software Foundation, Inc. ... ``` ### 关键注意事项 1. **必须使用绝对路径** 直接输入 `libc.so.6` 会失败,需完整路径如 `/lib/x86_64-linux-gnu/libc.so.6` 2. **仅显示信息不执行程序** 运行结果只显示版本信息(如图),不会执行其他程序功能 ![libc.so.6 执行输出示例](https://via.placeholder.com/600x200?text=GNU+C+Library+Version+2.31) 3. **不要替换或删除** ⚠️ 误操作会导致系统崩溃(如引用[2]中 `mv/ls` 等命令失效)[^2] 4. **特殊设计** 这是唯一可直接执行的 `.so` 文件(其他库如 `libm.so.6` 运行会段错误) ### 替代查看版本方法 ```bash $ ldd --version ldd (Ubuntu GLIBC 2.31-0ubuntu9.9) 2.31 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值