作者:justmine

链接:http://www.cnblogs.com/justmine/p/10359186.html

前言

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

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

模拟场景

1、删除

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

> rm -f /root/selenium/Spider/MySql.Data.dll> ll /root/selenium/Spider/MySql.Data.dllls: 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重定向的方式来恢复文件。


●编号915,输入编号直达本文

●输入m获取文章目录

推荐↓↓↓

Linux学习

更多推荐25个技术类公众微信

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

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

  1. linux查看当前运行的进程

    可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息. ps命令能提供一份当前进程的快照.如果想状态可以自动刷新,可以 ...

  2. Linux 查看并杀掉tomcat进程

    启动/停止tomcat  bin/startup.sh #启动tomcat bin/shutdown.sh #停止tomcat tail -f logs/catalina.out #看tomcat的控 ...

  3. linux查看3306是哪个进程占用,linux查看端口占用

    发表于 2019-08-18 21:00:36 by 月小升 一. 例子 lsof -i:7000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ...

  4. Linux中的程序和进程,PID和PPID

    环境:Vmware Workstation:CentOS-6.4-x86_64 程序和进程: 1.程序:程序是静止的,程序就是磁盘上的一个文件. 2.进程:进程是一个正在执行的程序的实例. 3.进程是 ...

  5. linux查看已杀死的进程,linux 查看并杀死僵尸进程

    1.可以先试用top 命令查看是否有僵尸进程 在红色表示的地方  如果zombie 大于"0"表示服务器当前存在僵尸进程 2.如果存在僵尸进程,可以使用命令 ps -A -osta ...

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

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

  7. Linux查看c语言组件进程,Linux下查看进程IO工具iopp

    Linux下的IO检测工具最常用的是iostat,不过iostat只能查看到总的IO情况.如果要细看具体那一个程序点用的IO较高,可以使用iotop .不过iotop对内核版本和Python版本有要求 ...

  8. linux 查看防火墙对应的进程,Linux系统防火墙进程查看的实用方法

    Linux系统防火墙进程查看的实用方法 作者 HonestQiao 2008年03月17日 16:00 启动防火墙 1) 重启后生效 开启: chkconfig iptables on 关闭: chk ...

  9. linux 查看子进程和父进程

    pstree pid查看子进程 cat /proc/pid/status | grep PPid查看父进程

最新文章

  1. centos7通过yum安装nginx
  2. paip.语义分析--单字词名词表
  3. Hyperledger Fabric(构建你的第一个网络)
  4. 在ASP.NET使用javascript的一点小技巧
  5. LeetCode.11-装水最多的容器(Container With Most Water)
  6. 文件包含--简单的代码审计绕过
  7. 活动 | Unity带你亲临王者荣耀KPL总决赛,领略电竞的魅力
  8. 系统新模块增加需要哪些步骤_人工智能之父的问题解决策略:模块化
  9. 表空间(tableSpace) 段(segment) 盘区(extent) 块(block) 关系
  10. html文件很大,webpack打包之后的文件过大如何解决
  11. 正则表达式就这么简单!
  12. 1007 Maximum Subsequence Sum(25 分)
  13. 《JAVA程序设计教程 第7版》pdf 附下载链接
  14. 汽车VIN码超详细解析规则
  15. an怎么做淡入_切换场景的淡入淡出效果
  16. 大数据和云计算技术周报(第7期)
  17. 2022/1/29周末培训小结(hgame)
  18. kinect深度距离误差_TOF相机深度矫正基于Kinect v2
  19. 北斗GPS同步时钟(授时系统)技术原理详解
  20. Educational Codeforces Round 118 (Rated for Div. 2) C. Poisoned Dagger(二分或搜索)

热门文章

  1. mysql排序空放后面_python对mysql数据库的增删改查
  2. 习题7 7-7 字符排队
  3. mysql 社区版 innodb_MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)
  4. mysql经常问到的面试题_20道BAT面试官最喜欢问的JVM+MySQL面试题(含答案解析)...
  5. 岳阳师范学院计算机系刘威,计算机学院青年教师刘威博士发表高水平科研论文...
  6. 程序员面试100题之十三:求二叉查找树的镜像
  7. gitlab+jenkins 搭建
  8. 使用python读取txt坐标文件生成挖空矿山_探矿批量
  9. andrew ng machine learning week4 神经网络
  10. css实现垂直居中定位