文件删除的原理
linux的文件名是存在父目录的block里面的,并指向这个文件的inode节点,这个文件的inode节点在标记指向存放这个文件的block的数据块。我们删除文件,实际上不是清除inode节点和block的数据,只是在这个文件的父目录里面的block中,删除了这个文件的名字,从而使这个文件名消失,并且无法指向这个文件的inode节点,当没有文件指向这个文件inode节点的时候,会同时释放inode节点存放这个文件的数据块,并更新inode MAP 和block MAP 今后让这些位置可以用于放置其它文件数据。
所以一般静态文件我们只需要用rm 命令删除其文件名即可删除文件。但是我们常常面对的是下图的这种情况。
说明:以上图形 i_link=2 和i_count=1
文件删除的条件:当i_link=0并且i_count=0 ,这时文件才能被删除。
linux是同过link的数量来控制文件删除的,只有当一个文件存在任何link的时候,这个文件才会删除。一般来说,每个文件都有2个link计数器:i_count和i_link。
i_count的意义是当前文件使用者(被调用)的数量,i_link的意义是介质链接的数量(硬链接的数量);可以理解为i_count是内存引用计数器,i_link是磁盘的引用计数器。
案例:
企业web服务器的磁盘满了,删除日志文件后发现还是满的!
原因就是磁盘空间还在被程序调用,并没有能删除,等程序调用完了就显示正常了。