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) ...
随机推荐
- wap网页、微信内嵌网页在手机端页面窗口尺寸如何不缩放
如何让wap网页.微信内嵌网页内容(尺寸和文字)在手机端页面窗口尺寸不被强制缩放 在head中加入: <meta http-equiv="Content-Type" cont ...
- css3 3d变换和动画——回顾
1.transform-style 属性指定嵌套原始是怎样在三维空间中呈现. 语法:transform-style: flat | preserve-3d flat 表示所有子元素在2D平面呈现. p ...
- ESLint 规则详解(一)
前端界大神 Nicholas C. Zakas 在 2013 年开发的 ESLint,极大地方便了大家对 Javascript 代码进行代码规范检查.这个工具包含了 200 多条 Javascript ...
- 11G内存设置一例
11G的内存设置参数有memory_target.memory_max_target.sga_target.pga_aggregate_target等. 一个特别繁忙的数据库,前期内存设置较低,物理内 ...
- JavaScript实现按键精灵
最近有个需求,需要在页面上面自动点击.输入.提交. 用以模拟真实用户的操作行为,可以通过直接执行某个元素绑定的事件,来执行操作. 也可以创建事件,再派发事件,执行操作.关于事件的更多细节,可以参考&l ...
- 酷派8702手机打开logcat
机器在出厂时将log的级别做了限制,方法是:拨号盘输入*20121220# -> 选择日志输出级别 -> 选择Java log level -> 选择LOGD即可.
- 新学到的xss姿势,分享一下
在js中有一种神奇的对象叫做window 当页面中包含如类似的 <script>var c = urlQuery("callback"); var r = JSON.p ...
- Angular企业级开发(8)-控制器的作用域
scope概念 scope(作用域)是视图和控制器之间的桥梁,scope本身是一个对象,有方法和属性.scope可以应用在视图和控制器上. scope简单示例 <!DOCTYPE html> ...
- MegaCli 安装过程
首先说下自己遇到的坑: 百度搜索了一篇关于安装 MegaCli 的文章,于是乎就开始安装,装完之后获取不到 raid 的信息,后来发现是版本问题,就又搜索了一堆文章,最后搞定了 [root@web-0 ...
- UVa 1588 换抵挡装置
前言 题目 大意是说,两个槽能够插在一起,并保证每一列的高度不高于3,保证最短长度. 思路 思路很简单,取短字符串遍历长字符串的每一个位置,纪录下位置,并取最短即可. 实现 //习题3-11 换抵挡装 ...