当前位置:首页>Linux>案例-删除linux根下lib与lib64目录后,命令无法执行处理

案例-删除linux根下lib与lib64目录后,命令无法执行处理

  • 2026-09-07 23:04:05
案例-删除linux根下lib与lib64目录后,命令无法执行处理

案例:删除linux根下lib与lib64目录后,命令无法执行怎么解决?

背景:在运维过程中,运维人员误删除根目录下的/lib和/lib64目录,删除后,系统只能执行内置命令(cd\pwd\echo),其他命令都无法执行。

解决办法:

/usr/lib64/ld-linux-x86-64.so.2 /usr/bin/ln -s /usr/lib /lib /usr/lib64/ld-linux-x86-64.so.2 /usr/bin/ln -s /usr/lib64 /lib64

演示过程:

[root@localhost data]# cd /[root@localhost /]#[root@localhost /]# ll /总用量 32dr-xr-xr-x.   2 root root    6  8月 10  2021 afslrwxrwxrwx.   1 root root    7  8月 10  2021 bin -> usr/bindr-xr-xr-x.   6 root root 4096 11月 10  2025 bootdrwxr-xr-x    5 root root 4096  6月 22 14:08 datadrwxr-xr-x   21 root root 3420  6月 22 09:08 devdrwxr-xr-x.   3 root root   27  1月 14  2025 dockerdrwxr-xr-x. 138 root root 8192  6月 22 09:08 etcdrwxr-xr-x.   8 root root  113  6月 22 14:08 homelrwxrwxrwx.   1 root root    7  8月 10  2021 lib -> usr/liblrwxrwxrwx.   1 root root    9  8月 10  2021 lib64 -> usr/lib64drwxr-xr-x.   2 root root    6  8月 10  2021 mediadrwxr-xr-x.   3 root root   18  4月  1  2024 mntdrwxr-xr-x.   7 root root   79  1月 14  2025 optdrwxr-xr-x.   3 root root   38  4月  1  2024 patroldr-xr-xr-x  326 root root    0  6月 22 09:08 procdr-xr-x---.  28 root root 4096  6月 22 09:11 rootdrwxr-xr-x   50 root root 1300  6月 22 09:45 runlrwxrwxrwx.   1 root root    8  8月 10  2021 sbin -> usr/sbindrwxr-xr-x.   2 root root    6  8月 10  2021 srvdr-xr-xr-x   13 root root    0  6月 22 09:08 sysdrwxrwxrwt.  20 root root 4096  6月 22 13:23 tmpdrwxr-xr-x.  12 root root  144  4月  1  2024 usrdrwxr-xr-x.  21 root root 4096 11月 10  2025 var[root@localhost /]# pwd/[root@localhost /]# rm -rf lib lib64[root@localhost /]# ll /-bash: /usr/bin/ls: 没有那个文件或目录[root@localhost /]# /usr/lib64/ld-linux-x86-64.so.2 /usr/bin/ln -s /usr/lib /lib[root@localhost /]# /usr/lib64/ld-linux-x86-64.so.2 /usr/bin/ln -s /usr/lib64 /lib64[root@localhost /]# ll /总用量 32dr-xr-xr-x.   2 root root    6  8月 10  2021 afslrwxrwxrwx.   1 root root    7  8月 10  2021 bin -> usr/bindr-xr-xr-x.   6 root root 4096 11月 10  2025 bootdrwxr-xr-x    5 root root 4096  6月 22 14:08 datadrwxr-xr-x   21 root root 3420  6月 22 09:08 devdrwxr-xr-x.   3 root root   27  1月 14  2025 dockerdrwxr-xr-x. 138 root root 8192  6月 22 09:08 etcdrwxr-xr-x.   8 root root  113  6月 22 14:08 homelrwxrwxrwx    1 root root    8  6月 22 14:48 lib -> /usr/liblrwxrwxrwx    1 root root   10  6月 22 14:48 lib64 -> /usr/lib64drwxr-xr-x.   2 root root    6  8月 10  2021 mediadrwxr-xr-x.   3 root root   18  4月  1  2024 mntdrwxr-xr-x.   7 root root   79  1月 14  2025 optdrwxr-xr-x.   3 root root   38  4月  1  2024 patroldr-xr-xr-x  326 root root    0  6月 22 09:08 procdr-xr-x---.  28 root root 4096  6月 22 09:11 rootdrwxr-xr-x   50 root root 1300  6月 22 09:45 runlrwxrwxrwx.   1 root root    8  8月 10  2021 sbin -> usr/sbindrwxr-xr-x.   2 root root    6  8月 10  2021 srvdr-xr-xr-x   13 root root    0  6月 22 09:08 sysdrwxrwxrwt.  20 root root 4096  6月 22 13:23 tmpdrwxr-xr-x.  12 root root  144  4月  1  2024 usrdrwxr-xr-x.  21 root root 4096 11月 10  2025 var[root@localhost /]#

