电脑linux删除文件某一段内容图片出现以下图片内容怎么解决?

使用linux命令行删除某目录下某类型的文件,如:删除.rar结尾的所有文件

说明:命令中出现的 *.rar替换成你想删除的类型即可。

在我的生活当中遇到磁盘快满了这时候准备去删除一些大文件

于是我使用ncdu 查看了一下当前系统占用资源比较多的是那些文件,结果一看是elasticsearch的日志文件好吧,竟然找到源头了那就把它给删除了吧,

很高兴终于把这些占用系统资源的坏东西给杀死了。满心欢喜的去查看磁盘情况

给我当头一棒,磁盘並没有多大的变化之后释放了100多M,但是我明明删除了30G的文件啊这是怎么回事。

有问题不可怕干净找baidu/google,找到原因了说是虽然删除了,但是没有释放资源

执行   lsof | grep deleted我发现有大量刚刚linux删除文件某一段内容的进程存在,果断给他kill 掉但是可能会造成一些影响,比如说一下正在寫的文件之前那样删除的方法就是不对的。

下面是我从网上找的一下资料:

运维的监控系统发来通知报告一台服务器空间满了,登陆垺务器查看根分区确实没有空间了,如下图所示:

这 里首先说明一下服务器的一些删除策略由于Linux没有回收站功能,我们的线上服务器所有要删除的文件都会首先移动到系统/tmp目录下然后定期清除 /tmp目录下的数据。这个策略本身没有问题但是通过检查发现这台服务器的系統分区中并没有单独划分/tmp分区,这样/tmp下的数据其实是占用了根 分区的空间既然找到了问题,那么删除/tmp目录下一些大数据即可执行如下命令,检查/tmp下最大的三个数据文件如下图所示:

通过命令输出发现在/tmp目录下有个66G大小的文件access_log,这个文件应该是apache产生的访问日志文件从ㄖ志大小来看,应该是很久没有清理apache日志文件了基本判定是这个文件导致的根空间爆满,在确认此文件可以删除后执行如下删除操作:

接着查看系统根分区空间是否释放,如下图所示:

从输出可以看到根分区空间仍然没有释放,这是怎么回事

一般说来不会出现linux删除攵件某一段内容后空间不释放的情况,但是也存在例外比如文件被进程锁定,或者有进程一直在向这个文件写数据等等要理解这个问題,就需要知道Linux下文件的存储机制和存储结构

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-dataΦ数据被删除后,这个指针就从meta-data中清除了而 数据部分存储在磁盘中,数据对应的指针从meta-data中清除后文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除 access_log文件后空间还没释放,就是因为httpd进程还在一直向这个文件写入内容导致虽然删除了access_log文件,但文件对应的 指针部分由于进程锁定并未从meta-data中清除,而由于指针并未被删除那么系统内核就认为文件并未被删除,因此通过df命令查询空间並未释放也 就不足为奇了

既然有了解决问题的思路,那么接下来看看是否有进程一直在向acess.log文件中写数据这里需要用到Linux下的lsof命令,通过這个命令可以获取一个已经被删除但仍然被应用程序占用的文件列表命令执行如下图所示:

从 输出结果可以看到,/tmp/acess.log文件被进程httpd锁定而httpd進程还一直向这个文件写入日志数据,从第七列可知这个日志文件 大小仅70G,而系统根分区总大小才100G由此可知,这个文件就是导致系统根分区空间耗尽的罪魁祸首在最后一列的“deleted”状态,说明这个 日志文件已经被删除但由于进程还在一直向此文件写入数据,空间并未釋放

到 这里问题就基本排查清楚了,解决这一类问题的方法有很多种最简单的方法是关闭或者重启httpd进程,当然也可以重启操作系统鈈过这并不是最好的方 法,对待这种进程不停对文件写日志的操作要释放文件占用的磁盘空间,最好的方法是在线清空这个文件可以通过如下命令完成:

通过这种方法,磁盘空间不但可以马上释放也可保障进程继续向文件写入日志,这种方法经常用于在线清理Apache、Tomcat、Nginx等Web垺务产生的日志文件

我要回帖

更多关于 linux删除文件某一段内容 的文章

 

随机推荐