果真感觉蛋疼了,欲哭无泪啊!写了一天的成果,想着把之前备份的文件删除呢,结果把刚写完的删了。

国外著名linx管理员守则中有这么一条:“慎用rm -rf命令,除非你知道此命令将带来什么后果。” 可见这个命令的重要性啊,书中看到的这句话,确实很对。

说了这么多,教教大家执行了rm命令后 该这么办吧,是有办法回复的,我刚经过试验证实了,google有一个开源的包 叫ext3grep工具他可以回复删除的文件,甚至是drop database xcy; 对,就是误删除的数据库都可以回复。

先说一下他的工作原理吧,然后我在把试验分享给大家, 工作原理其实也不难,这个工具需要在ext3或者ext4 的文件系统上才可以实现,因为ext3文件系统是日志型文件系统,ext3文件系统储存信息的时候是由inode号和block块存储的。

神马? 不知道什么是inode号?和block块? 好吧,在说明白点,比如:一个分区比如一本书,那么block块就是书每页的内容,而inode号 就是书的目录,系统找文件的时候先找inode号 然后根据inode号去找硬盘上的block快信息,明白了吧!

在说一下删除的原理吧。 当硬盘上的一个文件删除,其实没有真正想象中的那样在硬盘上清除掉的,他是把inode号和block块的那个链子 断开,但是真正的数据还是在硬盘上的,有没有感觉在windos上删除是那么快,没考虑到这吧,当你在删除文件的地方重新复制了新文件,那时候才会把之前的文件覆盖掉,也就是说删除了没有关系,千万不要往那个位置放文件了。

原理说完了,开始实战。

环境介绍: 系统版本:CentOS release 5.4 (Final)

1 安装之前先检查有没有这个包: rpm -qa | grep e2fsprogs

2 ext4grep 是个源码包,需要编译安装

检查一下e2fsprogs包是否完整,我的却一个-devel的包,所以要先yum install e2fsprogs* 我偷懒了嘿嘿

解压ext3源码包

进入源码包,然后开始检查包的完整性 执行:./configure如果在这个过程中到最后有error那么先检查你的是不是少 e2fsprogs-devel

在进行 make && make install (编译 编译安装) 一般这里不会有问题如果这里报错了 检查你系统是不是缺少 gcc gcc-c++ 这俩包 你可以 yum install gcc* 全部安装 有好处没有坏处哈哈哈

等待完整完,,好了安装完以后。可以先查看一个是否完成成功了,用: ext3grep -v 命令查看ext3的版本信息如下如:

当然如果不知道命令怎么用可以输入:ext3grep --help 查看

然后我需要手动创建一个分区, 创建命令: fdisk /dev/sda 这个因为没有办法保存图像所有我直接显示的创建完成以后的。如果大家不知道怎么创建 可以查看我的 linx基本命令(文件系统章节)。

然后 把这个分区y用ext3分区格式格式化 并且挂载到mnt目录下。

