一次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
抢救
一定要冷静,第一时间先把命令停下来,然后保持所有终端
使用 curl 下载 busybox 可执行文件,尝试执行,发现无权限
使用 curl 下载远程主机上的 chmod,尝试
/lib64/ld-linux-x86-64.so.2 chmod
执行,报错file too short
,可能是和 glibc 不兼容?转换思路,直接摆脱 glibc,尝试在远程主机对 coreutils 静态编译,搞出一个直接跑的 chmod 二进制
搜索后找到 luciusmagn/coreutils-static,这是一个使用 musl 静态编译 coreutils 的脚本
立刻 clone 到远程主机,开始编译
编译完毕后使用
python3 -m http.server 80
开启 web 服务器使用 curl 下载远程机器的
chmod
二进制文件没有执行·
chmod
的权限,怎么搞呢?搜了半天,发现install
的-m
参数可以做到 chmod 做的事情,并且它还在活着执行
install -m a+x ./chmod ~
,把它扔到用户目录下,并赋予执行权./chomod 777 busybox && busybox
出现 busybox 的帮助信息开始抢救文件,由于是 WSL2,所以直接将文件通过
/mnt
的映射拷贝到 Windows结束,重新开一个 WSL2 实例,想要完全恢复难度太高了
一次rm -rf /* 抢救经历