对于程序猿来说,最怕碰到的编程第一难肯定是“bug”了,那么第二呢?今天暂且先来谈谈rm-f操作后该怎么办?
面对执行rm-f操作后,很多人的第一想法就是赶紧订机票出国。但是下面的操作获取可以让你省一笔机票钱了。
我们先来模拟一下从删除到恢复的整个过程。
01删除
服务器目录/roots/selenium/Spider/MySql.data.dll文件删除
02恢复
使用lsof命令查看是否有进程打开/root/selenium/Spider/MySql.Data.dll文件:
从上面可以看出,当前文件状态为已删除(deleted)。
之后就要查看是否存在恢复数据:
然后就要使用I/O重定向恢复文件:
最后就是运行了:
完美
很多程序猿可能就会问了,这是怎么实现的呢??(我天朝大国的程序员就是这么好学),其实啊原理很简单:
在Linux系统中,每个运行中的程序都有一个宿主进程彼此隔离,以/proc/进程号来体现(Linux本质上就是一个文件系统),比如:ls-l/proc/查看进程PID为的进程信息。
当程序运行时,操作系统会专门开辟一块内存区域,提供给当前进程使用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件,当我们执行rm-f删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,但是对于打开它的进程依然可见,即仍然可以使用先前发放的文件描述符读写文件,正是利用这样的原理,所以我们可以使用I/O重定向的方式来恢复文件。
所以啊,如果你不小心执行了rm-f操作,别急着预订出国的机票,先看看我们的方法能不能管用吧。