说明:将/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. 8个新鲜的PHP常用代码

       /**      * +----------------------------------------------------------      * 生成UUID 单机使用      * ...

  2. ERP的基础管理-物料编码

    在企业ERP系统中,物料编码管理是所有数据的基础,可以这样说:"没有物料编码就没有ERP".实际上物料编码对于制造类企业供应链管理作用不可说不巨大,影响不可谓不深远,甚至我们在考虑 ...

  3. Lucky7(容斥原理)

    Problem Description When ?? was born, seven crows flew in and stopped beside him. In its childhood, ...

  4. ROM与RAM知识

    “ROM”和“RAM”的意思: “ROM”:N年前代表一种只能写入和读取,而不能改写和擦除的设备,可以用光驱CD-ROM来说明这个道理.目前的“ROM”已经不是这个道理了,它的技术已经飞快的发展到现在 ...

  5. 康复计划#5 Matrix-Tree定理(生成树计数)的另类证明和简单拓展

    本篇口胡写给我自己这样的什么都乱证一通的口胡选手 以及那些刚学Matrix-Tree,大致理解了常见的证明但还想看看有什么简单拓展的人- 大概讲一下我自己对Matrix-Tree定理的一些理解.常见版 ...

  6. 启程、对C的继承

    Cocoa和Object-c是苹果公司OS X和IOS操作系统的核心.   .m扩展名表示文件使用的是Objective-c代码.   与C语言一样,Objective-c使用头文件来包含结构体.符号 ...

  7. MES工具机器列表功能操作

    概述 在机器权限组.限制工序变更等其他情况下,有时候需要重启中间件才能起作用,这样会直接影响其他人员的加工情况.为了改善这种情况,现在MES工具中新加了一个功能,可以单独重启某一个机器,其它机器不受影 ...

  8. ERP免费模拟上线

    为了让更多中小企业在应用管理软件之前可以评估企业执行力和规避实施风险,普实在云端部署了AIO5的试用环境,免费供大家导入实际数据进行学习和测试.因资源有限,申请要求如下: 1.填写申请信息并加盖公章: ...

  9. Mac下ssh连接远程服务器时自动断开问题

    在mac下使用securecrt通过ssh连接远程服务器时,总会一段时间没有动作后,ssh被自动断开.在windows下用xmanager貌似没有遇到过这个问题. 在网上找了解决方法如下: 客户端配置 ...

  10. 推荐一本书:清华出版的《Modbus软件开发实战指南》

    前言: 最近在研究Modbus开发,如果只是简单的了解了一些modbus基础知识,但是不够系统和全面. 其实,modbus虽然比较简单,但是如果不注意有很多坑,特别是寄存器的位数,大小端处理,浮点数, ...