Rm重定向防止误删除以及数据找回的最佳解决方案
目录
1 为什么rm删除后很难恢复数据?
- 了解linux的童鞋应该知道,linux下的文件系统和Windows的不同,使用了inode这个数据结构记录文件系统对象(文件,目录等等)。
- 每个inode结构都用一个整数值表示,一个文件对应一个inode号码,用这个号码从inode表中可以找到这个文件。
- 当使用rm删除文件的时候,也就删除了文件对应的inode号码,系统回收inode号码,重新分配。
2 rm删除的数据能否恢复?
简单的说,希望渺茫,当你在看这篇文章的时候,系统可能已经在重写覆盖源位置了,作者之前多次误删代码,没有一次找回来过,大概这就是命吧!
- rm删除的只是inode号码,数据仍然还在原来的位置,只是我们没有了inode号码,无法定位到原来的位置。
- 系统会回收重新分配inode,原来位置的数据有可能被重写覆盖。
- 如果出现了rm误删除,应该立即unmount文件对应的磁盘
sudo apt install extundelete
该工具可以恢复未被覆盖的误删数据,具体原理和使用方法见百度。- 若删除的是/目录下的文件,应该立即重启进入单用户模式,设置/目录为只读模式。然后使用
extundelete
工具。
3 防止误删除,使用alisa别名覆盖系统命令rm
rm命令直接就删除了文件,如果能将删除的文件放入回收站就好了, trash-cli
程序提供了删除文件到回收站的功能,有以下几个命令:
Command | Description |
---|---|
trash-put | 将文件或目录移入回收站 |
trash-empty | 清空回收站 |
trash-list | 列出回收站中的文件 |
restore-trash | 还原回收站中的文件 |
trash-rm | 删除回收站中的单个文件 |
注意
当使用sudo执行rm时,sudo会忽略后面的别名,按原来的rm命令执行,解决办法是将sudo也变成别名"sudo “,如果别名值后面是空格,bash会检查空格后面是否也为别名(bash手册)。
-
安装
trash-cli
,sudo apt install trash-cli
-
root用户和普通用户为trash-put设置别名rm,为了防止误删,最好两者都设置一下。
- 普通用户设置别名:
- 编辑~/.bashrc,在最后一行写入
1 2
alias rm="trash-put" alias sudo="sudo "
- 使bash生效
source ~/.bashrc
- root用户设置别名:
- 编辑/root/.bashrc,在最后一行写入
1 2
alias rm="trash-put" alias sudo="sudo "
- 使bash生效
source /root/.bashrc
- 普通用户设置别名:
-
测试别名是否生效。
- 普通用户:
rm -h
,sudo rm -h
- root用户:
rm -h
- 普通用户:
总结
没有经历过,哪会在意这些细节,一直以为自己很小心,rm的肯定是不需要的文件,所以也就不放在心上。可是,常在河边走,哪有不湿鞋。写这篇博文时,作者已经历两次惨案了,多么痛的领悟~