当删除文件时,直观上能看到的就是文件名从目录中消失了,但是这一现象下,系统内部实际上做了很多事情。具体的实现,根据文件系统的不同而有所不同。在 ext3/4 下,大致会发生下面几件事情
- 当文件被删除时,存有该文件名和i节点号的目录项会被标注成未使用。一般情况下是把索引号设置为 0,这样文件名不再与任何文件信息相关联了。
- 由于目录项被更新,因此会更新父目录本身的最后读取时间、最后修改时间和最后状态变更时间
- i 节点中的引用数减1,若i节点号的引用数降为 0,则i节点在分配表中标记为未使用,i 节点中的文件 size、uid、gid,指向数据块的指针(Direct、Indirect、Double indirect、Triple Indirect Block Pointers)都会被清为 0
- 若有进程打开了该文件而没有关闭,则该被删除的文件依然处于使用状态。这时真正删除文件的状态会被延迟到文件不再使用后进行。处于这个状态下的文件还可以通过 /proc/$进程ID/$文件描述符 来找到
- 被删除文件的数据块在数据块的分配表中标记为未使用状态,但它的内容被保留了下来。