rm -rf的惨痛教训之误删bin文件夹

linux系统不像windows,没有回收站,删了就是删了,永远也找不回来了(也不绝对,小伙伴会argue我可以通过lsof或者extundelete,但毕竟没那么直接,有时真的是恢复不了)。这两天在真机调试代码,手欠写了一个包含rm -rf的脚本,还sudo运行。等反应过来,ls、cp、mv等常见命令都消失了,查看记录,我艹,bin目录被我给删了,删除操作到了boot因为设备繁忙暂停了,否则整个根目录就都化为“镜中花水中月”了。

定了定神,不能急,先把刚写的代码push一下,幸好git还能用。然后就是穷尽各种方法恢复bin文件夹,因为这是台服务器啊,不是我一个人用,必须得解决啊!!!要是个人的,简单直接快,重装系统~~~

首先,发现ssh已经不能用了,幸好我之前已经连接了2个窗口,看网上说,如果现在关闭了,可能就再也连不上了,这2个窗口是最后的救命稻草了,一定要小心操作!

然后,不是bin目录被删了么?找个相同系统的复制一下不就完了,还有台服务器,登上去看,竟然系统一模一样!都省去找镜像安虚拟机的功夫了。有了bin目录,怎么把它拷贝的服务器里去呢?要知道scp、ssh设么的都不能用了,不过你可以用wget!但是我比较幸运,服务器比较近,直接那个硬盘,屁颠屁颠地拷数据去了。你以为拷数据简单么?不简单!因为在图形界面你没办法把它拷贝到根目录下,连cp没有的我,只能欲哭无泪!不过拷贝的bin目录有cp啊,我可以用它啊,但是拷过来的数据没有执行权限啊,要执行还得chmod,可是chmod也没有了,这该如何是好啊!关键来了,你可以用下面的命令:

perl -e "chmod +x, 'chmod'"

看起来有点绕吧,不错,就用perl工具将拷贝过来的chmod赋予可执行权限,然后利用chmod服务cp可执行权限,然后再将bin文件夹cp到根目录,然后再将所有文件变成可执行文件。至此,我要致敬perl,就永远迈不出第一步,开拓者的力量啊!

接着,ls、cp、mv常见的命令都回来,欣喜若狂,我以为结束了,可以我太天真了!ssh依然连接不上,手一抖,还关闭了一个窗口,现在就剩最后一个了,不觉有种穷途末路的感觉。这里不是因为没哟给sshd赋予可执行权限,是bash的原因,因为远程连接可以输密码,但是会显示如下错误: 

Inconsistency detected by ld.so: ../sysdeps/x86_64/dl-machine.h: 540: elf_machine_rela_relative: Assertion `ELFW(R_TYPE) (reloc->r_info) == R_X86_64_RELATIVE' failed!

网上有人说重启一下就好,我可不敢冒着这么大的风险重启,说不定重启就再也起不来了。试了好多方法找丢失的bash,可是就是找不回来,接下来就是有点玄学的东西了。不一定能帮到你,但可以一试。将docker容器里的bash拷贝出来替换现有的,然后奇迹就发生了,一切都完美了。我不知道为什么,也不想问太多了,因为确实太累了,中午饭都没有吃。。。

 最后,奉劝大家,也是对自己,再也不要乱用sudo权限了,特别是rm -rf命令要慎用,后面的路径稍微有点错,就大错特错了!一点小感悟,记录一下,也希望能帮到你~

你可能感兴趣的:(linux)