rm -rf,删了文件空间却没释放?

前言

服务器磁盘告警,排查之后,如何排查,可以查看我这篇文章,需要清除掉服务器上没用的大文件x.log,但是当使用了rm -rf 删除服务下的大log文件,却发现还是告警,可用空间沒有变化。
有点慌,怎么办?

第一种方法:关闭进程

如果有什么不能解决的问题,那就重启下服务吧。

使用 rm -rf x.log 删除后,但是因服务仍在运行,空间不会立刻释放,需要重启或停止服务才能将空间释放。

可是线上可不能这样操作,该怎么办?

第二种方法:echo

别着急,使用echo命令来将文件清空。

echo "">a.log
# 使用带有空字符串的echo命令,并将其重定向到文件

文件空间会立刻释放。

第三种方法:truncate
truncate -s 0 x.log
# 指定目标文件字符大小为0
第四种方法:/dev/null
cp /dev/null x.log
# copy /dev/null 至 x.log文件

cat /dev/null> x.log
# cat + 重定向 /dev/null 至 x.log文件

dd if=/dev/null of=x.log
# dd 转换/dev/null 至 x.log

这里的三个方法都可以,至于为什么,看看/dev/null的特殊机制就明白了。

它是特殊的一个空设备文件,通常与重定向符号一起组合使用,用于丢弃进程不需要的输出流,或者作为输入流的合适空文件。

在Linux中,/dev/null可以看做是一个黑洞,所有不要的东西都可以往里面扔。

因此我们可以通过/dev/null来作为输入来清空文件的内容。

后记

知其然知其所以然,为什么rm -rf删除了文件后,服务还在运行,空间就不会被释放呢?

因为rm只是将文件链接解除,如果此时有进程在引用文件,系统是不会回收文件的。

此时如果先删除后将服务重启或者先停服务再删除日志也都可以将空间释放。

但是除了以上的几种方法,是不是还有别的方法呢?当然有咯,方法千万种,理解原因也就不难找到对策了。

源自https://zhuanlan.zhihu.com/p/342270747

你可能感兴趣的:(linux,服务器,运维)