向原文致敬:记一次Linux误删文件 - 墨天轮

  1. 背景
    接同事求助一台生产主机误删了文件导致几乎所有命令都无法使用,应用无法访问。

  2. 误删命令
    rm -f /*

  3. 现象
    除了cd命令可用,几乎所有的命令都报如下错误:
    ls
    bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

  4. 问题分析
    这个命令会删除根目录下面的所有文件,庆幸的是他的命令中没有r参数,这样目录其实都还存在,删除的只是普通文件和软链接文件,此服务器的操作系统是CentOS7.6,找一台同配置的主机对比看删除了哪些文件,主要删除了下面4个软链接文件:
    bin -> usr/bin
    lib -> usr/lib
    lib64 -> usr/lib64
    sbin -> usr/sbin

  5. 解决办法
    既然只是删除了软链接,那么重新创建不就好了,其实不然,当使用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
    至此问题解决。

  6. 建议
    生产环境的维护必须指定专人运维,操作必须规范,按文档严格执行,尽量不要使用rm命令,可以使用mv命令把需要删除的文件挪到/tmp下,再定期清理/tmp目录的数据。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