描述Linux下文件删除的原理?1
发布网友
发布时间:2023-11-15 07:24
我来回答
共3个回答
热心网友
时间:2024-10-24 12:54
磁盘中有一专门的区域,采用位图(也就是bit位标识)来标记所有block块的状态,例如如果被使用标记为1,没使用标记为0。
删除文件的Inode号的同时会该区域中inode使用的block相对应的位图标记为0,不会对实际的block去做清理或者其他工作。
当后面有新的inode在查找空间的block时,会去该区域中进行查找被标记为0的块。
这是关于linux必须知道的基础知识,学习linux有很多常见的知识和一些用不到的知识。因此学习Linux,需要一本实战类型的书籍。这样可以节约你很多的时间,还能掌握好Linux技术,更好的服务企业。给你推荐一本书籍《Linux就该这么学》,相信你会喜欢上。
热心网友
时间:2024-10-24 12:55
磁盘中有一专门的区域,采用位图(也就是bit位标识)来标记所有block块的状态,例如如果被使用标记为1,没使用标记为0。删除文件的Inode号的同时会该区域中inode使用的block相对应的位图标记为0,不会对实际的block去做清理或者其他工作。当后面有新的inode在查找空间的block时,会去该区域中进行查找被标记为0的块。关于Linux的知识,请查阅书籍《Linux就该这么学》
热心网友
时间:2024-10-24 12:55
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操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容。这又是为什么呢?
这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。
以上讲的i_nlink及i_count是文件删除的真实条件,但是当文件没有被调用时,执行了rm操作删除文件后是否还可以找回被删的文件呢?
前面说了,rm操作只是将文件的i_nlink减少了,或者说置0了,实际就是将文件名到inode的链接删除了,此时,并没有删除文件的实体即(block数据块),此时,如果及时停止机器工作,数据是可以找回的,如果此时继续写入数据,那么当新数据就可能会被分配到被删除的数据的block数据块,此时,文件就会被真正的回收了,那时就是神仙也没有办法了。