首页 > 系统相关 >linux libc.so.6软链接错误 导致ls等基础命令无法使用,系统无法登录

linux libc.so.6软链接错误 导致ls等基础命令无法使用,系统无法登录

时间:2024-03-17 22:11:06浏览次数:27  
标签:libc so ls so.6 lib64 root 2.25

转:linux libc.so.6软链接错误 导致ls等基础命令无法使用_error: /lib64/libpthread.so.0: symbol __libc_dl_er-CSDN博客

目录

 

一、背景说明

二、处置步骤

1、故障状态

2、通过ls命令tab补全键查看文件列表

3、查看glibc版本

4、重建libc.so.6的软链接

5、ssh远程连接报错

6、检查lib64目录下关于2.25版本的软链接

7、使用sln更新libdl.so.2软链接

8、使用sln更新libBrokenLocale.so.1软链接

三、文件说明

1、libc.so.6文件说明

2、ld-linux-x86-64.so.2文件说明

3、libm.so.6文件说明

4、libdl.so.2文件说明

5、libBrokenLocale.so.1


 

一、背景说明

  有一台服务器曾经执行了glibc版本升级,升级失败后回退到了glibc2.17版本,升级后产生的glibc2.25版本文件保留在服务器上没有删除。在yum安装了lm_sensors模块后,出现服务器ls,grep,find等全部命令无法使用的情况。其原因是安装lm_sensors的时候需要安装依赖lm_sensors-libs动态库,安装完成动态库后会更新动态库的软链接,而/usr/lib64目录下存在升级遗留的glibc2.25相关动态库文件,默认软链接到最新版本,而当前最新版本未正确安装,并不能使用。经过重建libc.so.6等文件的软链接完成了回退。此博文是在虚拟机环境下模拟当时的场景,博文实验环境如下:

  • 操作系统:centos7.6
  • glibc工作版本:2.17

处理ls、grep等基础命令无法使用的情况,请注意,重要的事情说三遍:

  1. 务必保持当前ssh连接不断开,不要重启服务器!
  2. 务必保持当前ssh连接不断开,不要重启服务器!
  3. 务必保持当前ssh连接不断开,不要重启服务器!

二、处置步骤

1、故障状态

  此时输入ls,find,vim等基础命令全部会报错“/lib64/libpthread.so.0: symbol __libc_dl_error_tsd, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference”
在这里插入图片描述

 

2、通过ls命令tab补全键查看文件列表

  在尝试ls命令的时候无意使用tab键发现可以获取文件列表,看到了ld-2.25.so文件才想起来这服务器曾经尝试升级glibc版本,当时失败回退了。
在这里插入图片描述

 

3、查看glibc版本

  执行ldd --version命令发现可以执行,glibc版本还是2.17,实际上测试一些lib库的软链接错误链接到了2.25版本。
在这里插入图片描述

 

4、重建libc.so.6的软链接

  使用ln -s命令创建软链接需要依赖libc.so.6,但是如果libc.so.6存在又无法创建软链接,删除后没有libc.so.6了,ln命令执行又会报错。
在这里插入图片描述

 


  幸运的时还有sln这个命令。

[root@s146 lib64]# sln /usr/lib64/libc-2.17.so /lib64/libc.so.6

  当然仅仅这一个软链接是不够的。

[root@s146 lib64]# sln /usr/lib64/ld-2.17.so /usr/lib64/ld-linux-x86-64.so.2
[root@s146 lib64]# sln /usr/lib64/libm-2.17.so /usr/lib64/libm.so.6

这三个软链接更新后,ls等基础命令不再报错。总算是松了一口气。
[root@s146 lib64]# which ls
alias ls=‘ls --color=auto’
/usr/bin/ls
[root@s146 lib64]# ls -h |grep “2.25”
ld-2.25.so
libBrokenLocale-2.25.so
libc-2.25.so
libdl-2.25.so
libm-2.25.a
libm-2.25.so

5、ssh远程连接报错

  尝试新建ssh连接,此时ssh连接失败,包括即使已经配置了免密的服务器登录尝试也是失败的。万幸的是我此时原来的连接还在,没有断开。

(base) [root@s186 tmp]# ssh 192.168.0.146
Authentication failed.
(base) [root@s186 tmp]# ssh -v 192.168.0.146
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
debug1: Reading configuration data /root/.ssh/config
debug1: /root/.ssh/config line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: Connecting to 192.168.0.146 [192.168.0.146] port 22.
debug1: Connection established.

