对于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删除的文件的恢复方法相关推荐

  1. linux rm 文件找回_linux下执行rm -rf命令后如何恢复

    果真感觉蛋疼了,欲哭无泪啊!写了一天的成果,想着把之前备份的文件删除呢,结果把刚写完的删了. 国外著名linx管理员守则中有这么一条:"慎用rm -rf命令,除非你知道此命令将带来什么后果. ...

  2. linux mysql root修复_linux下误删mysql的root用户,解决方法

    开始对liunx界面不熟悉,可能由于不小心,把root误删了,怎么办? 1. # killall mysqld    干掉所有mysql进程 2. # mysqld_safe --skip-grant ...

  3. linux函数删除某文件,Linux环境下用C++删除指定文件

    Linux环境下用C++删除指定文件 "Talk is cheap, show me the code!" #include #include #include #include ...

  4. mysql 删除数据后myd_Windows下的MySQL删除data文件夹后……

    MySQL删除data文件夹后,怎么都无法启动了,出现错误: 150106 9:28:43 [Note] Plugin 'FEDERATED' is disabled. wampmysqld: Tab ...

  5. linux批处理定时删除文件,forfiles命令,在Windows删除旧文件-批处理删除文件

    在运行Windows的时候,也会出现一些不必要的文件,需要进行定期的删除,避免占用大量的磁盘空间.Windows的forfiles命令犹如Linux的find命令,一行命令就可以删除旧文件及文件夹. ...

  6. git找回本地被覆盖或者删除的文件/确保本地代码为最新时,强制使本地文件覆盖git库文件

    操作前提(老手可略过不看): 1.进入代码本地根目录下(也就是当初你提交到git库上的路径,特点是此目录下带.git文件夹) 2.在空白处点击右键 选择Git Bash Here进入git控制台 一. ...

  7. c++查询当前文件夹下文件数目_python3自动化小工具--删除某个文件夹xx后缀文件...

    源码 DelSomeFile.py """ 此代码用于删除文件夹下面以txt结尾的文件 (同理将.txt-->.py可以删除py文件) 借用pyqt5调用文件选择对 ...

  8. macbook文件恢复|如何找回Mac废纸篓已删除的文件?

    「MacBook Air是不少苹果心仪的产品,前几天刚购买了MacBook Air,首次使用Mac时,激动的心情难以言喻,可是随后这激动的心情顿时就烟消云散了.因为对Mac操作系统的不熟练,导致我删除 ...

  9. 计算机休眠文件夹,W7电脑系统怎么删除休眠文件

    相信有很多人并不知道,w7电脑系统中有一个休眠文件hiberfil.sys,这个休眠文件有好几个G的大小,如果不删除掉就会大量占用C盘的空间,而且删除它不会影响电脑的正常使用.那么,w7电脑系统怎么删 ...

  10. linux rm 文件找回_linux rm -rf 删除文件之后的恢复办法

    记录我尝试恢复rm命令删除文件之后的恢复的三种办法. 先不管使用哪种办法,网上找到的主流的都是基于inode的,所以,在文件被删除后,马上挂起挂载盘只允许读操作,拒绝写操作是第一要义. 第一种 误删文 ...

最新文章

  1. 设计模式之迭代器模式(Iterator)摘录
  2. SpringMVC之Controller查找(Spring4.0.3/Spring5.0.4源码进化对比)
  3. 中科大团队打造“象鼻”机器人,开门、擦玻璃、会给女朋友拧瓶盖的那种
  4. 如何避免订单重复支付?
  5. 【Python】可视化配色方案自由啦 (Python版)
  6. k8s部署dubbo-admin 2.5.10
  7. 哪个瞬间你对科研圈彻底失望了?
  8. .NET Core + Kubernetes:快速体验
  9. 跟我一起学习C++虚函数--第一篇
  10. 晨哥真有料丨聊天不努力,脱单没有你!
  11. ASCII码值对照全表
  12. 冰点还原精灵有什么作用
  13. PDF转图片怎么转?建议收藏这三种方法
  14. 2022乐抖网络验证授权系统源码+实测可用
  15. 第三方Android应用商店也有安全问题
  16. 很努力了,为什么我还在原地踏步?
  17. Spring整合RabbitMQ(包含生产者和消费者)
  18. linux实验报告 dns 新增域名,Linux实验报告DNS及虚拟主机.docx
  19. 技术源自洛克希德·马丁,光场XR眼镜FYR解析
  20. 网易易盾——推理拼图验证码参数逆向分析和调用

热门文章

  1. 新浪邮箱服务器密码被盗,邮箱密码盗取严重的注意事项以及处理建议
  2. winpe读取linux硬盘数据恢复,如何在WinPE环境下完成文件恢复
  3. 滴滴竟然已经投资了这么多公司?
  4. Exception in thread “main“ java.lang.NoSuchMethodException
  5. 用计算机软件绘制思维导图,一款简单好用的在线免费思维导图制作工具
  6. [GNSS] GNSS原理:多模导航卫星精密定轨理论
  7. java文档翻译,将word文件翻译该怎么操作?
  8. CCNA实验前准备(转)
  9. 从嗤之以鼻到“奇迹” 前淘宝工程师详解12306技术
  10. 微信公众平台怎么发PDF文件?