原理解释:

不是  命令本身坏了,而是 Linux 在启动 命令时,找不到它依赖的动态链接器(ld-linux)和共享库(glibc),所以内核返回了一个误导性的错误:

-bash: /usr/bin/ls: No such file or directory

实际上文件存在,只是运行不起来。

一、Linux程序是怎么启动的

例如执行:

ls

实际上 Bash 会调用:

execve("/usr/bin/ls")

查看 ls 类型:

file /usr/bin/ls

一般输出:

[root@localhost /]# file /usr/bin/ls/usr/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0a2f3573580b1143e3efe56186d85849ca713ce7, for GNU/Linux 3.2.0, stripped

注意这一行:

interpreter /lib64/ld-linux-x86-64.so.2

说明:

/usr/bin/ls        ↓       需要        ↓/lib64/ld-linux-x86-64.so.2        ↓      再加载libc.so.6libselinux.solibpcre.so...

关系如下:

ls │ ▼ld-linux-x86-64.so.2 │ ├── libc.so.6 ├── libselinux.so └── 其它动态库

二、为什么会报 No such file or directory

你把:/lib64 删除了

原来:

/lib64 -> /usr/lib64

变成:

/lib64 不存在

此时:

/usr/bin/ls

文件仍然在:

ls -l /usr/bin/ls

但内核启动它时:

找 /lib64/ld-linux-x86-64.so.2

结果:

找不到

于是 execve() 失败。

内核返回:

ENOENT

即:

No such file or directory

实际上缺的是:

/lib64/ld-linux-x86-64.so.2

而不是:

/usr/bin/ls

这是很多管理员第一次遇到时最容易被误导的地方。

三、为什么你的命令能成功

你执行:

/usr/lib64/ld-linux-x86-64.so.2 /usr/bin/ln -s /usr/lib /lib

其实等价于:

手工启动动态加载器

正常流程:

内核 ↓/lib64/ld-linux-x86-64.so.2 ↓ln

现在变成:

你 ↓/usr/lib64/ld-linux-x86-64.so.2 ↓ln

绕过了已经丢失的:

/lib64 -> /usr/lib64

流程图:

正常:ln │ ▼/lib64/ld-linux-x86-64.so.2 │ ▼libc.so.6故障:ln │ ▼找不到 /lib64 │ ▼失败修复:/usr/lib64/ld-linux-x86-64.so.2 │ ▼ln │ ▼创建 /lib64 软链接 │ ▼恢复正常

四、为什么修复 /lib 后很多命令立即恢复

因为:

ln -s /usr/lib64 /lib64

建立后:

/lib64   ↓/usr/lib64

动态加载器路径重新可访问:

/lib64/ld-linux-x86-64.so.2   ↓/usr/lib64/ld-linux-x86-64.so.2

此时内核再启动:

lscpmvfindgreprpmsystemctl

都能正常找到:

ld-linuxlibc.so.6

所以瞬间恢复。

最新文章

随机文章