恢复Ext3下被删除的文件
下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件。
假设我们有一个文件名叫 ‘test.txt’
15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt
注意:: “-il” 选项表示显示文件的i-node号(15),如果你不知道Unix/Linux文件系统的“I结点”的话,你有必要先补充一下相关的知识。简单说来,i结点就是操作管理文件的一个标识号。
我们再看一下其内容:
this is test file
好,现在我们开始删除文件:.
rm: remove write-protected regular file `test.txt’? y
使用 Journal 和 Inode 号恢复
注意,如果你删除文件后重启了系统,那么,相关的文件 journal 会丢失,我们也就无法恢复文件了。所以,恢复文件的前提是,Journal不能丢失,即,系统不能重启。
因为我们已经知道 test.txt 文件的 inode 号是 15,所以我们可以使用 debugfs 命令来查看:
FS block 1006 logged at sequence 404351, journal block 7241
(inode block for inode 15):
Inode: 15 Type: regular Mode: 0664 Flags: 0x0 Generation: 0
User: 0 Group: 0 Size: 20
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x48159f2d — Mon Apr 28 15:25:57 2008
atime: 0x48159f27 — Mon Apr 28 15:25:51 2008
mtime: 0x4806f070 — Thu Apr 17 12:08:40 2008
Blocks: (0+1): 10234
No magic number at block 7247: end of journal.
请注意上面信息中的这一行:
这就是inode 15存放文件的地址(数据块)。然后,我们知道了这个地址,我们就可以使用 dd 命令,把这个地址上的数据给取出来。
1+0 records in
1+0 records out
- if 是输入的设备
- of 是输出的设备.
- bs 指定一个block的大小
- count 说明有多少个block需要dump
- skip 说明从开始的地方跳过 10234 个block,并从取下一个block的数据
下面让我们看一下被恢复的文件:
this is test file
当然,上面的文件恢复是基于我们知道文件的inode,可在现实中,我们并不知道这个信息,如果我们不知道inode,我们还可能恢复吗?是的,这是可能的,让我们来看一下如何恢复。
使用 Journal 和 文件名恢复
如果我们不知道文件的inode我们可能恢复吗?我可以告诉你,这是不可能的事情。不过我们有办法知道文件的inode号。下面让我们来看看怎么做到:
rm: remove write-protected regular file `mytest.txt’? y
注意,我们并不知道其inode号,但我们可以使用 debugfs 命令来查看(使用其 ls -d 选项)。
2 (12) . 2 (12) .. 11 (20) lost+found 2347777 (20) oss
<2121567> (20) mytest.txt
你看文件名了吧,它的inode号是 <2121567> ,注意,被删除了的文件的inode都是用尖括号包起来的。
即然知道了inode号,那么我们就很容易恢复了(使用 logdump选项):
Inode 2121567 is at group 65, block 2129985, offset 3840
Journal starts at block 1, transaction 405642
FS block 2129985 logged at sequence 405644, journal block 9
(inode block for inode 2121567):
Inode: 2121567 Type: bad type Mode: 0000 Flags: 0x0 Generation: 0
User: 0 Group: 0 Size: 0
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x00000000 — Thu Jan 1 05:30:00 1970
atime: 0x00000000 — Thu Jan 1 05:30:00 1970
mtime: 0x00000000 — Thu Jan 1 05:30:00 1970
Blocks:
FS block 2129985 logged at sequence 405648, journal block 64
(inode block for inode 2121567):
Inode: 2121567 Type: regular Mode: 0664 Flags: 0x0 Generation: 913772093
User: 100 Group: 0 Size: 31
File ACL: 2130943 Directory ACL: 0
Links: 1 Blockcount: 16
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4821d5d0 — Wed May 7 21:46:16 2008
atime: 0x4821d8be — Wed May 7 21:58:46 2008
mtime: 0x4821d5d0 — Wed May 7 21:46:16 2008
Blocks: (0+1): 2142216
上面有很多信息,让我们仔细地查看,你可以看到下面一行信息:
并且,其类型是:
再仔细看一下文件的时间戳下面的Blocks: 什么也没有。那么,让我们看一下下一个block:
(inode block for inode 2121567):
这一条Journal就有block信息了:
这就是被删除文件的地址,让我们再次运行恢复命令:
再让我们来检查一下文件内容:
this is my test file
小结
好了,下面是我们的一些总结:
1)使用 debugfs: ls -d 找到被删除文件的inode号。
2)使用 debugfs:logdump找到文件的数据块地址。
3)使用dd 命令把数据取出来存成文件。
网上有很其它不同的方法来恢复文件,基本上也是使用debugfs这个命令,有的还使用到了lsdel,其实大同小异,这个教程是我在网上看到的,虽然他说只是针对Ext3文件系统的,但我总感觉应该可以用于Ext2文件系统,不过我没有试过。也许Ext2和Ext3被debugfs输出的信息不一样吧。大家可以去试试。
VI的一些小技巧
下面是一些vi的小技巧。
:sp <filename>
打开一个文件,并和当前打开的文件分屏显示。
Ctrl+W+W
在分屏显示中的不同文件中切换。
*
向前搜索目前光标所在的单词。
#
向后搜索目前光标所在的单词。
:%s/word1/word2/g
全文搜索word1并以word2替换之。
:’a,’bs/word1/word2/g
仅在第a行到第b行间搜索并替换。
:!<command>
执行一个Shell命令。
:!javac %
使用%可以表示当前文件名。比如:sample.java,以达到编译的目的。
:sh
启运一个shell而不退出vi。exit 命令后回到vi.
:line_number
冒号后跟数字表示要到第几行,如果跟1,表示到文件头,如果跟$,表示到文件尾。
Ctrl+G
可以显示当前行在整个文件的百分比。
<number>
重复一个命令number次。比如先输入50,然后输入dd,表示删除50行。
yy
拷贝一个行到VI的剪贴版。
p
粘贴VI
>> 和 <<
用于向右或右左的缩进。
u
undo上一次改变。
U
undo当前行所有的改变。
Ctrl + R
redo被undo了的改变。
恢复Ext3下被删除的文件的更多相关文章
- 恢复Ext3下被删除的文件(转)
恢复Ext3下被删除的文件(转) 前言 下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件. 删除文件 假设我们有一个文件名叫 ‘test.txt’ $ls -il test.txt 1 ...
- Linux学习之CentOS(十八)-----恢复Ext3下被删除的文件与 使用grep恢复被删文件内容(转)
前言 下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件. 删除文件 假设我们有一个文件名叫 'test.txt' $ls -il test.txt 15 -rw-rw-r– 2 roo ...
- 恢复Linux下被误删除的文件(笔记)
恢复Linux下被误删除的文件 [root@xuegod63 ~]# mount /dev/cdrom /mnt/ 分一个区:sda4 查找:extundelete 分一个区:sda4 [root ...
- linux系统下,递归删除.svn文件
linux系统下,递归删除.svn文件 SVNLinux 进入要删除的目录,执行下面的命令就可以啦. find . -name "*.svn" | xargs rm -rf
- windows下自动删除过期文件的脚本
windows下自动删除过期文件的脚本 前言: 比如日志文件每天都产生,时间长了就会有很大的一堆垃圾.整理一下 定时删除文件的方法. 正文: Windows: 定时删除tomcat日志和缓存.可以保留 ...
- Eclipse下还原删除的文件
做项目的时候,不小心把Eclipse下的么个文件删除了,虽然有svn但是最新修改的代码没有提交,怎么办,在网上查了下,eclipse是可以还原删除文件的.具体做法如下所示 恢复删除的文件 1 在项目上 ...
- MAC系统下,删除.svn文件
MAC系统下,.svn文件是隐藏的. 如果项目是非export导出的,那么项目中会有很多的.svn文件. 如果项目的体积非常庞大,我们如何快速的批量删除.svn文件呢?下面是操作方法: 打开终端,cd ...
- linux下快速删除大量文件
昨天遇到一个问题,在Linux中有一个文件夹里面含有大量的Cache文件(夹),数量级可能在百万级别,使用rm -rf ./* 删除时间慢到不可接受.Google了一下,查到了一种方法,试用了下确实比 ...
- Foremost恢复Linux中已删除的文件
Foremost 我们只能在Linux中恢复已删除的文件,只要这些扇区在硬盘上没有被覆盖. 首先安装 要在CentOS上安装Foremost,我们将从官方网页下载并安装最前面的rpm.打开终端并执行以 ...
随机推荐
- Discuz常见小问题-如何批量加精,置顶帖子
批量选中帖子,然后置顶和精华都可以勾选 完成之后的效果
- LabVIEW上位机与串口通信
渊源 大一的时候,学校开了门公共选修课,叫LabVIEW编程,当时的我当然还不知道LabVIEW是啥东东,但还是选了.上课的老师是机械学院的一个副教授.他给我们展示了好几个用LabVIEW做的项目.譬 ...
- 配置Oracle访问SQL地理数据库
Oracle访问空间数据 ArcSDE是ArcGIS的空间数据引擎,它是在关系数据库管理系统(RDBMS)中存储和管理多用户空间数据库的通路.以前连接方式有两种,服务连接与直接连接(简称"直 ...
- 牛客网-《剑指offer》-包含min函数的栈
题目:http://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49 辅助栈 C++ class Solution { public ...
- ZH奶酪:基于ionic.io平台的ionic消息推送功能实现
Hybrid App越来越火,Ionic的框架也逐渐被更多的人熟知. 在mobile app中,消息推送是很必要的一个功能. 国内很多ionic应用的推送都是用的极光推送,最近研究了一下Ionic自己 ...
- Kettle命令行使用说明
Kettle命令行使用说明 1.Pan——转换执行器 用来执行转换.参数与Kitchen类似,如下. 1- -version显示版本信息 2- -file=filename运行xml文件 3- -pa ...
- 自己定义构造方法和description方法
本文文件夹 知识回想 一.自己定义构造方法 二.description方法 说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序猿,可以高速上手Objec ...
- VB操作EXCEL文件大全
Private Sub writeToExcel(strTmp1() As String, colTmp1 As Collection)'' Dim tmp1 Dim i1 As Integer, i ...
- MongoDB内存管理机制
目前,MongoDB使用的是内存映射存储引擎,它会把磁盘IO操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性 ...
- 朴素贝叶斯分类器(Naive Bayes)
1. 贝叶斯定理 如果有两个事件,事件A和事件B.已知事件A发生的概率为p(A),事件B发生的概率为P(B),事件A发生的前提下.事件B发生的概率为p(B|A),事件B发生的前提下.事件A发生的概率为 ...