author:skate
time:2013/10/12

linux恢复意外删除的文件

当进程打开某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。在这种情况可以通过lsof来恢复这些文件。

在/proc目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与lsof相关的信息都存储于以进程的PID命名的目录中,即/proc/12中包含的是PID为12的进程的信息。每个进程目录中存在着各种文件,它们可以使应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。

下面举例说明

我/tmp目录下创建了脚本文件,时刻在后台运行,但是tmp目下会被系统定时删除的,但犯懒不想重写脚本,想把原来的找回,具体步骤如下。

1.查看已经被删除的文件diamon.sh,已经不存在了

[root@centos5 ~]# ll /tmp/
total 28
-rw-r--r-- 1 root  root   402 Sep 26 14:19 load_tab.sh
srwxrwxrwx 1 mysql mysql    0 Sep 16 15:20 mysql.sock
drwx------ 2 root  root  4096 Oct 12 15:44 ssh-hiPBw10887
drwx------ 2 root  root  4096 Oct 10 16:12 ssh-lUXbjf6337

2. 使用lsof来查看当前哪个进程正在打开文件”/tmp/diamon.sh“
[root@centos5 ~]# lsof | grep diamon
sh         8455      root  255r      REG              253,0        173               764298 /tmp/diamon.sh (deleted)
[root@centos5 ~]#

从上面的输出可以看到,进程8455正在以只读的方式打开这个文件,打开的文件描述符为255,同时文件/tmp/diamon.sh被标记删除。然后我查看文件" /proc/8455/fd/255"

[root@centos5 ~]# more /proc/8455/fd/255
#variables
dir=/tmp

while (true)
do
v_num=`ps -ef | grep load_tab | grep -v grep | wc -l`
 
if [ $v_num -lt 4 ] ; then
  sh /tmp/load_tab.sh > /dev/null 2>&1 &
fi
done
[root@centos5 ~]#

3. 已经找到已经被删除的文件了吗然后利用I/O重定向将其恢复到指定文件中,如下

[root@centos5 ~]# cat /proc/8455/fd/255 > /tmp/diamon.sh

检查文件已经被恢复了
[root@centos5 ~]# ll /tmp
total 36
-rw-r--r-- 1 root  root   173 Oct 12 16:53 diamon.sh
-rw-r--r-- 1 root  root   402 Sep 26 14:19 load_test10.sh
srwxrwxrwx 1 mysql mysql    0 Sep 16 15:20 mysql.sock
drwx------ 2 root  root  4096 Oct 12 15:44 ssh-hiPBw10887
drwx------ 2 root  root  4096 Oct 10 16:12 ssh-lUXbjf6337
[root@centos5 ~]#

查看恢复的文件内容是否正常
[root@centos5 ~]#
[root@centos5 ~]# more /tmp/diamon.sh
#variables
dir=/tmp

while (true)
do
v_num=`ps -ef | grep load_test | grep -v grep | wc -l`
 
if [ $v_num -lt 4 ] ; then
  sh /tmp/load_test10.sh > /dev/null 2>&1 &
fi
done
[root@centos5 ~]#

至此linux恢复删除文件成功结束

总结:
A.在文件被删除时,不要慌,尽可能保存现场
B.对于某些数据库文件被误删除很有效

---end----

