Lniux下控制文件真正被删除的计数器node
Linux
是link
的数量来控制文件删除的。只有当一个文件不存在任何link的时候,这个文件才会被删除。通常来说,每一个文件都有两个link计数器:i_count
和i_link
linux
i_count
的意义是当前文件使用者(或被调用)的数量i_nlink
的意义是介质链接的数量(硬连接的数量)能够理解为i_count
是内存引用计数器,i_nlink
是硬盘的引用计数器web
rm
命令原理apache
对于删除命令rm
而言,实际上就是减小磁盘引用计数i_nlink
。服务器
Q:若是一个文件正在被某个进程调用,而用户却执行rm
把文件删除了,那么会出现什么结果?当用户执行rm
删除文件后,再执行ls
或其余文件管理命令,没法再找到这个文件了,可是调用这个删除的文件的进程却在继续正常执行,依然可以从文件中正确的读取及写入内容,这又是为何呢?日志
A:rm
操做只是将文件的i_nlink
减小了,若是没有其它的连接i_nlink
就为0了。可是因为该文件依然被进程引用,所以,此时文件对应的i_count
并不为0,因此执行rm
操做,系统并无真正的删除这个文件,只有当i_nlink
和i_count
都为0的时候,这个文件才会被真正的删除。也就是说,必需要解除该进程对该文件的调用,才能真正的删除。code
Q:当文件没有被调用,执行了rm
操做以后,还能找回被删除的文件吗?进程
A:rm
操做只是将文件的i_nlink
减小了,或者说置为0,实际上就是将inode的连接删除了,此时,并无删除文件的实体(block数据块),此时,若是及时中止机器工做,数据是能够找回的,若是继续写入数据,那么新数据可能会被分配到被删除的数据的block数据块,文件就被真正的回收了。内存
实际遇到的问题web服务器
Q:web服务器磁盘空间不够了,山除了全部无用日志仍是显示磁盘空间不足,可是du -sh
发现磁盘空间的占用率很小,这是为何呢?是什么致使磁盘空间不足?
A:删除命令只是删除了文件的一个i_nlink
,可是其余进程正在使用这些log文件,apache
或tomat
,重启这些服务就好啦!