说明:将/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下文件误删除恢复案例的更多相关文章

  1. linux 下文件误删恢复

    linux 下文件误删恢复 0x01 事件背景 某天晚上写代码的时候,本来想删除当前目录下一个叫xxx的文件夹 rm -rdf ./xxx/*, 结果光顾着和人说话,一不留神手贱把命令敲成了rm -r ...

  2. 恢复Linux下被误删除的文件(笔记)

    恢复Linux下被误删除的文件 [root@xuegod63 ~]# mount /dev/cdrom /mnt/ 分一个区:sda4  查找:extundelete 分一个区:sda4  [root ...

  3. linux系统下文件误删除该如何恢复?

    一.linux误删除数据的场景 在实际的工作中,朋友们可能会将linux服务器上的文件不小心误删除掉了.而且越是资历老的工程师越容易犯这样的错误,敲代码的速度也是够快,啪啪rm -rf一个回车,然后就 ...

  4. (转)linux下文件删除的原理精华讲解(考试题答案系列)

    linux下文件删除的原理精华讲解(考试题答案系列) 说明:本文为老男孩linux培训某节课前考试试题及答案分享博文内容的一部分,也是独立成题的,你可以点下面地址查看全部的内容信息.http://ol ...

  5. linux 下文件重命名/移动/复制命令(转)

    linux 下文件重命名/移动/复制命令(转) linux下重命名文件:使用mv命令就可以了, 例:要把名为:abc   重命名为:123 可以这样操作: 重命名:MV命令 1.进入你的文件目录,运行 ...

  6. Linux下文件的三种时间戳

    Linux下文件的三种时间标记 三种时间对应关系表 column column column 访问时间 Access atime 修改时间 Modify mtime 状态改动时间 Change cti ...

  7. linux下文件结束符

    linux下文件结束符,我试过了所有的linux,发现其文件的结束符都是以0a即LF结束的,这个是操作系统规定的,windows下是\r\n符结束,希望可以帮助大家. -------------转:来 ...

  8. dos2unix,去掉Linux下文件中的^M

    Windows系统下使用VS2010编写好的CPP文件,想放到Linux上进行编译.发现Linux上文件中的每行代码末尾都跟着^M这个符号. 为什么同一份文件在windows上和Linux上显示的不一 ...

  9. linux下文件的复制、移动与删除

    linux下文件的复制.移动与删除命令为:cp,mv,rm 一.文件复制命令cp     命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination)      ...

随机推荐

  1. Extjs学习笔记之九 数据模型(上)-extjs

    来源:niutuku.com | vincent上传于2012-07-20 | 1802次浏览 | 0条评论 本文开始进入Extjs最核心最优秀的部分. 标签:Extjs 数据模型   Extjs的数 ...

  2. io的四个分类

    1.首先是字节操作:InputStream和OutputStream 2.字符操作:Reader和Writer 3.磁盘操作:File 4.网络操作:scoket(不在java.io包)

  3. C#操作XML方式

    前言 前一篇XML读取,现在咱们继续XML操作相关 C#中也有三种操作(增.删.改.查)XML文件方法如下: 使用 XmlDocument(DOM模式) 使用 XmlTextWriter(流模式) 使 ...

  4. lazy ideas in programming

    lazy形容词,懒惰的,毫无疑问是一个贬义词.但是,对于计算机领域,lazy却是非常重要的优化思想:把任务推迟到必须的时刻,好处是避免重复计算,甚至不计算.本文的目的是抛砖引玉,总结一些编程中的laz ...

  5. 关于OpenGL和DX学习的取舍

    大家多知道左右就肯定要与显卡打交道.两大图形图像IPA.OpenGL(图形),DX(图形,声音,键盘控制,网络) OpenGL的兴起可能取决于苹果公司的适用,吸引看大部分开发者适用,它有跨平台的有点. ...

  6. 在 Windows 上测试 Redis Cluster的集群填坑笔记

    redis 集群实现的原理请参考http://www.tuicool.com/articles/VvIZje       集群环境至少需要3个节点.推荐使用6个节点配置,即3个主节点,3个从节点. 新 ...

  7. where T:class的含义( where约束)

    public void Request<T>(List<T> EntityList) where T : class { } 这是参数类型约束,指定T必须是Class类型.   ...

  8. 【疑问】css

    1.p{float:left}好像意思是p后面的元素往左浮动的意思啊!!2.ff下,button的文字好像没法垂直居中2.1 button垂直对齐,其line-height似乎需要减2px(依边框宽度 ...

  9. Spring+SpringMVC+MyBatis+easyUI整合基础篇(七)JDBC url的连接参数

    在java程序与数据库连接的编程中,mysql jdbc url格式如下: jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值 ...

  10. 用smarty模板做数据实现修改、分页等功能

    先来看怎么把数据库的列表全都显示出来 还是要先建一个php文件,还有html文件,都存到相应的目录下 php文件中 <?php include("../init.inc.php&quo ...