问题:手贱,清除/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 > 目标文件
对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。
当意外删除/Linux系统中的/tmp目录文件,且这些文件仍被进程使用时,可以使用lsof命令找到被删除但仍在使用的文件。通过查看进程的文件描述符,可以恢复这些文件。例如,找到PID为2006的celery进程,其文件描述符2关联着已删除的文件,可以通过/proc/2006/fd/2来访问并重定向恢复数据。
3096

被折叠的 条评论
为什么被折叠?



