Linux下文件误删除恢复案例
说明:将/etc/profile文件删除,然后恢复
在linux中为什么讲文件删除还能恢复呢?
详见:文件删除原理
http://blog.csdn.net/grantlee1988/article/details/8057228
http://oldboy.blog.51cto.com/2561410/791322/
总之就是说:当我执行rm命令的时候文件的实体(block数据块)并没有被删除,删除的只是i_link,只有当原来的数据块被后来的数据覆盖之后该数据才是被彻彻底底的删除了,这样就是找不回来了。
文件误删恢复的步骤:
故障演练:
删除/etc/profile文件 #profile这是很重要的一个文件
profile文件是很终重要的一个文件,控制着系统环境变量的设置[root@localhost ~]# cat /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$
else
PATH=$:$PATH
fi
fi
}
# ksh workaround
if [ -z "$EUID" -a -x /usr/bin/id ]; then
EUID=`id -u`
UID=`id -ru`
fi
# Path manipulation
" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
# No core files by default
ulimit -S -c > /dev/>&
if [ -x /usr/bin/id ]; then
USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
fi
HOSTNAME=`/bin/hostname`
HISTSIZE=
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
unset pathmunge
[root@localhost ~]#
[root@localhost ~]# rm /etc/profile //删除文件 提示:一般删除当个文件的时候不要加-rf参数,这样还会有收手的机会
rm: remove regular file `/etc/profile'? y
[root@localhost ~]#
第一步:查看被删除文件所在的目录是挂载在哪一个分区下的
[root@localhost ~]# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
ext3 % / // /etc/profile就是在这个根目录下啦 要记住被挂载的分区
/dev/sda1 ext3 % /boot
tmpfs tmpfs % /dev/shm
[root@localhost ~]#
第二步:找到被删除文件的inode
tmpfs tmpfs % /dev/shm
[root@localhost ~]# debugfs // 这个就是恢复的主打命令啦
debugfs -May-)
debugfs: open /dev/mapper/VolGroup00-LogVol00 //打开被挂载的分区
debugfs: ls -d /etc/提示:下面内容中的数字代表的就是该目录下每一个文件的inode节点,被删除的文件的inode使用的是尖括号<>,存在的文件使用的是圆括号(),因为是实验室的机器,不知道问什么全部显示的尖括号,不过不影响我们演示啦,因为你总会记得刚删除的文件的文件名吧,让我们将被删除文件的inode号找出来,但是内容很多不好找怎么办?,没关系,我们可以讲内容复制下来,使用grep命令找。
() . () .. <> () X11 <> () rpm
<> () fstab <> () mtab <> () modprobe.conf
<> () hosts <> () resolv.conf <> () csh.cshrc
<> () aliases <> () bashrc <> () profile.d
<> () csh.> () environment
<> () exports <> () filesystems <> () group
<> () host.conf <> () hosts.allow
<> () hosts.deny <> () inputrc <> () motd
<> () > () printcap <> () profile
<> () opt <> () pki <> () protocols
<> () securetty <> () services <> () shells
<> () skel <> () xinetd.d <> () default
........省略.......
[root@localhost ~]# grep "profile" a //将内容复制到a文件中 可以看到profile文件的inode是<4321184>
<4321169> (16) aliases <4321170> (16) bashrc <4321185> (28) profile.d
<4323146> (16) passwd <4321183> (16) printcap <4321184> (16) profile
<4353891> (24) desktop-profiles <4353894> (12) gdm
4321185 (20) profile.d 4321172 (20) csh.login
<0> (16) gre.d <0> (24) tux.mime.types <0> (24) desktop-profiles
4353891 (24) desktop-profiles 4321200 (20) ld.so.conf.d
4321352 (32) fb.modes <4321184> (16) profile 4321921 (16) samba
[root@localhost ~]#
第三步:找到被删除文件的block
debugfs: logdump -i <4321184> //根据inode去找block
Inode is at group , block , offset
Journal starts at block , transaction
FS block logged at sequence , journal block
(inode block ):
Inode: Type: regular Mode: Flags:
User: Group: Size:
File ACL: Directory ACL:
Links: Blockcount:
Fragment: Address: Number: Size:
ctime: ::
atime: ::
mtime: ::
Blocks: (0+1): 4327454 //找到啦
......省略......
第四步:恢复
[root@localhost ~]# count= skip=4327454 //恢复命令
+ records in
+ records out
bytes (4.1 kB) copied, 6.3368e-05 seconds, 64.6 MB/s
You have mail in /var/spool/mail/root
[root@localhost ~]# cat /tmp/profile.bak //内容还是原来的内容
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$
else
PATH=$:$PATH
fi
fi
}
# ksh workaround
if [ -z "$EUID" -a -x /usr/bin/id ]; then
EUID=`id -u`
UID=`id -ru`
fi
# Path manipulation
" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
# No core files by default
ulimit -S -c > /dev/>&
if [ -x /usr/bin/id ]; then
USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
fi
HOSTNAME=`/bin/hostname`
HISTSIZE=
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
unset pathmunge
[root@localhost ~]# mv /tmp/profile.bak /etc/profile //移动到原来的位置
[root@localhost ~]#
Linux下文件误删除恢复案例的更多相关文章
- linux 下文件误删恢复
linux 下文件误删恢复 0x01 事件背景 某天晚上写代码的时候,本来想删除当前目录下一个叫xxx的文件夹 rm -rdf ./xxx/*, 结果光顾着和人说话,一不留神手贱把命令敲成了rm -r ...
- 恢复Linux下被误删除的文件(笔记)
恢复Linux下被误删除的文件 [root@xuegod63 ~]# mount /dev/cdrom /mnt/ 分一个区:sda4 查找:extundelete 分一个区:sda4 [root ...
- linux系统下文件误删除该如何恢复?
一.linux误删除数据的场景 在实际的工作中,朋友们可能会将linux服务器上的文件不小心误删除掉了.而且越是资历老的工程师越容易犯这样的错误,敲代码的速度也是够快,啪啪rm -rf一个回车,然后就 ...
- (转)linux下文件删除的原理精华讲解(考试题答案系列)
linux下文件删除的原理精华讲解(考试题答案系列) 说明:本文为老男孩linux培训某节课前考试试题及答案分享博文内容的一部分,也是独立成题的,你可以点下面地址查看全部的内容信息.http://ol ...
- linux 下文件重命名/移动/复制命令(转)
linux 下文件重命名/移动/复制命令(转) linux下重命名文件:使用mv命令就可以了, 例:要把名为:abc 重命名为:123 可以这样操作: 重命名:MV命令 1.进入你的文件目录,运行 ...
- Linux下文件的三种时间戳
Linux下文件的三种时间标记 三种时间对应关系表 column column column 访问时间 Access atime 修改时间 Modify mtime 状态改动时间 Change cti ...
- linux下文件结束符
linux下文件结束符,我试过了所有的linux,发现其文件的结束符都是以0a即LF结束的,这个是操作系统规定的,windows下是\r\n符结束,希望可以帮助大家. -------------转:来 ...
- dos2unix,去掉Linux下文件中的^M
Windows系统下使用VS2010编写好的CPP文件,想放到Linux上进行编译.发现Linux上文件中的每行代码末尾都跟着^M这个符号. 为什么同一份文件在windows上和Linux上显示的不一 ...
- linux下文件的复制、移动与删除
linux下文件的复制.移动与删除命令为:cp,mv,rm 一.文件复制命令cp 命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination) ...
随机推荐
- 移动HTML5前端性能优化总结
概述 1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点,首屏加载3秒完成或使用Loading 4. 基于联通3G网络平均338KB/s ...
- Canny边缘检测算法的实现
图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...
- 从头开始搭建一个Spring boot+RabbitMQ环境
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- c++编程思想(二)--对象的创建和使用
1.解释器:将源码转换为动作(机器语言),并立即执行 编译器:编译器也会将源码转换为机器语言,但是中间会经过好多步骤,分段编译 ,然后链接,可以实现将代码模块化 2.c++不鼓励多使用预处理命令 3. ...
- 一个RESTful+MySQL程序
前言 本章内容适合初学者(本人也是初学者). 上一章内容(http://www.cnblogs.com/vanezkw/p/6414392.html)是在浏览器中显示Hello World,今天我们要 ...
- Web Service ,WCF以及Web API的对比
Web Service 1.基于SOAP和XML形式的返回数据. 2.只支出HTTP协议. 3.只能运行在IIS环境下. 4.不是开源的,但可以由任何支持xml的客户端下使用. WCF 1.基于SOA ...
- javascript小程序——用嵌套循环来输出乘法口诀表
在学习javascript过程中,一开始接触循环语句时一般拿乘法口诀表来练手,这里我将自己的练习贴在这里,希望能给和我一样的初学者些许帮助,也希望大神们能够不吝指教. 首先,来看一下乘法口诀表是什么样 ...
- spring中对象的注入方式
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...
- 第八讲:I/O虚拟化
一.I/O虚拟化的产生 服务器单个千兆以太网端口肯定能够支持单个应用,但是当被分割为10个.15个或者更多的服务器负载时(这其中包括网络.存储以及服务器之间的流量)可能就不够用了. 当遇到I/O瓶颈时 ...
- 每天一个Linux命令(07)--mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名,这也是个常用命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目录 目标文件或目录 2.命令功能: 视mv命令中第 ...