前言

每当我们在生产环境服务器上执行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重定向的方式来恢复文件。

MySQL百一题库_「灵魂拷问」MySQL面试高频一百问(工程师方向)相关推荐

  1. MySQL百一题库_数据库应用MySQL试题题目及答案,课程2020最新期末考试题库,章节测验答案...

    一台原价2000元的洗衣机,先降价10%&2bsp;后来又提价10%,这时价格还是2000元.______.(判断对错) 淘气有中u本课外书,笑笑有u0本课外书.求淘气的课外书比笑笑少百分之几 ...

  2. ctf入门题库_「ctf比赛」web安全CTF比赛习题(初级) - seo实验室

    ctf比赛 一.Robot 访问URL,可以看到一张骚气十足的图片,然后就什么都没了...没了... 不可能啊,一张骚图片就想欺骗小编,想的太美(长得丑了) 题目说明写的是robot,想想多半是有猫腻 ...

  3. [灵魂拷问]MySQL面试高频100问(工程师方向)

    前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水. 前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面 ...

  4. mysql外部排序算法_「干货总结」程序员必知必会的十大排序算法

    绪论 身为程序员,十大排序是是所有合格程序员所必备和掌握的,并且热门的算法比如快排.归并排序还可能问的比较细致,对算法性能和复杂度的掌握有要求.bigsai作为一个负责任的Java和数据结构与算法方向 ...

  5. MySQL 面试高频一百问

    你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 juejin.cn/post/6844903894351347719 推荐:https://www ...

  6. 东软mysql期末题库_东软大三上学期实训笔记-mysql篇Day5完结篇

    mysql篇Day5完结篇 知识点讲解: 1.视图:view (1) 虚拟表.和普通表一样使用 (2) 作用: ① 视图存储在数据库中的查询语句.主要作用:安全原因.可以使复杂的查询语句容易理解与使用 ...

  7. 计算机二级mysql程序设计题库_计算机二级MySQL数据程序设计模拟试题

    计算机二级MySQL数据程序设计模拟试题 为了使广大考生在备战计算机等级考试时,更快的掌握相应知识点,下面是小编搜索整理的计算机二级MySQL数据程序设计模拟试题,供参考练习,预祝考生们考出自己理想的 ...

  8. [灵魂拷问]MySQL面试高频一百问

     作者:呼延十 链接:https://juejin.im/post/5d351303f265da1bd30596f9 前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多, ...

  9. mysql 隔离级别 快照_「数据库架构」三分钟搞懂事务隔离级别和脏读

    重要要点 仅凭ACID或非ACID来思考,还需要知道数据库支持的隔离级别. 标榜为"最终一致"的某些数据库可能返回与任何时间点不一致的结果. 一些数据库提供的隔离级别比您要求的更高 ...

最新文章

  1. 面试官让我讲讲Unicode,我讲了3秒说没了,面试官说你可真菜
  2. react 项目实战(六)提取布局组件
  3. C#调用浏览器的原理及实现浅析
  4. Silverlight与数据库的三种互操作[源代码]
  5. Mybatsi注解开发-基础操作
  6. Spring Session实战3
  7. python遍历集合_Python 高效遍历 集合所有子集的全组合
  8. 软件公司怎么定价它们的项目_如何为副项目定价
  9. c语言一级考试题目第四季度,模拟试题8套
  10. c语言中整型数组如何初始化,C语言数组空间的初始化详解
  11. 虚拟机安装Ubuntu无法通过Xshell登录
  12. Git (13) -- Git 分支 -- 分支的新建与合并
  13. MIMO技术中的各种增益分析
  14. 博客园app for xamarin android
  15. 随机过程(一):泊松过程的详细理解
  16. 图6——深度遍历无向图
  17. tenacity发生异常/失败/错误时重试retry机制,Python
  18. python核心编程 第3版_Python核心编程(第3版)PDF高清晰完整中文版
  19. Python django 猫咪管理系统
  20. 阿里大文娱深耕电影赛道,推出多部爆款电影

热门文章

  1. 介绍一个好用的静态图片合成为 gif 动画的在线网站
  2. SAP Spartacus ConsentTemplate 数据结构的暴露逻辑
  3. 一个SAP UI5 TreeTable控件的错误分析
  4. SAP Spartacus org unit页面的三种focus border及细节讨论
  5. Spring 基于 Java 的配置 - 如何不用Beans.xml照样描述bean之间的依赖关系
  6. Angular dependency injection - how injection is parsed
  7. Change default duration for Fiori Toast
  8. One Order CLOSING date修改后的执行原理
  9. Product API buffer
  10. 如何找到是哪一个进程占用了某个端口号