Linux &引用;lsof";将文件显示为(已删除),但我仍然可以在文件系统中看到它

Linux &引用;lsof";将文件显示为(已删除),但我仍然可以在文件系统中看到它,linux,lsof,Linux,Lsof,在Linux 2.6.27中: 从“lsof”输出中,我看到一个进程用一个(已删除的)文件保持打开的fd。奇怪的是,我仍然可以使用“ls”在文件系统中看到文件。为什么呢 谢谢。只要某个进程打开了文件,文件就不会被删除。当文件关闭时,内核首先检查打开该文件的进程数。如果此计数已达到0,内核将检查链接计数;如果为0,则删除文件的内容 引用曼恩的话: 如果名称是指向文件的最后一个链接,但任何进程仍有 打开的文件将一直存在,直到最后一个文件 引用它的描述符已关闭 当文件被删除时,它将不会在文件系统上显示

在Linux 2.6.27中:

从“lsof”输出中,我看到一个进程用一个(已删除的)文件保持打开的fd。奇怪的是,我仍然可以使用“ls”在文件系统中看到文件。为什么呢


谢谢。

只要某个进程打开了文件,文件就不会被删除。当文件关闭时,内核首先检查打开该文件的进程数。如果此计数已达到0,内核将检查链接计数;如果为0,则删除文件的内容

引用曼恩的话:

如果名称是指向文件的最后一个链接,但任何进程仍有 打开的文件将一直存在,直到最后一个文件 引用它的描述符已关闭


当文件被删除时,它将不会在文件系统上显示。但是,很可能在同一位置创建了另一个具有相同文件名的文件


您可以检查
lsof
ls-i
中显示的节点号,以检查它们是否真的是同一个文件。

表示取消链接总是删除名称,有时还会删除文件。如果您可以在
ls
中看到该文件,则该名称尚未删除。所以事情不是这样的。您可以通过在一个进程中打开一个文件,然后在另一个进程中删除它并执行
ls
来测试这一点。