前言

某日 OI 考试,我在打完题后还剩 30min, 于是保存代码打开终端进行一波屎一样的操作。

嗯?好像这个目录的位置不对?
rm DIR/*
薶艸,我的代码好像在这个目录里。

于是就有了这篇文章。

前提

为什么删除的文件可以恢复?

因为 linux 上删除命令只是在文件节点中作了一个删除标记。

所以虽然文件被删除了,但文件的内容仍然会留在储存空间里,直到…

在这个位置发生了写盘动作。

毕竟你文件删了空间还是要给系统回收的啊是吧,所以要是这样子了那就没办法了洗洗睡吧。

操作

首先 df -Th 查看你要恢复的文件系统是 ext3 还是 ext。

ext4:

sudo aptitude install extundelete 来安装一个神器 extundelete。

如果提示没有这个包,先 sudo aptitude update

安装成功后就可以开始了。

在此之前要先卸载分区 umount /home/ 或者别的。

如果提示被占用,fuser -k /home/ 结束进程。

extundelete --inode 2 /dev/sda1 后面的分区要看情况。

extundelete /dev/sda1/ --restore-all.

然后你就会在当前目录发现一个 RECOVERED_FILES/ 的文件夹,里面是恢复的文件。

最后重新挂载分区 mount /home/

ext3:

用系统自带的 debugfs 和 dd 即可。

sudo debugfs 来运行。

在里面 open /dev/sda1 , /dev/sda1 是指你丢失文件的分区。

ls -d FILES ,FILES 是文件的位置。

在一堆文件信息中找到你丢失文件的名字,比如是 fu_k.txt

…… <123456> (666) fu_k.txt

注意尖括号里的数字,然后 logdump -i 123456

又有一堆信息,找到 Blocks:(0+1): 后面的数字并记下。

quit 推出debugfs。

恢复文件 dd if=/dev/sda1(分区) of=fu_k.txt.bak bs=4096(据情况有可能是 2048 ) count=1 skip=刚才记下的数字

如果恢复的是 ^@^@^@ 这样的东西,那可能一些参数搞错了或者rp不好

结语

虽然有这些办法,但毕竟有缺陷。

有人说:你 tm 在图形界面搞不就好了,删了不还有回收站嘛。

有道理。

不不不我是说后半句有道理。

如果能让 rm 有回收站呢?

介绍一个有回收站的删除命令

sudo aptitude install trash-cli 即可安装。

然后就可以 alias rm='trash-rm' 了是吧(最好不要 rm='transh-rm' )。

但可能 trash 无法删除文件,这时你需要:

sudo rm ~/.local/share/Trash -r
mkdir ~/.local/share/Trash
分类: Linux

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: