Linux文件删除的原理

Linux是通过link的数量来控制文件的删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除,一般来说每个文件都有2个link计数器:i_count和i_nlink.

i_count的意义是当前文件使用者(或被调用)的数量i_nlink的意义是介质连接的数量(硬连接的数量);可以理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器

当一个文件被某一个进程引用时,对应i_count数就会增加,当创建文件的硬连接的时候,对应i_nlink数就会增加。

对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink.这里就会有一个问题,如果一个文件正在为某一个进程调用,二用户却执行rm操作把文件删除,会导致虽然文件删除了,但空间没有释放,重启进程即可。进程调用的文件要删除,也可以直接清空文件内的东西,而不是直接rm删除。

Linux文件删除的原理

i_link(硬链接数量)为0,文件就被删除

i_count(进程引用计数)为0,文件就被删除

文件删除的条件i_link=0且i_count=0