问题:手贱,清除/tmp 目录中文件,刚删完,发现运行中服务,安装文件放在/tmp;原安装目录就是个软连接。又掉进坑里。安装文件都没有了。如何找回?挠头吧,怎么办
--------------------------------------------------------------------------------------------------------
解决办法:lsof
linux查看文件被哪些进程操作,可使用lsof命令;当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。
执行命令:lsof|grep delete
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
从上面的信息可以看到 PID 2006(celery)打开文件的文件描述符为 2。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下
从上面的信息可以看出,查看 /proc/2006/fd/ 就可以得到所要恢复的数据。
如果可以通过文件描述符查看相应的数据,那么就可以使用 I/O 重定向将其复制到文件中,如:
cat /proc/2006/fd/31 > 目标文件
对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。