linux 手误 rm 可能不需要跑路
对于 linux 下误删的文件,我们是否真的无法通过软件进行恢复呢?
误删文件还原可以分为两种情况
一种是删除以后在进程存在删除信息
一种是删除以后进程都找不到,只有借助于工具还原。
今天只分析文件被删除后,相关进程还存在的情况
这种一般是有活动的进程存在持续标准输入或输出,到时文件被删除后,进程 PID 依旧存在。这也是有些服务器删除一些文件但是磁盘不释放的原因
案例演示
创建一个文件
复制代码
用tail -f
打开rumenz.txt
文件
目的是让
rumenz.txt
被删除后,进程依然存在
复制代码
新开一个终端删除rumenz.txt
复制代码
找到占用rumenz.txt
的进程
lsof 查看删除的文件进程是否还存在。
如没有安装请自行 yum install lsof 或者 apt-get install lsof
复制代码
进程 ID 是 10222,从上面可以看出,当前文件状态为已删除(deleted)
恢复文件
/proc/10222/fd:进程操作的文件描述符目录
复制代码
开始恢复文件
复制代码
能恢复的根本原因
当程序运行时,操作系统会专门开辟一块内存区域,提供给当前进程使用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件,当我们执行
rm -f
删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,但是对于打开它的进程依然可见,即仍然可以使用先前发放的文件描述符读写文件,正是利用这样的原理,所以我们可以使用 I/O 重定向的方式来恢复文件。
原文链接:https://rumenz.com/rumenbiji/linux-rm-restore.html
微信公众号:入门小站
版权声明: 本文为 InfoQ 作者【入门小站】的原创文章。
原文链接:【http://xie.infoq.cn/article/90bd82cd93e7138e1d93c77a9】。文章转载请联系作者。
评论