linux恢复意外删除的文件相关推荐

  1. recuva文件恢复乱码_使用Recuva恢复意外删除的文件

    recuva文件恢复乱码 It can be the worst feeling in the world when you accidentally delete a very important ...

  2. linux复rm删除文件,LINUX 恢复rm删除的文件

    在本文中,我们将讨论foremost,这是一个非常有用的Linux开源取证工具,能够使用称为"data carving"的技术恢复已删除的文件.该程序最初由美国空军特殊调查局开发, ...

  3. linux 恢复已删除的文件,恢复已删除的Linux文件

    恢复已删除的Linux文件 发布时间:2008-09-08 17:09:31   作者:佚名   我要评论 作为一个多用户.多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的.尽管删除命令只 ...

  4. linux恢复deleted状态的文件,Linux恢复被删除的文件 How To Recover Deleted Files From Your Linux System ....

    先介绍一些文件的基本概念, 文件实际上是一个指向inode的链接, inode链接包含了文件的所有属性, 比如权限和所有者, 数据块地址(文件存储在磁盘的这些数据块中). 当你删除(rm)一个文件, ...

  5. azure blob_如何在Azure Blob存储中恢复意外删除

    azure blob This article explains one of the important data protection features in Azure Blob Storage ...

  6. 恢复被删除的文件-linux篇

    恢复被删除的文件-linux篇 http://blog.chinaunix.net/u2/83058/showart_1404769.html 本文转自IBM中国上的文档 [http://www.ib ...

  7. Linux 系统中恢复已删除的文件

    注:文章内容仅用于本人日常学习记录 Linux 系统中恢复已删除的文件 当用户意外地删除了一个仍然需要的文件时,大多数情况下,是没有简便的方法可以重新找回或重建这个文件.不过,幸运的是文件是可以通过一 ...

  8. linux 的pwd文件被删,恢复被删除的文件-linux篇

    本文转自IBM中国上的文档 [http://www.ibm.com/developerworks/cn/linux/l-cn-filesrc/] [http://www.ibm.com/develop ...

  9. 恢复被rm意外删除数据文件

    恢复被rm意外删除数据文件 ======================== 对于rm,很多人都有惨痛的教训.我也遇到一次,一下午写的程序就被rm掉了,幸好只是一个文件,第二天很快又重新写了一遍.但是 ...

最新文章

  1. CRF(条件随机场)与Viterbi(维特比)算法原理详解
  2. tensorflow随笔-检测浮点数类型check_numerics
  3. [vs2010 project] CppUnit快速入门
  4. requirements.txt一键安装项目所需要的的python包
  5. Nginx的UDP健康检查
  6. cookie的设置与取值
  7. c++ map 修改value_哈希表:其实需要哈希的地方都能找到map的身影
  8. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 6_Logistic Regression 逻辑回归
  9. UltraEdit 21 for Mac(超好用的高级文本编辑器)
  10. Font Awesome图标字体
  11. java date 在mybatis_mybatis如何使用Java8的日期LocalDate和LocalDateTime详解
  12. 计算机应用水平excel考什么,全国专业技术人员计算机应用能力考试EXCEL2003中文字处理全真模拟试卷(三)...
  13. Oracle获取两时间的相差天数
  14. 历时一年,我的著作《第一行代码——Android》已出版!
  15. 教程:GIMP中怎样移动选区
  16. 让·阿方索·德纳(Jean Alfonso decena)引领对话式人工智能创新并颠覆菲律宾金融科技...
  17. WPS 两个 word 合并
  18. 经营自己的强项(manage your best)
  19. 实现VMware Horizo​​n+负载均衡(AVI)(一)
  20. matlab中变压器的励磁阻抗参数设置,【请教变压器零序阻抗与正序或负序阻抗之间的比例关系,如1台变压器的阻抗4.5%,哪他的零序阻抗通常是多少?】_阻抗 变压器_全球新能源网...

热门文章

  1. stardict 词典
  2. 【Java项目】好客租房——前台后台系统
  3. matlab绘制栅格地图
  4. 模仿百度搜索 :上下翻动、带有时间
  5. java集成aspose基本使用示例
  6. OSChina 周五乱弹 ——穷不过三代
  7. String.valueOf() 方法的使用
  8. python怎么爬取b站_【Python爬虫实例学习篇】——4、超详细爬取bilibili视频
  9. php 编辑器 插入视频,一段代码搞定KindEditor编辑器视频上传播放问题!!
  10. 基于TCP的聊天系统