目录里已经找不到一个文件名,先前打开它的进程却仍持有该文件,这并不自动意味着删除没有生效。Linux的unlink(2)手册首先把操作对象说得很具体:unlink移除的是文件系统中的一个名称。文件何时结束存续,还涉及这个名称是否为最后一个链接,以及有没有进程仍打开着它。[1]
手册给出的第一种情形,同时具备两个条件:被移除的名称是该文件的最后一个链接,且没有进程打开该文件。此时文件被删除,它所使用的空间可供再用。因此,单凭“一个名称已经移除”,还没有完整表达文档中的空间回收条件。
第二种情形只改变其中一项:移除的仍是最后一个名称,但有进程保持文件打开。手册明确说明,该文件会继续存在,直到最后一个指向它的文件描述符关闭。这里关注的是最后一个相关描述符,不是随便关闭其中一个,也不是某个目录窗口已经刷新。
用一个本文自拟的时间顺序理解:进程先打开日志文件,随后文件最后一个名称被移除,而原进程仍持有打开的描述符。名称移除已经发生,文件仍可处于文档所述的存续阶段。这是机制说明,本文没有对任何机器删除日志、关闭进程或测量磁盘空间。
文档还单独说明,若名称指向符号链接,移除的是这个链接。因而,描述现象时应保留所讨论的对象,不能把“删了某个路径”一概解释成目标文件内容已经消失。对于仍有其他链接的文件,最后一个名称被移除这一前提也尚未成立。
本次于2026年10月10日读取Linux man-pages 6.19的页面,采用其DESCRIPTION说明;页尾的条目日期与HTML生成日期不充作首次发表日期。手册另列NFS协议的特殊问题,本文不把上述规则扩成所有远程文件系统行为的保证,也不提供实际系统的删除或回收处置方案。名称、链接和打开状态各自指向一项条件,将它们分开描述,才便于理解文件为什么还没有结束存续。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。