linux rm 文件找回_Linux下用rm删除的文件的恢复方法
对于rm,很多人都有惨痛的教训。我也遇到一次,一下午写的程序就被rm掉了,幸好只是一个文件,第二天很快又重新写了一遍。但是很多人可能就不像我这么幸运了。本文收集了一些在Linux下恢复rm删除的文件的方法,给大家作为参考。
首先,最好的方法是避免这个问题,以下是几点建议:
1、rm -rf误操作的后果是可怕的,rm -f也要三思而行,不能轻易使用。
2、做好数据备份。
3、用一些策略避免出错:
提倡在shell下用 TAB 补全,用脚本执行任务,减少出错的机会。或者编写一个脚本,起名rm,在脚本里将真实的rm改为mv ,将删除的都mv到一个指定的目录里面,定期清理。
那么rm删除的文件还能恢复吗?
rm的man里面有如下说法:
请注意,如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。如果想保证该文件的内容无法还原,请考虑使用 shred。
所以理论上rm删除的文件是还能恢复的。删掉文件其实只是将指向数据块的索引点(information nodes)释放,只要不被覆盖,数据其实还在硬盘上,关键在于找出索引点,然后将其所指数据块内的数据抓出,再保存到另外的分区。在用rm误删除文件后,我们要做的第一件事就是保证不再向误删文件的分区写数据。
通常我们可以有以下几种选择:
1、借助工具。
2、自己写程序。你需要会编程并了解对应的文件系统。
3、如果数据很有用,也许可以找专业公司抢救。
工具
1、The Sleuth Kit http://www.sleuthkit.org/sleuthkit/(Autopsy是它的一个图形前端)
2、Foremost http://foremost.sourceforge.net
3、一个全能的工具,Finaldata,可以恢复unix/linux/dos下误删的文件。对于unix,支持这些产品, Solaris、AIX和HP-UX。对于linux,支持EXT2的文件系统。对于dos,支持FAT 12/16/32, NTFS 4/5/5.1 的文件系统。
4、如果文件系统是ext2(对ext3无效):
ext3的删除机制是直接把 inode data 删除了,所以造成 ext3 无法反删除(ext3设计为无法恢复被删除的文件)。
unrm
ext2ed
debugfs(undel lsdel )
recover
Midnight Commander(mc)
e2undel
tct
5、如果文件系统是FAT32或者NTFS:
EasyRecovery
Finaldata
6、freebsd如果使用了rm,可以试一下undelete这个命令.
7、当进程打开了某个文件时,只要该进程保持打开该文件,lsof可以用来恢复删除文件。
恢复被误删文件的方法
大多数Linux发行版都提供一个debugfs工具,可以用来对Ext2文件系统进行编辑操作。不过在使用这个工具之前,还有一些工作要做。
首先以只读方式重新挂载被误删的文件所在分区。使用如下命令:(假设文件在/usr分区)
mount –r –n –o remount /usr -r表示只读方式挂载;-n表示不写入/etc/mtab,如果是恢复/etc上的文件,就加上这个参数。如果系统说xxx partion busy,可以用fuser命令查看一下是哪些进程使用这个分区上的文件:
fuser –v –m /usr
如果没有什么重要的进程,用以下命令停掉它们:
fuser -k –v –m /usr
然后就可以重新挂载这些文件系统了。
如果是把所有的文件统一安装在一个大的/分区当中,可以在boot提示符下用linux single进入单用户模式,尽量减少系统进程向硬盘写入数据的机会,要不干脆把硬盘挂在别的机器上。另外,恢复出来的数据不要写到/上面,避免破坏那些有用的数据。如果机器上有dos/windows,可以写到这些分区上面:
mount –r –n /dev/hda1 /mnt/had
然后就可以执行debugfs:(假设Linux在 /dev/hda5)
#debugfs /dev/hda5
就会出现debugfs提示符debugfs:
使用lsdel命令可以列出很多被删除的文件的信息:
debugfs:lsdel
debugfs: 2692 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001
…………………………………………………………
36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001
196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001
debugfs:
列出的文件有很多(这里找到2692个),第一字段是文件节点号,第二字段是文件所有者,第三字段是读写权限,接下来是文件大小,占用块数,删除时间。
然后就可以根据文件大小和删除日期判断那些是我们需要的。比如我们要恢复节点是196829的文件:
可以先看看文件数据状态:
debugfs:stat <196829>
Inode: 196829 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 0 Group: 0 Size: 149500
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 38
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 2001
atime: 0x31a21dd1 -- Tue May 21 20:47:29 2001
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 2001
dtime: 0x31a9a574 -- Mon May 27 13:52:04 2001
BLOCKS:
594810 594811 594814 594815 594816 594817 ………………………………….
TOTAL: 38
然后就可以用dump指令恢复文件:
debugfs:dump <196829> /mnt/hda/01.sav
这样就把文件恢复出来了。退出debugfs:
debugfs:quit
另一种方法是手工编辑inode:
debugfs:mi <196829>
Mode [0100644]
User ID [0]
Group ID [0]
Size [149500]
Creation time [0x31a9a574]
Modification time [0x31a9a574]
Access time [0x31a21dd1]
Deletion time [0x31a9a574] 0
Link count [0] 1
Block count [38]
File flags [0x0]
Reserved1 [0]
File acl [0]
…………………………….
Triple Indirect Block [0]
使用mi指令后每次显示一行信息以供编辑,其它行可以直接按回车表示确认,把deletion time改成0(未删除),Link count改成1。改好后退出debugfs:
debugfs:quit
然后用fsck检查/dev/hda5
fsck /dev/hda5
程序会说找到丢失的数据块,放在lost+found里面。这个目录里的文件就是我们要的东东。
linux rm 文件找回_Linux下用rm删除的文件的恢复方法相关推荐
- linux rm 文件找回_linux下执行rm -rf命令后如何恢复
果真感觉蛋疼了,欲哭无泪啊!写了一天的成果,想着把之前备份的文件删除呢,结果把刚写完的删了. 国外著名linx管理员守则中有这么一条:"慎用rm -rf命令,除非你知道此命令将带来什么后果. ...
- linux mysql root修复_linux下误删mysql的root用户,解决方法
开始对liunx界面不熟悉,可能由于不小心,把root误删了,怎么办? 1. # killall mysqld 干掉所有mysql进程 2. # mysqld_safe --skip-grant ...
- linux函数删除某文件,Linux环境下用C++删除指定文件
Linux环境下用C++删除指定文件 "Talk is cheap, show me the code!" #include #include #include #include ...
- mysql 删除数据后myd_Windows下的MySQL删除data文件夹后……
MySQL删除data文件夹后,怎么都无法启动了,出现错误: 150106 9:28:43 [Note] Plugin 'FEDERATED' is disabled. wampmysqld: Tab ...
- linux批处理定时删除文件,forfiles命令,在Windows删除旧文件-批处理删除文件
在运行Windows的时候,也会出现一些不必要的文件,需要进行定期的删除,避免占用大量的磁盘空间.Windows的forfiles命令犹如Linux的find命令,一行命令就可以删除旧文件及文件夹. ...
- git找回本地被覆盖或者删除的文件/确保本地代码为最新时,强制使本地文件覆盖git库文件
操作前提(老手可略过不看): 1.进入代码本地根目录下(也就是当初你提交到git库上的路径,特点是此目录下带.git文件夹) 2.在空白处点击右键 选择Git Bash Here进入git控制台 一. ...
- c++查询当前文件夹下文件数目_python3自动化小工具--删除某个文件夹xx后缀文件...
源码 DelSomeFile.py """ 此代码用于删除文件夹下面以txt结尾的文件 (同理将.txt-->.py可以删除py文件) 借用pyqt5调用文件选择对 ...
- macbook文件恢复|如何找回Mac废纸篓已删除的文件?
「MacBook Air是不少苹果心仪的产品,前几天刚购买了MacBook Air,首次使用Mac时,激动的心情难以言喻,可是随后这激动的心情顿时就烟消云散了.因为对Mac操作系统的不熟练,导致我删除 ...
- 计算机休眠文件夹,W7电脑系统怎么删除休眠文件
相信有很多人并不知道,w7电脑系统中有一个休眠文件hiberfil.sys,这个休眠文件有好几个G的大小,如果不删除掉就会大量占用C盘的空间,而且删除它不会影响电脑的正常使用.那么,w7电脑系统怎么删 ...
- linux rm 文件找回_linux rm -rf 删除文件之后的恢复办法
记录我尝试恢复rm命令删除文件之后的恢复的三种办法. 先不管使用哪种办法,网上找到的主流的都是基于inode的,所以,在文件被删除后,马上挂起挂载盘只允许读操作,拒绝写操作是第一要义. 第一种 误删文 ...
最新文章
- 设计模式之迭代器模式(Iterator)摘录
- SpringMVC之Controller查找(Spring4.0.3/Spring5.0.4源码进化对比)
- 中科大团队打造“象鼻”机器人,开门、擦玻璃、会给女朋友拧瓶盖的那种
- 如何避免订单重复支付?
- 【Python】可视化配色方案自由啦 (Python版)
- k8s部署dubbo-admin 2.5.10
- 哪个瞬间你对科研圈彻底失望了?
- .NET Core + Kubernetes:快速体验
- 跟我一起学习C++虚函数--第一篇
- 晨哥真有料丨聊天不努力,脱单没有你!
- ASCII码值对照全表
- 冰点还原精灵有什么作用
- PDF转图片怎么转?建议收藏这三种方法
- 2022乐抖网络验证授权系统源码+实测可用
- 第三方Android应用商店也有安全问题
- 很努力了,为什么我还在原地踏步?
- Spring整合RabbitMQ(包含生产者和消费者)
- linux实验报告 dns 新增域名,Linux实验报告DNS及虚拟主机.docx
- 技术源自洛克希德·马丁,光场XR眼镜FYR解析
- 网易易盾——推理拼图验证码参数逆向分析和调用
热门文章
- 新浪邮箱服务器密码被盗,邮箱密码盗取严重的注意事项以及处理建议
- winpe读取linux硬盘数据恢复,如何在WinPE环境下完成文件恢复
- 滴滴竟然已经投资了这么多公司?
- Exception in thread “main“ java.lang.NoSuchMethodException
- 用计算机软件绘制思维导图,一款简单好用的在线免费思维导图制作工具
- [GNSS] GNSS原理:多模导航卫星精密定轨理论
- java文档翻译,将word文件翻译该怎么操作?
- CCNA实验前准备(转)
- 从嗤之以鼻到“奇迹” 前淘宝工程师详解12306技术
- 微信公众平台怎么发PDF文件?