写了个Bug,误执行rm -fr /*,瞬间背后一凉( 二 )


还好这次是比较幸运 , 因为在执行脚本的时候 , 第一时间发现不对劲 , 立马掐断了还在运行的脚本 , 所以并非 Linux 所有文件都被删除了 。
只要我掐的快 , rm -fr /* 就干不死我 。 虽然 ls 被删了 , 但所幸发现 cd 命令还能用 。
只要 cd 用的好 , 它也能用出的 ls 效果 。 很简单 , 只需 cd + Tab 键就会自动出现指定目录下的所有文件 。
写了个Bug,误执行rm -fr /*,瞬间背后一凉
本文插图

有了 cd+Tab 键 , 我们就可以查看每个目录下的文件 , 于是就可以一步一步来确认哪些系统文件被删了 。
通过一番的确认和对比后 , 发现主要被删除的有四个目录分别是:

  • /bin 、/boot 、/dev 这三个目录整个都被删除了 。
  • /lib 目录里的动态库部分被删除 。
来复习下上面这四个目录主要是存放了什么:
  • /bin 存放常用系统命令 , ls、cp、rm、chmod 等常用命令都在此目录 。
  • /boot 系统启动目录 , 保存与系统启动相关的文件 , 如内核文件和启动引导程序 。
  • /dev 设备文件保存位置 。
  • /lib 存放程序所需的动态库和静态库文件 。
/boot 都被删除了 , 还好小林没有重启服务器 , 要是重启了服务器 , 就完犊子了 , 系统肯定起不来了 。
cd 命令是在 /sin 目录下 , /sin 还健全 , 所以 cd 是可以正常使用 。
所幸重要的数据库信息和文件都还没删除 , 所以小林首要的目标是要恢复 /bin、/boot、/dev、/lib 这四个目录 。
还原文件
由于 /bin 目录 和 /lib 部分动态文件被删除 , 常用的传递文件的方式是无法使用的 , 如 ftp、scp、mount 等 。
我摸索了很久 , 竟然发现 wget 可以使用 , wget 命令是在 /usr/bin 目录 , 所幸 /usr/bin 还健全 。
于是 , 用了取巧的方法 , 先另一台正常的服务器 , 把 /bin 目录放到了 Web 服务器的 Web 目录 , 接着通过 wget 进行下载 。
写了个Bug,误执行rm -fr /*,瞬间背后一凉
本文插图

有戏 , 看到了成功的曙光 。
但是新的问题就来了 , 我下载过来的命令文件 , 是没有执行权限的 。
写了个Bug,误执行rm -fr /*,瞬间背后一凉
本文插图

而 chmod 命令是在 /bin 目录的 , 它同样也被删除了 , 无法使用它来给予文件权限 。
还在 , 在网上搜到了一个伟大命令 perl , 可以通过它来给予文件权限:
perl -e ''chmod 777, 'ls''' 【写了个Bug,误执行rm -fr /*,瞬间背后一凉】真是个神奇的命令 。 好了 , 这下赋值权限问题也解决了 , 成功在望了 。
wget 是无法直接把 /bin 目录下载下来的 , 只能下载一个文件 。
但是我不可能一个一个去下载来进行恢复 , 这得要何年何月才能完成......
于是我就想到了一个方法:
  • 先通过 wget 的方式下载 tar 命令 , 并通过 perl 给予 tar 命令权限 。
  • 接着把另一台服务器把 /bin 目录打包成压缩文件 , 然后通过 wget 下载 bin 目录的压缩包文件 。
  • 最后通过 tar 命令把 bin 压缩包解压出来 。
/bin 就这样恢复回来啦 , 剩余的其他目录 也是通过同样的操作恢复了回来 。
我的笑容渐渐恢复了回来 , 哈哈哈哈哈哈哈哈哈哈哈哈!
写了个Bug,误执行rm -fr /*,瞬间背后一凉
本文插图

遇到 rm -fr /* 删库事件发生 , 一定要沉住气 , 稳住心态!
本次删库事件 , 之所以能幸运的恢复回来 , 有非常关键两点:


推荐阅读