来源:http://rrd.me/ej562

  • 前言

  • 模拟场景

  • 1、删除

  • 2、恢复

  • 刨根问底

  • 总结

前言

每当我们在生产环境服务器上执行 rm 命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有 bug,呵呵。

那么如果真的删除了不该删除的文件,比如数据库、日志或执行文件,咋办呢?欲知后事如何,请仔细看完本篇文章。

模拟场景

1、删除

误删除服务器目录 / root/selenium/Spider 下的 MySql.Data.dll 文件:

> rm -f /root/selenium/Spider/MySql.Data.dll
> ll /root/selenium/Spider/MySql.Data.dll
ls: cannot access /root/selenium/Spider/MySql.Data.dll: No such file or directory

2、恢复

(1)、使用 lsof 命令查看当前是否有进程打开 / root/selenium/Spider/MySql.Data.dll 文件:

> lsof | grep /root/selenium/Spider/MySql.Data.dll

从上面可以看出,当前文件状态为已删除(deleted)。

(2)、查看是否存在恢复数据:

/proc/13067/fd:进程操作的文件描述符目录。
86:文件描述符。

> cat /proc/13067/fd/86

(3)、使用 I/O 重定向恢复文件

> cat /proc/23778/fd/86 > /root/selenium/Spider/MySql.Data.dll
> ls -l /root/selenium/Spider/MySql.Data.dll
-rw-r--r-- 1 root root 702464 Feb 10 12:03 /root/selenium/Spider/MySql.Data.dll

重新运行程序:

说明恢复的文件没有问题。

刨根问底

前面的模拟场景演示了恢复文件的整个过程,那么原理是什么,在什么情况下,文件才是可恢复的。

在 Linux 系统中,每个运行中的程序都有一个宿主进程彼此隔离,以 /proc / 进程号来体现(Linux 本质上就是一个文件系统),比如:ls -l /proc/13067 查看进程 PID 为 13067 的进程信息。

当程序运行时,操作系统会专门开辟一块内存区域,提供给当前进程使用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件,当我们执行 rm -f 删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,但是对于打开它的进程依然可见,即仍然可以使用先前发放的文件描述符读写文件,正是利用这样的原理,所以我们可以使用 I/O 重定向的方式来恢复文件。

总结

如果不小心误删了文件,不要着急,首先使用 lsof 查看打开该文件的进程,然后再使用 cat /proc / 进程号 / fd / 文件描述符] 查看恢复数据,最后使用 I/O 重定向的方式来恢复文件。


linux-rm -f如何恢复相关推荐

  1. 不小心执行了rm -f 如何恢复

    因为有过在公司测试环境下不小心执行了rm -rf /*命令,然后花了一整个通宵的时间来恢复数据的惨痛经历.所以看到这篇文章就转载一下,方便以后使用. 不小心执行了rm -f,除了跑路,如何恢复

  2. linux rm -f rm -rf 命令:删除文件和文件夹

    删除文件使用实例:  rm -f  python.py 将会强制删除python.py这个文件 删除目录使用实例:  rm -rf  /home/song/wahaha  将会删除/home/song ...

  3. Linux rm -rf * 文件恢复记

    原文地址:http://blog.csdn.net/huoyunshen88/article/details/19006419 手太快,肠子都毁清了.本来是删除一个文件 rm path/myfile. ...

  4. linux 查看正在执行的进程的pid编号_不小心执行 rm f,该如何恢复?

    作者:justmine 链接:http://www.cnblogs.com/justmine/p/10359186.html 前言 每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小 ...

  5. Linux系统中如何恢复使用rm -f 删除的文件

    第一步:使用 rm -f 文件删除命令删除某一个文件,比如我删除目录/home/saas-cloud/finance/下的 cfpu-saas-finance-provider-0.0.1.jar文件 ...

  6. 如何查看dll被那个service占用_不小心执行 rm -f,该如何恢复?

    原创:程序员的那些事 前言 每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有 bug,呵呵. 那么如果真的删除了不该 ...

  7. 干货,不小心执行了rm -f,除了跑路,如何恢复?

    作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...

  8. 不小心执行 rm -f,该如何恢复?

    戳蓝字"CSDN云计算"关注我们哦! 源 / 程序员的那些事 前言 每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是 ...

  9. linux rm 命令删除文件恢复_Linux之恢复误删除文件

    前言 每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有 bug. 那么如果真的删除了不该删除的文件,比如数据库.日志 ...

  10. Linux下通过rm -f删除大量文件时提示-bash: /bin/rm: Argument list too long的解决方法...

    Linux下通过rm -f删除/var/spool/postfix/maildrop/中大量的小文件时提示: "-bash: /bin/rm: Argument list too long& ...

最新文章

  1. poj 2392 dp 不是很懂哎!!!Space Elevator
  2. powershell共享服务器写文件,Windows PowerShell:共享您的脚本 - 轻松实现
  3. Connections between cities
  4. Android虚拟机-Dalvik VM架构
  5. VMware NAT模式
  6. VC++判断是否连网
  7. Apache和Tomcat的区别与联系
  8. impala查询语句_impala 下的SQL操作
  9. json-smart 使用示例(推荐fastjson)
  10. 计算机用几个字节储存,GB2312编码的字符在计算机中存储时使用几个字节
  11. [转]李商隐《嫦娥》赏析
  12. RV1126--qt实现rtmp拉流(转换本机rtsp)
  13. 西安理工大学计算机考研数据结构863整理总结
  14. Promox VE(PVE) 连接wifi配置
  15. sql server数据库备份单个表的结构和数据生成脚本
  16. 如何评价双CPU的电脑?好用吗?
  17. 《MySQL数据操作与查询》- 维护学生信息、老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息
  18. 苹果WWDC2017 开发者大会,机器学习已得到广泛应用
  19. 进销存设计与分析_成本核算(7)
  20. Kafka-eagle 安装教程

热门文章

  1. 前端移动端测试 查看控制台
  2. 分解质因数Java_Java 分解质因数
  3. Windows8内核模式下开发NDIS应用-NDIS Filter讲解
  4. C++ Reference: Standard C++ Library reference: C Library: cstdio: stderr
  5. strace praticle
  6. 计算机网络管理工程师含金量高吗,软考中级哪个含金量高?
  7. Python实现梯度下降
  8. 行列式的基本定义与性质(笔记)
  9. Fire And Motion(英文原版) [转]
  10. 【项目一】医疗实战-传智健康