Categories: Shell编程

Linux中删除文件的原理

在linux系统下文件的删除并不是简单的消失,而是一个涉及到复杂数据结构和操作系统设计的过程。在Linux环境中,这个过程更是有其独特的实现方式和原理。在本篇文章中,我们将详细探讨Linux中删除文件的原理。

Linux文件系统的基本结构

要理解Linux中删除文件的原理,我们首先需要了解Linux文件系统的基本结构。在Linux和类Unix系统中,文件系统是通过inode来管理的。每个文件都有一个唯一的inode,存储了文件的元数据,包括文件的大小、所有者、权限等。文件名和路径则被存储在目录的数据结构中,这些数据结构将文件名与inode号码关联起来。因此,当我们在Linux中访问一个文件时,系统首先会找到对应的inode,然后通过inode找到文件的实际内容。

链接计数和文件删除

Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 的意义是介质连接的数量(硬链接的数量);可以理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器。当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增加。

删除文件的过程

在Linux中删除一个文件,我们通常使用的是rm命令。这个命令的工作原理是,首先,它会在文件系统中找到与给定文件名关联的inode号码,然后,它会删除目录数据结构中的这个关联,这样就无法通过文件名找到这个inode了。接着,它会减少inode的链接计数,实际就是减少磁盘引用计数i_nlink。

删除文件的影响

当用户执行rm操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容。这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。

文件数据的处理

当文件被删除时,它的数据并不会立即从磁盘上消失。相反,inode和数据块会被标记为可用,可以被后续的写操作重写。这就是为什么有可能使用一些特殊的工具恢复被删除的文件。实际上,rm操作只是将文件的i_nlink减少了,或者说置0了,实际就是将文件名到inode的链接删除了,此时,并没有删除文件的实体即(block数据块),此时,如果及时停止机器工作,数据是可以找回的,如果此时继续写入数据,那么当新数据就可能会被分配到被删除的数据的block数据块,此时,文件就会被真正的回收了,那时就是神仙也没有办法了。

总的来说,Linux中删除文件的原理涉及到了文件系统的数据结构,以及如何通过这些数据结构管理和访问文件。

4.4
38
如何在Linux系统中有效地删除大文件目录
15个实用的FFmpeg命令:音视频转换和处理指南
嘻嘻

嘻嘻IT: 笔者是一个工作七八年的程序猿老鸟,从事涉及的技术栈主要包括PHP、Linux、Devops等,喜欢研究新技术,尝试新技术,提升技术自动化和开发效率,致力于write less,do more! 技术每年都会层出不穷,领域划分的越来越细,不可能学习所有的东西,保持对技术的好奇心,理解技术中核心思想,做一个有深度,有思想的开发!

Recent Posts

PHP Composer如何安装?

PHP Composer是PH…

2天 ago

MacOS上Missing xcrun的问题

在使用MacOS进行编程或开发…

2天 ago

CodeGeeX是一款基于大模型的全能AI编程助手

CodeGeeX是一个面向开发…

2天 ago

MySQL覆盖索引详解

在数据库性能优化中,索引是一个…

2天 ago

后端程序员必备:SQL优化的20条建议

SQL优化查询对于后端程序员来…

2天 ago