author:skate
时间: 2013/10/12
linux恢复意外删除的文件
如果进程打开文件时文件仍处于打开状态,则即使将其删除也会保留在磁盘上。 这意味着进程不知道文件已被删除,并且可以对打开文件时提供的文件描述符进行读写。 由于相应的目录索引节点已被删除,因此除进程外不会显示此文件。 在这种情况下,可以使用lsof恢复这些文件。
/proc目录包含反映内核和进程树的各种文件。 /proc目录装载映射到内存的空间,因此这些文件和目录不存在于磁盘上。 因此,在读取和写入这些文件时,实际上是从内存中获取信息。 有关lsof的信息大多存储在进程PID的目录中。 也就是说,/proc/12包含PID12进程的信息。 每个进程目录中都有不同的文件,APP应用程序可以轻松了解进程的内存空间、文件描述符列表、指向磁盘上文件的符号链接以及其他系统信息。 lsof程序使用该信息和有关内核内部状态的其他信息生成其输出。 因此,lsof可以显示进程的文件描述符和相关联的文件名等信息。 通过访问进程的文件描述符,可以找到有关该文件的信息。
以下举例说明
在我/tmp目录下创建脚本文件,总是在后台运行,但在tmp下会被系统定时删除,不想偷懒改写脚本,想找回原来的东西。 具体步骤如下。
1 .查看删除的文件diamon.sh,它不再存在
[根@ centos5~ ] # ll/tmp /
总体28
– rw-r– r–1root root 402 sep 2614336019 load _ tab.sh
srwxrwxrwx1mysqlmysql0sep 1615336020 MySQL.sock
dwx—- 2根根根4096 oct 1215336044 ssh-hip bw 10887
rwx—- 2根根根4096 oct 1016336012 ssh-luxbjf 6337
使用lsof确定当前哪个进程正在打开文件。 “/tmp/diamon.sh”
[ root @ centos5~ ] # lsof|grep diamon
sh 8455 root 255 rreg 253,0173764298/tmp/diamon.sh (已删除) ) ) ) ) ) ) ) )
[根@ centos5~ ] #
从上面的输出中可以看到,过程8455以只读方式打开此文件。 打开的文件描述符为255,文件/tmp/diamon.sh被标记为删除。 然后查看文件’/proc/8455/fd/255 ‘
[根@ centos5~ ] # more/proc/8455/FD/255
#可变
dir=/tmp
是wile (真)
德奥
v _ num=` PS-ef|grep load _ tab|grep-v grep|WC-l `
if [ $v_num -lt 4 ]; 陈真
sh /tmp/load_tab.sh /dev/null 21
fi
道恩
[根@ centos5~ ] #
3 .找到删除的文件了吗? 使用I/O重定向恢复到指定的文件,如下所示
[ root @ centos5~ ] # cat/proc/8455/FD/255/tmp/diamon.sh
检查文件已恢复
[root@centos5 ~]# ll /tmp
总体36
– rw-r—- r—-1root root 173 oct 1216336053 diamon.sh
– rw-r– r–1root root 402 sep 2614336019 load _ test 10.sh
srwxrwxrwx1mysqlmysql0sep 1615336020 MySQL.sock
rwx—- 2根根根4096 oct 1215336044 ssh-hip bw 10887
rwx—- 2根根根4096 oct 1016336012 ssh-luxbjf 6337
[根@ centos5~ ] #
检查恢复的文件的内容是否正常
[根@ centos5~ ] #
[ root @ centos5~~] # more/tmp/diamon.sh
#可变
dir=/tmp
是wile (真)
德奥
v _ num=` PS-ef|grep load _ test|grep-v grep|WC-l `
if [ $v_num -lt 4 ]; 陈真
sh/tmp/load _ test 10.sh/dev/null 21
fi
道恩
[根@ centos5~ ] #
linux恢复删除文件至此已成功完成
总结:
a .文件删除时,不要慌张,尽可能保存现场
b .某些数据库文件意外删除时有效
— -结束— –
快三大小单双稳赚买法re/proc/8455/FD/255
#可变
dir=/tmp
是wile (真)
德奥
v _ num=` PS-ef|grep load _ tab|grep-v grep|WC-l `
if [ $v_num -lt 4 ]; 陈真
sh /tmp/load_tab.sh /dev/null 21
fi
道恩
[根@ centos5~ ] #
3 .找到删除的文件了吗? 使用I/O重定向恢复到指定的文件,如下所示
[ root @ centos5~ ] # cat/proc/8455/FD/255/tmp/diamon.sh
检查文件已恢复
[root@centos5 ~]# ll /tmp
总体36
– rw-r—- r—-1root root 173 oct 1216336053 diamon.sh
– rw-r– r–1root root 402 sep 2614336019 load _ test 10.sh
srwxrwxrwx1mysqlmysql0sep 1615336020 MySQL.sock
rwx—- 2根根根4096 oct 1215336044 ssh-hip bw 10887
rwx—- 2根根根4096 oct 1016336012 ssh-luxbjf 6337
[根@ centos5~ ] #
检查恢复的文件的内容是否正常
[根@ centos5~ ] #
[ root @ centos5~~] # more/tmp/diamon.sh
#可变
dir=/tmp
是wile (真)
德奥
v _ num=` PS-ef|grep load _ test|grep-v grep|WC-l `
if [ $v_num -lt 4 ]; 陈真
sh/tmp/load _ test 10.sh/dev/null 21
fi
道恩
[根@ centos5~ ] #
linux恢复删除文件至此已成功完成
总结:
a .文件删除时,不要慌张,尽可能保存现场
b .某些数据库文件意外删除时有效
— -结束— –