然后 我进入了挂载的目录里, 创建了xcy目录, 把/etc/passwrd 和 /etc/my.cnf 俩个文件复制到了/mnt/xcy目录中,并且 把俩个文件改了下名字 为了我的辨认。 最后我执行了 rm -rf /xcy/* 把xcy文件中的文件都删除了。

咳咳,然后我首先做的是卸载下来 把挂载的分区,因为 怕别人动了我的文件夹 在里面复制了东西我就没有办法恢复了,在下面我执行:ext3grep /dev/sda5 --ls --inode 2 给你们解释一下

ext3grep 删除文件的分区 --ls --innode inode号

为什么最后我们要写2 因为我不知道我的删除的文件的inode号多少, 所有我写的是最大的inode / 的inode号 可以用: ls -id / 查看

执行下去以后就会看到 他在刷帮你找删除的文件们。。

继续走,,扫到最后我们想要知道的文件夹的inode号是2099 然后我们继续执行扫描命令: ext3grep /dev/sda5/ --ls --lnode 2009 这个命令他就会扫 xcy目录下的所有文件(包括删除 还有没有删除文件的inode号了) ,然后我们就可以扫除来了,my.cnf.xcy innode号 是2011 passwd.xcy 文件的inode号 是2010

现在我们的目标马上就要达到了,知道了俩个文件的inode号 就可以进行恢复了.

然后我们执行 ext3grep /dev/sda5 --restore-inode 2011 (恢复my.cnf.xcy文件)

我们在执行 ext3grep /dev/sda5 --restore-inode 2010 (恢复passwrd.xcy文件)

然后我们将卸载的文件系统重现挂载上去。

恢复了,文件不会在原来的位置,他会自动在/ 下创建一个叫RESTORED_FILES 目录 你以后所有恢复的文件都会在这里保存着,还有文件的名字是以inode号命名的 你需要手动修改回来原名字,不要怕不知道那个文件是那个,还记得我们 --ls 扫描的时候他都有对应的文件和inode号

文件恢复了,哈哈 是不是很激动啊,解决了liunx 下不能恢复的问题,这样就可以大大节约成本 不用找硬盘恢复工具 不用花钱了, 对了还有呢, 这个同样可以恢复 mysql 数据库 误操作删除了库或者表 都可以恢复 原理嘛 其实就是恢复相对应的mysql数据库中的文件了,自己尝试一下吧,

对了在说一下,我截图中 圈起来了是正确的命令,别的很多有操作错误的,因为毕竟第一次试验吗。。成功了很高兴,,希望能帮到和我同样遭遇的朋友们。

最后来个总结缺点: 我试验发现这个功能有些缺点:

1 条件必须是ext3 ext4 日志文件系统才可以做到,别的我就不清楚了。

2 我这个是自己创建的分区/dev/sda5 也就是说我知道删除的文件在那个分区上,假如你删除了文件知道在哪里分区中 那么你就需要从sda1 ....sdaN 都试一遍吧,,,,。

有什么问题可以留言 联系我 我看到了可以帮大家解决。。。

linux rm 文件找回_linux下执行rm -rf命令后如何恢复相关推荐

  1. Linux 使用rm -rf /*命令后,恢复系统方法

    Linux 使用rm -rf /*命令后,恢复系统方法 个人学习记录 这里实验环境采用的是radhel7.1的版本: 个人认为核心就是缺失什么组件,就从别的地方复制什么组件过来,先把系统拉起来,再慢慢 ...

  2. linux rm 文件找回_Linux 中删除目录的多种方法

    (点击上方快速关注并设置为星标,一起学Python) 来自:Linux公社  作者:醉落红尘 链接:https://www.linuxidc.com/Linux/2019-08/159921.htm ...

  3. linux rm 文件找回_linux rm -rf * 文件恢复记

    手太快,肠子都毁清了.本来是删除一个文件 rm path/myfile.txt 结果不知为何加了个*,变成了 rm path/myfile.txt * 赶紧ls,发现所有代码都化为了乌有,还没提交,还 ...

  4. linux 音频文件切割_linux下通过CUE分割APE、FLAC、WAV无损音频

    背景: 无损音乐的分享,大部分通过cue文件去播放一个很大的音频文件.这个在windows要去分割音频文件是意见很轻松的事情,在linux下面就要折腾点了,要在命令行下面进行处理,ape.flac.w ...

  5. linux进行MySQL查询_linux下mysql Select查询命令

    linux下mysql Select查询命令 SELECT查询格式: SELECT 字段 FROM 表 WHERE 条件; 例如: SELECT * FROM 表名;           #查询表所有 ...

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

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

  7. linux rm 文件找回_linux rm让你在删除的文件有地方找回 | DevOps

    一个不小心rm掉文件了吧?后悔莫及了吧! 把这段代码加入你的home目录的.bashrc或者.zshrc就可以了 工作原理:在你的home目录会创建一个.trash文件夹,里面会按照删除时间 年-月- ...

  8. Node.js 在命令行下执行Console.log()命令时,第二行会打印undefined的原因

    转载:http://blog.csdn.net/chy555chy/article 问题描述:在命令行下执行Console.log()命令后,第一行会以 "正常的白字" 输出log ...

  9. 在Ubuntu下运行 apt-get update命令后出现错误:

    在Ubuntu下运行 apt-get update命令后出现错误: The package lists or status file could not be parsed or opened sud ...

最新文章

  1. php http面向对象编程实例,PHP面向对象编程——PHP对象引用实例代码
  2. 【Python学习系列十二】Python库pandas之CSV导入
  3. AngularJS 内置指令
  4. git pull使用【转】
  5. duilib在同一个界面中(xml)加载两种自定义的list
  6. idea 主题包下载以及改变字体大小
  7. SiamFC代码配置复现
  8. JAVA 事务不生效的常见场景和修改方案
  9. 律动荆棘皇冠 Crown of Thorns
  10. 软件安全性与软件可靠性
  11. 计算机专业综合理论模拟测试卷五,2020银保监会考试题库:计算机类模拟试题练习(五)...
  12. 逻辑上的“谬误”真的是我们应该所认为的错误吗?
  13. 【3y原创】什么是保险
  14. strassen矩阵乘法 java_矩阵乘法Strassen算法
  15. 通信原理学习笔记3-2:数字通信系统概述(信源编码/压缩编码、信道编码FEC和交织、HARQ)
  16. Server U 的使用
  17. 一台云服务器可以干什么?
  18. 年度报表html5,新浪微博年度财务报表html5手机动画模板
  19. ww:action 的一个问题
  20. Scanner的简介

热门文章

  1. 【文献阅读04】基于ReRAM的高能效可重配置神经网络加速器
  2. Spoj-BOKAM143SOU Checking cubes.
  3. 237篇 历史文章合集
  4. gps怎样打开位置服务器,gps怎么开定位服务器地址
  5. [ WFU 4th 校赛]无上至尊的提案
  6. 【PyQt】MC自动钓鱼
  7. Allegro Xnet属性删除
  8. python字符串相似度去重_详解Python 字符串相似性的几种度量方法
  9. SEO站内优化需要做什么工作
  10. python 动物分类_python入门学习之knn分类