Linux下删除文件的原理
Linux下文件删除的原理
Lniux下控制文件真正被删除的计数器
Linux是link的数量来控制文件删除的。只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来讲,每个文件都有两个link计数器:i_count和i_linki_count的意义是当前文件使用者(或被调用)的数量
当一个文件被某一个进程引用时,对应的这个值就会增加i_nlink的意义是介质连接的数量(硬链接的数量)
当创建文件的硬链接的时候,这个值就会增加
可以理解为
i_count是内存引用计数器,i_nlink是硬盘的引用计数器rm命令原理对于删除命令
rm而言,实际上就是减少磁盘引用计数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,重启这些服务就好啦!
Linux下删除文件的原理的更多相关文章
- (转载)在Linux下删除文件行末尾的^M符号方法
(转载)http://www.xinfengit.com/200907/1433646.html 由于DOS下的编辑器和linux(linux教程 linux培训 )编辑器对文件行末的回车符处理不一致 ...
- 在Linux下删除文件及文件夹(rm)
删除目录.文件 rm(remove) 功能说明:删除文件或目录.语 法:rm [-dfirv][--help][--version][文件或目录...]补充说明:执行rm指令可删除文件或目录,如欲删除 ...
- linux下删除文件夹的命令
使用rm -rf 目录名字 命令即可 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 eg 删除文件夹实例:rm -rf /var/log/httpd/acc ...
- linux下删除文件夹及下面所有文件
使用rm -rf 目录名字 命令即可 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 rm 不带参数 只能删除文件 rm test.txt mkdir /us ...
- linux下删除文件夹
---恢复内容开始--- 4月份左右接触linux,一直到现在,收获不多,原因是因为我没有足够的努力,其实这段时间以来我也很自责. 今天学习linux进程调度等知识,使用小红帽时,准备删除一个无用的文 ...
- linux下删除文件及文件夹命令
一.删除空文件与文件夹 rm或rmdir 文件/文件夹 二.删除非空文件与文件夹 rm -rf 文件/文件夹
- (转)Linux下查看文件和文件夹大小 删除日志
场景:在sts中执行自动部署时候maven提示No space left on device错误,后来经检查发现是磁盘空间满了,用下面的方法分析发现tomcat下面的logs目录占用了很大的空间,删除 ...
- linux 下删除乱码文件-乾颐堂
在linux下删除文件,遇到特殊字符是一件非常头疼的事情. 1. 如果文件名带 ‘-’ 或者‘--’这样的字符 删除办法为:rm -- 文件名 如文件名为:-pythontab.tgz 如果用普通方法 ...
- Linux下查看文件和文件夹大小 删除日志
场景:在sts中执行自动部署时候maven提示No space left on device错误,后来经检查发现是磁盘空间满了,用下面的方法分析发现tomcat下面的logs目录占用了很大的空间,删除 ...
随机推荐
- LOL one Key
玩英雄联盟的小伙伴们快点来,犀利的工具哦,注意一点哦,放技能的时候别按空格,不然放不出来.最后说一句这几天常说的话 新年快乐.. 下载地址:http://pan.baidu.com/s/1eQzJ8l ...
- ReactNative 告别CodePush,自建热更新版本升级环境
微软的CodePush热更新非常难用大家都知道,速度跟被墙了没什么区别. 另外一方面,我们不希望把代码放到别人的服务器.自己写接口更新总归感觉安全一点. so,就来自己搞个React-Native A ...
- 二叉排序树(BST)创建,删除,查找操作
binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...
- CSS3 border-image 属性
border-image 属性是一个简写属性,用于设置以下属性: border-image-source 用在边框的图片的路径,默认值none. 如:border-image-source:url(b ...
- Oracle数据库to_date()和to_char()的相关
select * from T_A a where a.begintime=to_date('2013-1-1','yyyy-mm-dd');和select * from T_A a where to ...
- 【先定一个小目标】Windows下Redis的安装使用
Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- ORACLE百万记录SQL语句优化技巧
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- gradle多模块开发
参考文档:gradle的官方userguide.pdf文档的chapter 55和chapter 56.gradle的多模块或项目开发一定不会比maven差,在我看来!大的项目分成多个模块来开发是常事 ...
- 美团HD(5)-选择城市
DJSelectCityViewController.m #import "DJSelectCityViewController.h" #import "DJConsta ...
- C++ vector容器find查询函数
vector< ); //查找1 if ( result == L.end( ) ) //没找到 cout << "No" << endl; else ...