Linux 安全工具之extundelete误删除恢复
一:前言
在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误删除恢复的更多相关文章
- centos文件误删除恢复
Centos 文件误删除 当意识到误删除文件后,切忌千万不要再频繁写入了,否则 你的数据恢复的数量将会很少. 而我们要做的是,第一时间把服务器上的服务全部停掉,直接killall 进程名 或者 kil ...
- NTFS(Windows)、ext4(RHEL6)和xfs(RHEL7)文件系统的误删除恢复和备份
前言 对于误删除文件的设备,要马上停止任何写的操作,防止删除的文件被覆盖,导致数据丢失! 恢复NTFS文件系统下误删的文件 以Windows为例,市面上能恢复的工具不少,例如EasyRecovery. ...
- Linux开发工具的使用
1. Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用 1. Linux开发工具的使用 V ...
- 在Linux,误删磁盘分区怎么恢复呢【转】
在我们运维工作中,频繁的操作,可能命令写入错误,造成磁盘分区的删除,那么应该怎么办呢?怎么恢复磁盘分区呢? 一不小心删除了磁盘分区.如下图,删除了sda磁盘的第一个分区,为系统boot分区,系统如果重 ...
- 64位的ubuntu14.04 LTS安装 Linux交叉编译工具链及32位“ia32-libs”依赖库
ubuntu又迎来了其新一代的长期支持版本 14.04 LTS,其带来了许多令人期待的新特新,遂决定进行升级. 装好了64位版本及安装 Linux交叉编译工具链 运行GCC,${CROSS_COMPI ...
- Linux lsof工具介绍
引言 在<Linux fuser工具介绍>一文中,与大家一起学习了fuser工具的使用方法."lsof"——list open files,lsof也是Linux下用于 ...
- IP地址简介及Linux网络管理工具
IP地址简介 IP地址又叫网络地址也称逻辑地址,由32位2进制数组成,分4段每段8位,由10进制数表示,范围0~,段与段之间用点隔开采用点分十进制的表示法,在一个网络中ip地址是唯一的,IP地址最主要 ...
- Linux下删除的文件如何恢复
Linux下删除的文件如何恢复 参考自: [1]linux下误操作删除文件如何恢复 [2]Linux实现删除撤回的方法 以/home/test.txt为例 1.df -T 文件夹 找到当前文件所在磁盘 ...
- Linux性能工具介绍
l Linux性能工具介绍 p CPU高 p 磁盘I/O p 网络 p 内存 p 应用程序跟踪 l 操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l 应用程序的性能问题/功能问 ...
随机推荐
- 5.Hibernate 核心开发接口
一.Configuration(AnnotationConfiguration) 作用:进行配置信息的管理 目标:用来产生SessionFactory 可以在configure 方法中指定hibern ...
- 用jquery写出图片自动轮播效果
相关代码如下,只要把代码粘贴进编辑器,修改图片路径,即可看到效果. 1.html部分 <body> <ul class="banner"> < ...
- Java反射【一、概述】
.net也使用过反射,不过用的比较浅显,用来记日志等.. Java基础课程学习已经过了一段时间了,接下来继续学习 本次学习包含以下内容 Java反射[一.概述] Java反射[二.Class类的使用] ...
- sql DATEDIFF 函数
sql DATEDIFF 函数 今天的所有数据: 昨天的所有数据: 7天内的所有数据: 30天内的所有数据: 半个月的所有数据: 本月的所有数据: 上月的所有数据: 本年的所有数据: --查询今天是 ...
- 【转】关于IAP与APP互相跳转的实现
关于IAP与APP互相跳转的实现 首先,在您动手做这个实验之前,先要弄清除咱俩的软硬件有什么不同: 1. 我的CPU是STM32F103ZET6,里面有512K的FLASH,您的CPU如果是其它类型, ...
- 【学】第一节 rt-thread的rt_kprintf功能的实现
@2019-06-20 [主题] 拿到一个stm32f407新板,使用rt-thread源码中的bsp中的stm32f407-discovery工程,操作串口外设实现rt_kprintf功能 [问题] ...
- zabbix 邮件报警(五)
一.sendEmail配置zabbix邮件报警 1.下载sendEmail: wget http://caspian.dotconf.net/menu/Software/SendEmail/sendE ...
- Hive压缩和存储(十二)
压缩和存储 1. Hadoop压缩配置 1) MR支持的压缩编码 压缩格式 工具 算法 文件扩展名 是否可切分 DEFAULT 无 DEFAULT .deflate 否 Gzip gzip DEFAU ...
- 陌上花开 HYSBZ - 3262 (CDQ分治)
陌上花开 HYSBZ - 3262 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另 ...
- 把所有时间用来做你最应该做的事,用尽全力竭尽所能成为DL and NLP大神。
两段代码,JAVA and CPP,输出相同结果: #include "stdafx.h" #include <iostream> using namespace st ...