一:前言

在Linux中,我们通常会因为误删除文件而感到烦恼,rm -rf +文件  rf参数简直就是每个运维的噩梦,但是大家想过没,为什么删除文件那么快呢,为什么我们copy文件的时候那么慢。

其实不管大家是rm 还是rm -rf都是删除的文件名字而已,数据还是保存在磁盘扇区里面的,当然这只是我的理解,那么删除后我们要怎么恢复呢,下面实验将进行对extundelete工具的简单操作介绍,

二:实验环境

系统:CentOS6.4_x64-mini.iso

工具选择: extundelete-0.2.4.tar.bz2

extundelete官网:http://extundelete.sourceforge.net/

备注:这里我全文全部为Linux命令,没有任何图片,加一个图片到blogs里面很累的。

再者环境我说明一下,我这里的实验目录是单独挂载到一个硬盘上的,不然搞得大家看不懂就很不好了,

说下我为什么挂载一个硬盘上呢,大家想下,企业中了为了安全的考虑,肯定会把数据盘和系统盘分开。

删除了数据盘的数据就必须马上umount下,不然数据二次写入,就是大牛来了也帮不了你了。这点和Windows一样,我想都会懂的。

三:实验前准备

创建目录,copy文件。

[root@nginx ~]#mkdir  /yang
[root@nginx ~]# mkfs.ext4 /dev/sdb
[root@nginx ~]# mount /dev/sdb /yang/
[root@nginx ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 .5G .6G .5G % /
tmpfs 242M 242M % /dev/shm
/dev/sda1 190M 27M 153M % /boot
/dev/sdb .8G 10M .6G % /yang
[root@nginx ~]# cp /etc/hosts /yang/
[root@nginx ~]# cp /etc/passwd /yang/
[root@nginx ~]# mkdir -p /yang/data1/
[root@nginx ~]# mkdir -p /yang/data2/
[root@nginx ~]# echo "data1.txt" > /yang/data1/data1.txt
[root@nginx ~]# echo "data2.txt" > /yang/data2/data2.txt
[root@nginx ~]# ls -r /yang/*
/yang/passwd /yang/hosts /yang/lost+found: /yang/data2:
data2.txt /yang/data1:
data1.txt ###以上为我实验环境的准备,命令都很简单,最后查看文件输出结果###

四、下载安装extundelete

[root@nginx ~]#wget  http://internode.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
[root@nginx ~]# tar jxvf extundelete-0.2..tar.bz2
[root@nginx ~]# cd extundelete-0.2.
[root@nginx extundelete-0.2.]# ls
acinclude.m4 autogen.sh config.log configure.ac install-sh Makefile.am missing src
aclocal.m4 config.h.in configure depcomp LICENSE Makefile.in README
[root@nginx extundelete-0.2.]# ./configure
Configuring extundelete 0.2.
configure: error: Can't find ext2fs library ###好的,到这里看到报错,怎么办呢,根据报错解决了###

这里报错说找不到ext2fs,找不到就装一个呗,怎么装呢,yum? 首先要确定下这个包,yum直接安装ext2fs肯定是没有的,接下来我们既然没那么多经验,不知道包名字,我们就rpm找就可以了,简单明了。

[root@nginx extundelete-0.2.]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@nginx extundelete-0.2.]# cd /mnt/
[root@nginx mnt]# ls
CentOS_BuildTag GPL Packages RPM-GPG-KEY-CentOS- RPM-GPG-KEY-CentOS-Testing-
EFI images RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Debug- TRANS.TBL
EULA isolinux repodata RPM-GPG-KEY-CentOS-Security-
[root@nginx mnt]# cd Packages/
[root@nginx Packages]# ls *2fs*
e2fsprogs-1.41.-.el6.x86_64.rpm e2fsprogs-devel-1.41.-.el6.x86_64.rpm e2fsprogs-libs-1.41.-.el6.x86_64.rpm
e2fsprogs-devel-1.41.-.el6.i686.rpm e2fsprogs-libs-1.41.-.el6.i686.rpm [root@nginx Packages]# rpm -ivh e2fsprogs-1.41.-.el6.x86_64.rpm
Preparing... ########################################### [%]
package e2fsprogs-1.41.-.el6.x86_64 is already installed
[root@nginx Packages]# rpm -ivh e2fsprogs-devel-1.41.-.el6.x86_64.rpm
Preparing... ########################################### [%]
:e2fsprogs-devel ########################################### [%]

