-
背景
接同事求助一台生产主机误删了文件导致几乎所有命令都无法使用,应用无法访问。 -
误删命令
rm -f /* -
现象
除了cd命令可用,几乎所有的命令都报如下错误:
ls
bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory -
问题分析
这个命令会删除根目录下面的所有文件,庆幸的是他的命令中没有r参数,这样目录其实都还存在,删除的只是普通文件和软链接文件,此服务器的操作系统是CentOS7.6,找一台同配置的主机对比看删除了哪些文件,主要删除了下面4个软链接文件:
bin -> usr/bin
lib -> usr/lib
lib64 -> usr/lib64
sbin -> usr/sbin -
解决办法
既然只是删除了软链接,那么重新创建不就好了,其实不然,当使用ln -s创建时同样会报如上的错误,原因是命令会加载被删除软链接的SO文件,这不就进入死循环了嘛,网上主要的建议是进入救援模式恢复文件,但是这台机器是公有云主机,这种处理方式不是很方便,无赖继续查找是否有其它解决办法,毕竟文件都是还存在的只是软链接被删了,现在的问题点是ln需要加载动态库,首先想到的是找到配置文件修改配置跳过动态库,发现vi命令都不能使用,所有这个办法也就行不通。查找资料发现了sln命令,使用此命令可以创建到源文件的符号链接目标文件,它是静态链接的,无需动态链接。
/usr/sbin/sln /usr/lib64 /lib64
ln -s /usr/bin /bin
ln -s /usr/lib /lib
ln -s /usr/sbin /sbin
至此问题解决。 -
建议
生产环境的维护必须指定专人运维,操作必须规范,按文档严格执行,尽量不要使用rm命令,可以使用mv命令把需要删除的文件挪到/tmp下,再定期清理/tmp目录的数据。