No Kerberos credentials available (default cache: KEYRING:persistent:0)

debug1: Unspecified GSS failure. Minor code may provide more information
No Kerberos credentials available (default cache: KEYRING:persistent:0)

debug1: Next authentication method: publickey
debug1: Offering RSA public key: /root/.ssh/id_rsa
Authentication failed.

6、检查lib64目录下关于2.25版本的软链接

在这里插入图片描述

 

[root@s146 lib64]# cd /lib64/
[root@s146 lib64]# ll -h |grep “2.25”
-rwxr-xr-x 1 root root 847K May 25 10:27 ld-2.25.so
-rwxr-xr-x 1 root root 20K May 25 10:27 libBrokenLocale-2.25.so
lrwxrwxrwx 1 root root 34 May 25 10:38 libBrokenLocale.so.1 -> /usr/lib64/libBrokenLocale-2.25.so
-rwxr-xr-x 1 root root 9.8M May 25 10:27 libc-2.25.so
-rwxr-xr-x 1 root root 96K May 25 10:27 libdl-2.25.so
lrwxrwxrwx 1 root root 24 May 25 10:38 libdl.so.2 -> /usr/lib64/libdl-2.25.so
-rw-r–r-- 1 root root 7.6M May 25 10:27 libm-2.25.a
-rwxr-xr-x 1 root root 4.1M May 25 10:27 libm-2.25.so

7、使用sln更新libdl.so.2软链接

  更新了libdl.so.2软链接后,ssh远程就正常了。

(base) [root@s186 tmp]# ssh 192.168.0.146
[email protected]’s password:
Last login: Wed May 25 14:46:53 2022 from 192.168.0.186

8、使用sln更新libBrokenLocale.so.1软链接

  此时虽然不知道libBrokenLocale.so.1是否与ssh等有关系,为了安全起见也一并更新回退

[root@s146 ~]# sln /usr/lib64/libBrokenLocale-2.17.so [root@s146 lib64]# ll -h |grep “2.25”
-rwxr-xr-x 1 root root 847K May 25 10:27 ld-2.25.so
-rwxr-xr-x 1 root root 20K May 25 10:27 libBrokenLocale-2.25.so
-rwxr-xr-x 1 root root 9.8M May 25 10:27 libc-2.25.so
-rwxr-xr-x 1 root root 96K May 25 10:27 libdl-2.25.so
-rw-r–r-- 1 root root 7.6M May 25 10:27 libm-2.25.a
-rwxr-xr-x 1 root root 4.1M May 25 10:27 libm-2.25.so

三、文件说明

  如下5个文件都是glibc的动态库,此处只是根据网上查找到的信息简单记录。每个动态库都有它的用途,这里没有深究。目前实验结果来看,libc.so.6、ld-linux-x86-64.so.2、libm.so.6这三个和系统基础命令息息相关。libdl.so.2库是ssh远程必不可少的库。

1、libc.so.6文件说明

  libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GUN C 函数库。libc.so.6 属于 glibc,主要包含如下功能:
(1)string,字符串处理
(2)signal,信号处理
(3)dlfcn,管理共享库的动态加载
(4)direct,文件目录操作
(5)elf,共享库的动态加载器,也即interpreter
(6)iconv,不同字符集的编码转换
(7)inet,socket接口的实现
(8)intl,国际化,也即gettext的实现
(9)io
(10)linux threads
(11)locale,本地化
(12)login,虚拟终端设备的管理,及系统的安全访问
(13)malloc,动态内存的分配与管理
(14)nis
(15)stdlib,其它基本功能

2、ld-linux-x86-64.so.2文件说明

  ld-linux.so.2是linux下的动态库加载器/链接器。ld-linux.so的工作是在程序运行前把程序需要的so找到并进行连接。很多现代应用都是通过动态编译链接的,当一个 需要动态链接 的应用被操作系统加载时,系统必须要定位然后加载它所需要的所有动态库文件。在Linux环境下,这项工作是由ld-linux.so.2来负责完成的。

[root@s146 lib64]# ldd which pwd
linux-vdso.so.1 => (0x00007ffd2b145000)
libc.so.6 => /lib64/libc.so.6 (0x00007f1587749000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1587b17000)

3、libm.so.6文件说明

  libm.so是linux环境下的科学计算动态库。

4、libdl.so.2文件说明

  在linux中是支持在程序运行时才进行so库的连接的,函数包括dlopen,dlclose,dlsym,dlerror.这几个函数的实现库就是libdl.so,所以libdl.so的工作是在程序运行时找到指定的so并连接。libdl.so里面有4个函数:

  • dlopen//打开一个动态库
  • dlsym//在打开的动态库里找一个函数
  • dlclose//关闭动态库
  • dlerror//返回错误

