案例:删除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程序是怎么启动的
例如执行:
实际上 Bash 会调用:
查看 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/ld-linux-x86-64.so.2
结果:
于是 execve() 失败。
内核返回:
即:
No such file or directory
实际上缺的是:
/lib64/ld-linux-x86-64.so.2
而不是:
这是很多管理员第一次遇到时最容易被误导的地方。
三、为什么你的命令能成功
你执行:
/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
绕过了已经丢失的:
流程图:
正常:ln │ ▼/lib64/ld-linux-x86-64.so.2 │ ▼libc.so.6故障:ln │ ▼找不到 /lib64 │ ▼失败修复:/usr/lib64/ld-linux-x86-64.so.2 │ ▼ln │ ▼创建 /lib64 软链接 │ ▼恢复正常
四、为什么修复 /lib 后很多命令立即恢复
因为:
建立后:
动态加载器路径重新可访问:
/lib64/ld-linux-x86-64.so.2 ↓/usr/lib64/ld-linux-x86-64.so.2
此时内核再启动:
lscpmvfindgreprpmsystemctl
都能正常找到:
所以瞬间恢复。