Linux下文件删除的原理
来源:互联网 发布:usb002虚拟打印机端口 编辑:程序博客网 时间:2024/06/06 06:47
Linux
是link
的数量来控制文件删除的。只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来讲,每个文件都有两个link计数器:i_count
和i_link
i
_count的意义是当前文件使用者(或被调用)的数量 当一个文件被某一个进程引用时,对应的这个值就会增加
i_nlink的意义是介质连接的数量(硬链接的数量) 当创建文件的硬链接的时候,这个值就会增加
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数据块,此时,文件就会被真正的回收了,那时就是神仙也没有办法了。- 可以理解为
i_count
是内存引用计数器,i_nlink
是硬盘的引用计数器
rm
命令原理
对于删除命令rm
而言,实际上就是减少磁盘引用计数i_nlink
。
i_count
是内存引用计数器,i_nlink
是硬盘的引用计数器
Q:如果一个文件正在被某个进程调用,而用户却执行rm
把文件删除了,那么会出现什么结果?当用户执行rm
删除文件后,再执行ls
或其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容,这又是为什么呢?
A:rm
操作只是将文件的i_nlink
减少了,如果没有其它的链接i_nlink
就为0了。但是由于该文件依然被进程引用,因此,此时文件对应的i_count
并不 为0,所以执行rm
操作,系统并没有真正的删除这个文件,只有当i_nlink
和i_count
都为0的时候,这个文件才会被真正的删除。也就是说,必须要解除该进程对该文件的调用,才能真正的删除。
Q:当文件没有被调用,执行了rm
操作之后,还能找回被删除的文件吗?
A:rm
操作只是将文件的i_nlink
减少了,或者说置为0,实际上就是将inode的链接删除了,此时,并没有删除文件的实体(block数据块),此时,如果及时停止机器工作,数据是可以找回的,如果继续写入数据,那么新数据可能会被分配到被删除的数据的block数据块,文件就被真正的回收了。
实际遇到的问题
Q:web服务器磁盘空间不够了,删除了所有无用日志还是显示磁盘空间不足,但是du -sh
发现磁盘空间的占用率很小,这是为什么呢?是什么导致磁盘空间不足?
A:删除命令只是删除了文件的一个i_nlink
,但是其他进程正在使用这些log文件,apache
或tomat
,重启这些服务就好啦!
阅读全文
0 0
- Linux下文件删除的原理
- Linux下文件删除的原理
- linux下文件被删除的恢复
- Linux下文件关联的实现原理
- Windows下文件删除原理
- linux下文件删除的原理精华讲解(考试题答案系列)
- linux下文件删除不了
- linux下文件的复制、移动与删除命令
- linux下文件的复制、移动与删除
- linux下文件的复制、移动与删除
- linux下文件的复制、移动与删除
- linux下文件的复制、移动与删除
- Linux下文件的复制、移动与删除
- linux下文件的复制、移动与删除
- linux下文件的复制、移动与删除
- linux下文件的复制、移动与删除命令
- linux下文件的复制、移动与删除
- linux下文件的复制、移动与删除命令
- ENIAC的历程
- 移动端身份证扫描识别说明
- Jquery对ajax的支持
- vue-cli 配置路由>>跳转传递参数
- OTcl和C++的区别
- Linux下文件删除的原理
- 基础问题积累
- 文章标题
- 如何启动Docker容器
- Cannot resolve method compose(rx.observable.transformer)
- 新博客
- android新版本的拍照并保存系统相册功能
- 基于C#的TCP文件传输 由于水平有限,代码粗糙请见谅,vs2015编写 文件发送附代码
- u3d破解版安装--mac下安装补充