专栏首页芋道源码1024干货,不小心执行了rm -f,除了跑路,如何恢复?

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

点击上方“芋道源码”,选择“设为星标

做积极的人,而不是积极废人!

源码精品专栏

来源: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重定向的方式来恢复文件。

本文分享自微信公众号 - 芋道源码(javayuanma)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 阅读开源源码的正确姿势建议

    关于如何阅读开源社区源码,最近陆续有同学过来问我这个问题。前段时间,在HBase技术交流群里,大家也讨论过一些零散的方法,但都不系统。借着这个问题,我也认真回顾...

    芋道源码
  • 头条面试官问我看过哪些源码,然后就没有然后了

    最近,我的一位朋友在找工作,已经拿到了美团、快手等公司的Offer,准备选择其中一家入职了。

    芋道源码
  • 除了不要 SELECT * ,数据库还有哪些技巧

    应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。

    芋道源码
  • 29.C++- 异常处理

    C++内置了异常处理的语法元素 try catch try语句处理正常代码逻辑 当try语句发现异常时,则通过throw语句抛出异常,并退出try语句 catc...

    张诺谦
  • 基于repmgr的postgresql主备高可用方案

    本文比较基础,主要介绍postgresql开源高可用工具repmgr的部署和使用,初学者可以根据本文步骤一步一步做下去,废话不多说,直接进入主题,本文以两台机器...

    数据库架构之美
  • 只需4招,教你轻松打造更高效的开放数据项目

    美国很多地方政府都制定了开放式数据战略帮助他们增强政府公信力、提高政务透明度,同时也提高了民众的参与度,扩大了民众获取信息的渠道。这种“开放式数据战略”在美国经...

    灯塔大数据
  • python爬虫-简单使用xpath下载

      值的注意的是:在爬取接口时,要仔细看看 ,当时用的谷歌浏览器  当然也可以借用工具 EditPlus 这个比较好使,看个人喜好吧 用浏览器或Ediutplu...

    py3study
  • 【一课专栏】解构ODL引子 - ODL入坑之路·上篇

    做为一名无证驾驶ODL这辆SDN战车3年多的老司机,在基于ODL进行商用SDN控制器的研发过程中,总结了一些经验和教训,也有一些心得体会,借这个机会与大家一起交...

    SDNLAB
  • 一行js代码识别Selenium+Webdriver

    有不少朋友在开发爬虫的过程中喜欢使用Selenium + Chromedriver,以为这样就能做到不被网站的反爬虫机制发现。

    周小董
  • Cloud Studio 2.0 正式上线

    今日,CODING 创始人兼 CEO 张海龙受邀出席由极客邦科技和 InfoQ 中国 主办的顶级技术盛会 GMTC ,并在大会开幕时做了主题分享,向大家隆重推出...

    CODING研发管理系统

扫码关注云+社区

领取腾讯云代金券