一次rm -rf /* 抢救经历

果然偶尔看一下别人的抢救经历还是有用的。。

玩计算机这么久,也见过不少 rm -rf /*`的笑话了,没想到这次搞到我自己头上来了

复盘

当时是想把 WSL2 某个文件夹下的内容全部删掉,所以要执行

1
$ rm -rf ./*

结果呢,手滑了,少打一个点,执行完了我还寻思这权限都不够?直接加sudo干上去(妈妈的真的是一秒都没犹豫)

我好像执行到一半^C掉又给执行了一次,然后我再仔细一看这报错,不对劲啊?

当我意识到不太对劲的时候,赶紧打了个ls /,然后 bash 回了我一句:

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

…彳亍

我确实看过一些抢救文章,不过细节忘了个七七八八了,大致检查了一下,常用命令没几个活着的,要么就活着也用不了(ssh因为/dev/null不存在无法使用)

可以确定的是这些东西还活着:

  • curl
  • glibc

抢救

一定要冷静,第一时间先把命令停下来,然后保持所有终端

  1. 使用 curl 下载 busybox 可执行文件,尝试执行,发现无权限

  2. 使用 curl 下载远程主机上的 chmod,尝试/lib64/ld-linux-x86-64.so.2 chmod执行,报错file too short,可能是和 glibc 不兼容?

  3. 转换思路,直接摆脱 glibc,尝试在远程主机对 coreutils 静态编译,搞出一个直接跑的 chmod 二进制

  4. 搜索后找到 luciusmagn/coreutils-static,这是一个使用 musl 静态编译 coreutils 的脚本

  5. 立刻 clone 到远程主机,开始编译

  6. 编译完毕后使用python3 -m http.server 80开启 web 服务器

  7. 使用 curl 下载远程机器的chmod二进制文件

  8. 没有执行·chmod的权限,怎么搞呢?搜了半天,发现install-m参数可以做到 chmod 做的事情,并且它还在活着

  9. 执行install -m a+x ./chmod ~,把它扔到用户目录下,并赋予执行权

  10. ./chomod 777 busybox && busybox 出现 busybox 的帮助信息

  11. 开始抢救文件,由于是 WSL2,所以直接将文件通过/mnt的映射拷贝到 Windows

  12. 结束,重新开一个 WSL2 实例,想要完全恢复难度太高了

Author

BakaFT

Posted on

2022-11-04

Updated on

2023-12-28

Licensed under

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×