5、libBrokenLocale.so.1

  修复例程以使具有中断的区域设置功能的应用程序运行。通过预加载覆盖应用程序默认值。(需要使用LD\U预加载。)很少使用。

标签:libc,so,ls,so.6,lib64,root,2.25
From: https://www.cnblogs.com/schyzhkj/p/18079301

相关文章

  • 安装install.package("devtools")时报错 提示systemfonts,textshaping, ragg, gert依赖
    devtools可用conda,R的install.packages()以及wget等方式安装,这里我采用install.packages()安装,碰到systemfonts,textshaping,ragg,gert几个依赖包的安装错误。install.package("devtools")错误形式与解决,参考:https://www.cnblogs.com/shuaihe/p/17823059.html1.systemfonts解......
  • 2.Datax数据同步之Windows下,mysql和sqlserver之间的自定义sql文数据同步
    目录前言步骤操作大纲步骤明细mysql至sqlServersqlServer至mysql前言上一篇文章实现了不同的mysql数据库之间的数据同步,在此基础上本篇将实现mysql和sqlserver之间的自定义sql文数据同步准备工作:JDK(1.8以上,推荐1.8)Python(2或3都可以)ApacheMaven3.x(Co......
  • P2746 [USACO5.3] 校园网Network of Schools 题解
    题目链接:校园网NetworkofSchools这个题得翻译下题目意思才知道在干嘛,题目一开始表明了这个是一个有向图,因为边是单向的。其次关于第一个问题:基于一个事实,如果有\(x\rightarrowy\rightarrowz\),那么只需要\(x\)接受协议,它所在的\(scc\)强连通分量上的点一定都能不需要......
  • SqlServer查数据表的记录数
    查每一张表的记录数(按记录数排序):SELECTt.NAMEAS表名,SUM(p.rows)AS记录数FROMsys.tablestINNERJOINsys.indexesiONt.OBJECT_ID=i.object_idINNERJOINsys.partitionspONi.object_id=p.OBJECT_IDANDi.index_id=p.index_idWHEREt.NAMENOTLIKE'dt......
  • 3044: 【数据结构】【栈】true or false
    题目描述帮助小明解决逻辑运算输入一个字符串(串长小于255)表达逻辑式子,内只包含true,false,or,and,not和空格,(不包含括号和xor),优先级同pascal.(not->and->or),同级左边先算,如果逻辑式有误则输出error。输出运算结果:true或者false,如果无法得到结果的输出error样例输......
  • RISmed软件包的使用(碰到EUtilsGet()步骤报错,暂未解决)
    教程1:https://www.jianshu.com/p/1544070a95e1教程2:https://www.jingege.wang/2020/06/03/pubmed数据挖掘:rismed包/问题网址:https://githubhelp.com/skoval/RISmed我也碰到同样问题未解决:运行代码记录如下:library(RISmed)library("XML")library("methods")##限定下检索......
  • Python疑难杂症(13)---Python的几个比较难理解的内置函数,包括range、zip、map、lambda
    1、range()range(start=0, stop[, step=1])构造器的参数必须为整数(可以是内置的 int 或任何实现了 __index__() 特殊方法的对象)。生成一个start到stop的数组,左闭右开, 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。list(range(6))[0,1,2,3......
  • Best AI Lead Generation Software Tools 2024
    Fromhttps://www.mapleadscraper.com/blog/best-ai-lead-generation-toolsExtractEmailsFromGoogleMapsWhyAILeadGenerationSoftwareisEssentialforYourBusinessMapLeadScraperhigh-qualityleadsiscrucialforbusinessestoclosedeals,increasereve......
  • 计算机毕业设计项目基于大数据和ALS算法实现的房源智能推荐系统
    概要  目前,现有的房源信息不够透明化大多中介混淆市场,内含不为人知的商业链。有经验的租客们会通过周边房价走势和走访周边房源对比调研、筛选适合自己的房源。同时,对于用户工作地点需求和各种人群类型如大学生群体,年轻小资,或者中年人,他们希望居住的环境要求各不相同各......
  • [.NET项目实战] Elsa开源工作流组件应用(一): Elsa工作流简介
    Elsa工作流简介工作流是什么?引用维基百科中对工作流的解释:是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算Elsa是一个功能强大的工作流库,支持在任......