针对rm -rf 删除的且在lsof能够看到的情况下
当误删了重要数据时,可以通过lsof |grep deleted命令查询出
user 18940 19112 polkitd 4u REG 0,38 0 1869210 /data/aaaa (deleted)
查出上述记录也可以通过lsof |grep aaaa来查出上述记录。
通过lsof命令能够恢复文件的原因是:当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。所有,如果该文件没有进程使用,那么文件用该方法则不能恢复。
通过命令cat /proc/18940/fd/4 > /data/aaaa 就可恢复删除的文件。其中18940是进程号,通过lsof |grep aaaa就可查看到,fd固定不变4为文件描述符,应用程序通过文件描述符识别该文件。从4u可以看出,也可通过进入/proc/18940/fd目录查看。不过要注意的是/data目录一定要存在,不然就会报没有文件的错误,我就是卡在这里,我恢复的路径不存在。