linux文件删除原理

  1. 1 文件删除原理

1 文件删除原理

linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count和i_link。
i_count: 当前文件使用者的数量;
i_link: 硬链接的数量;
当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件硬链接的时候,对应i_link数就会增加。

对于删除命令rm而言,实际就是减少硬链接计数i_link。这里就会有一个问题,如果一个文件正在被某个进程引用,此时用户执行rm操作把文件删除了,那么会出现什么结果呢?当用户执行rm操作删除文件后,再执行ls或其他文件管理命令,无法找到这个文件了,但是引用这个删除文件的进程却可以继续正常执行,依然能够从文件中正确的读取及写入内容,这又是为什么呢?

这是因为rm操作只是将文件的i_link减少了,如果没其它的链接i_link就为0了,但由于该文件依然被进程引用,因此此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_link及i_count都为0的时候,这个文件才会真正被删除。

以上讲的i_link及i_count是文件被删除的条件,但当文件没有被引用时,执行了rm操作删除文件后是否还可以找回被删的文件呢?

前面说了,rm操作只是将文件的i_link减少了,或者置0了,实际就是将文件名到inode的映射删除了,此时,并没有删除文件的block数据块,此时如果及时停止机器工作,数据是可以找回的,但如果继续写入数据,那么新数据就可能会被分配到被删除数据的block数据块,那么文件就会被真正的删除,无法找回。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至yj.mapple@gmail.com

文章标题:linux文件删除原理

文章字数:541

本文作者:melonshell

发布时间:2021-03-05, 20:23:07

最后更新:2021-03-17, 14:17:10

原始链接:http://melonshell.github.io/2021/03/05/base1/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

相册