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