Ok,这里我安装成功了,我的是x64位系统,当然我要装x86_x64啦。接下来我们继续编译安装。

[root@nginx Packages]#  cd /root/extundelete-0.2.
[root@nginx extundelete-0.2.]# ./configure
Configuring extundelete 0.2.
Writing generated files to disk
[root@nginx extundelete-0.2.]# echo $? [root@nginx extundelete-0.2.]# make && make install
make -s all-recursive
Making all in src
extundelete.cc:: warning: unused parameter ‘flags’
Making install in src
/usr/bin/install -c extundelete '/usr/local/bin'
[root@nginx extundelete-0.2.]# ls /usr/local/bin/
Extundelete ########安装成功 我们开始删除文件来进行恢复测试#####

进行删除,恢复测试。记得删除后umount哦,不然二次写入谁也帮不了你呢。

[root@nginx ~]# rm -rf /yang/*
[root@nginx ~]# ls /yang/*
ls: cannot access /yang/*: No such file or directory
[root@nginx ~]# ls /yang/
[root@nginx ~]#echo “这里可以看到我刚才删除了rm –rf /yang/*就没有任何东西了”
[root@nginx ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 3.6G 5.5G 40% /
tmpfs 242M 0 242M 0% /dev/shm
/dev/sda1 190M 27M 153M 15% /boot
/dev/sdb 4.8G 10M 4.6G 1% /yang
/dev/sr0 4.4G 4.4G 0 100% /mnt
[root@nginx ~]# umount /yang/
[root@nginx ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 3.6G 5.5G 40% /
tmpfs 242M 0 242M 0% /dev/shm
/dev/sda1 190M 27M 153M 15% /boot
/dev/sr0 4.4G 4.4G 0 100% /mnt

五、恢复测试。恢复方式有很多,接下来简单说几个。

1、  通过inode节点恢复

什么是inode?这里建议大家去百度,其实笔者也不是很懂啦,哈哈,我只是会一些简单的。

[root@nginx ~]# mkdir /recover
[root@nginx ~]# cd /recover/
[root@nginx recover]# ls
[root@nginx recover]# extundelete /dev/sdb --inode
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Group:
Contents of inode :
| ed b3 3f af 3f | .A.......?yW.?yW
| af 3f | .?yW............
| | ........a!......
| | ................
| | ................
| | ................
| | ................
| | ................
| 1c a8 c0 a8 c0 6c f1 | ......xE..xElf.d
| 3d | '=yW............
00a0 | | ................
00b0 | | ................
00c0 | | ................
00d0 | | ................
00e0 | | ................
00f0 | | ................ Inode is Allocated
File mode:
Low bits of Owner Uid:
Size in bytes:
Access time:
Creation time:
Modification time:
Deletion Time:
Low bits of Group Id:
Links count:
Blocks count:
File flags:
File version (for NFS):
File ACL:
Directory ACL:
Fragment address:
Direct blocks: , , , , , , , , , , ,
Indirect block:
Double indirect block:
Triple indirect block: File name | Inode number | Deleted status
.
..
lost+found Deleted
hosts Deleted
passwd Deleted
data1 Deleted
data2 Deleted
[root@nginx recover]# [root@nginx recover]# extundelete /dev/sdb --restore-inode
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
[root@nginx recover]# ls
RECOVERED_FILES
[root@nginx recover]# ls RECOVERED_FILES/
file.
[root@nginx recover]# du -sh ./RECOVERED_FILES/file.
.0K ./RECOVERED_FILES/file.
[root@nginx recover]# echo "这里我根据是inode的节点恢复的,当然这里有些人会不了解为什么是file.13,上面我inode节点对应的不是passwd文件?下面我们查看一下是否一样文件,再使用diff对比一下。"

原文件:

[root@nginx recover]# more /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
uucp:x:::uucp:/var/spool/uucp:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
gopher:x:::gopher:/var/gopher:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
rpc:x:::Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
vcsa:x:::virtual console memory owner:/dev:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
saslauth:x:::Saslauthd user:/var/empty/saslauth:/sbin/nologin
rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:::Anonymous NFS User:/var/lib/nfs:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
haldaemon:x:::HAL daemon:/:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
radvd:x:::radvd user:/:/sbin/nologin
qemu:x:::qemu user:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x::::/:/sbin/nologin
oprofile:x:::Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
www:x::::/data1/app/services/nginx:/sbin/nologin
[root@nginx recover]#

恢复出来的文件:

[root@nginx recover]# more RECOVERED_FILES/file.
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
uucp:x:::uucp:/var/spool/uucp:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
gopher:x:::gopher:/var/gopher:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
dbus:x:::System message bus:/:/sbin/nologin
rpc:x:::Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
vcsa:x:::virtual console memory owner:/dev:/sbin/nologin
abrt:x::::/etc/abrt:/sbin/nologin
saslauth:x:::Saslauthd user:/var/empty/saslauth:/sbin/nologin
rpcuser:x:::RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:::Anonymous NFS User:/var/lib/nfs:/sbin/nologin
postfix:x::::/var/spool/postfix:/sbin/nologin
haldaemon:x:::HAL daemon:/:/sbin/nologin
ntp:x::::/etc/ntp:/sbin/nologin
radvd:x:::radvd user:/:/sbin/nologin
qemu:x:::qemu user:/:/sbin/nologin
sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x::::/:/sbin/nologin
oprofile:x:::Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
www:x::::/data1/app/services/nginx:/sbin/nologin
[root@nginx recover]# ##############输出的结果一模一样############

再者我们使用diff对比一下文件,diff命令不懂?  没问题啊,一样啊去百度啊,因为笔者也不了解,嘿嘿。逗逼一下,不然写着很累的。

[root@nginx recover]# diff /etc/passwd ./RECOVERED_FILES/file.
[root@nginx recover]# echo $? [root@nginx recover]#echo “这里返回结果就是0,没有报错,就是成功了,对比一样,记住,在Linux中没有信息就是最好的信息。”

2、  根据文件名来恢复

[root@nginx recover]# extundelete /dev/sdb --restore-file hosts
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Successfully restored file hosts
[root@nginx recover]# ls
RECOVERED_FILES
[root@nginx recover]# ls RECOVERED_FILES/
file. hosts
[root@nginx recover]# diff /etc/hosts ./RECOVERED_FILES/hosts
[root@nginx recover]# echo $? [root@nginx recover]#echo“对比一样还是恢复成功了。”

3、根据目录来恢复

[root@nginx recover]# extundelete /dev/sdb --restore-directory data1
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Searching for recoverable inodes in directory data1 ...
recoverable inodes found.
Looking through the directory structure for deleted files ...
recoverable inodes still lost.
[root@nginx recover]# ls ./RECOVERED_FILES/
data1 file. hosts
[root@nginx recover]# ls ./RECOVERED_FILES/data1/
data1.txt
[root@nginx recover]# echo “到这里目录测试也是可以恢复成功,里面文件也是我之前的文件,那么如果有人说我的文件太多了我想恢复所有的,这样操作是不是太麻烦了,没问题,下面我来教大家怎么恢复所有的,就是更改下参数。”

4、恢复全部文件。

我先给之前恢复的文件都删除了,下面看是不是可以正常恢复成功所有的文件

[root@nginx recover]# rm -rf RECOVERED_FILES/
[root@nginx recover]# ls
[root@nginx recover]# extundelete /dev/sdb --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Searching for recoverable inodes in directory / ...
recoverable inodes found.
Looking through the directory structure for deleted files ...
recoverable inodes still lost.
[root@nginx recover]# ls
RECOVERED_FILES
[root@nginx recover]# ls -r ./RECOVERED_FILES/
passwd hosts data2 data1
[root@nginx recover]#echo “可以看到我删除后所有的都恢复过来了”

啊~~~到这里总算是告一段落了,实在不懂的直接问我就可以了,我也是今天才学的。感谢大家~

Linux 安全工具之extundelete误删除恢复的更多相关文章

  1. centos文件误删除恢复

    Centos 文件误删除 当意识到误删除文件后,切忌千万不要再频繁写入了,否则 你的数据恢复的数量将会很少. 而我们要做的是,第一时间把服务器上的服务全部停掉,直接killall 进程名 或者 kil ...

  2. NTFS(Windows)、ext4(RHEL6)和xfs(RHEL7)文件系统的误删除恢复和备份

    前言 对于误删除文件的设备,要马上停止任何写的操作,防止删除的文件被覆盖,导致数据丢失! 恢复NTFS文件系统下误删的文件 以Windows为例,市面上能恢复的工具不少,例如EasyRecovery. ...

  3. Linux开发工具的使用

    1.   Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用 1.   Linux开发工具的使用 V ...

  4. 在Linux,误删磁盘分区怎么恢复呢【转】

    在我们运维工作中,频繁的操作,可能命令写入错误,造成磁盘分区的删除,那么应该怎么办呢?怎么恢复磁盘分区呢? 一不小心删除了磁盘分区.如下图,删除了sda磁盘的第一个分区,为系统boot分区,系统如果重 ...

  5. 64位的ubuntu14.04 LTS安装 Linux交叉编译工具链及32位“ia32-libs”依赖库

    ubuntu又迎来了其新一代的长期支持版本 14.04 LTS,其带来了许多令人期待的新特新,遂决定进行升级. 装好了64位版本及安装 Linux交叉编译工具链 运行GCC,${CROSS_COMPI ...

  6. Linux lsof工具介绍

    引言 在<Linux fuser工具介绍>一文中,与大家一起学习了fuser工具的使用方法."lsof"——list open files,lsof也是Linux下用于 ...

  7. IP地址简介及Linux网络管理工具

    IP地址简介 IP地址又叫网络地址也称逻辑地址,由32位2进制数组成,分4段每段8位,由10进制数表示,范围0~,段与段之间用点隔开采用点分十进制的表示法,在一个网络中ip地址是唯一的,IP地址最主要 ...

  8. Linux下删除的文件如何恢复

    Linux下删除的文件如何恢复 参考自: [1]linux下误操作删除文件如何恢复 [2]Linux实现删除撤回的方法 以/home/test.txt为例 1.df -T 文件夹 找到当前文件所在磁盘 ...

  9. Linux性能工具介绍

    l  Linux性能工具介绍 p  CPU高 p  磁盘I/O p  网络 p  内存 p  应用程序跟踪 l  操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l  应用程序的性能问题/功能问 ...

随机推荐

  1. 用vue写一个分页器代码

    分页是项目中常会用到的,网上的插件也很多,但是有些功能太齐全反而不是必要的,所以抽时间自己写了一下(小白写代码,若发现问题还请及时赐教,感激不尽……) 如图,想要一个这样的页码: a. 上一页.下一页 ...

  2. ubuntu 共享WIFI并分享主机的代理服务

    背景是这样的: 公司内的主机访问外网需要通过一个HTTP代理服务器,主机ubuntu共享wifi给手机使用的时候需要在手机上配置一个代理才能访问互联网. 我觉得这样比较麻烦,所以想在主机上直接把共享w ...

  3. 操作MongoDB好用的图形化工具,Robomongo -> 下载 -> 安装

    一 下载 点击下载 -> https://robomongo.org/download 二 安装 直接下一步就行了 -> 择安装位置之后 -> 确认安装

  4. NB-IOT无线帧结构和下行物理信道

    NB-IOT Downlink OFDM参数 1.下行基于OFDMA, FF点数=128,基带采样速率1.92MHz,子载波间距15kHz,有效带宽180kHz=1PRB OFDMA: 正交频分多址, ...

  5. 【转】Qt 资源图片删除后,错误 needed by `debug/qrc_image.cpp'. Stop. 的终极解决办法

    @2019-06-13 [小记] Qt项目做完了把资源文件夹下已经不用的图片文件删掉,运行时报错(编译不报错):No rule to make target `images/图片文件名', neede ...

  6. JS批量绑定事件

    ,,,,] for(var j in a){ $("#" + j).click(function () { // 前提是先动态生成id是j的标签 var id_cm = $(thi ...

  7. block missing问题排查流程

    当集群出现block missing异常时,一般的排查流程如下: 首先检查是否有datanode处于dead或Decommissioned状态,如果是,尝试恢复datanode,一般block mis ...

  8. Python爬虫进阶之Scrapy框架安装配置

    Python爬虫进阶之Scrapy框架安装配置 初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此 ...

  9. 精选30道Java多线程面试题

    1.线程和进程的区别 进程是应用程序的执行实例.比如说,当你双击的Microsoft Word的图标,你就开始运行的Word的进程.线程是执行进程中的路径.另外,一个过程可以包含多个线程.启动Word ...

  10. 第七章 路由 82 名称案例-使用keyup事件实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...