当前位置: 首页 > news >正文

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

相关文章:

  • java - IDEA IDE - 设置字符串断点
  • vue笔记(三)
  • 48.Redis缓存设计与性能优化
  • 『第十章』仪态万千的雨燕:UIKit 和 SwiftUI
  • 1819_ChibiOS的互斥信号与条件变量
  • Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
  • 数据结构|基础知识定义
  • Linux系统下配置王爽汇编语言环境
  • 使用了百度OCR,记录一下
  • node.js - 上传文件至阿里云oss
  • Postman如何做接口自动化测试?
  • java.sql.SQLException: ORA-28000: the account is locked
  • C#8.0本质论第十章--合式类型
  • 【MySQL索引与优化篇】InnoDB数据存储结构
  • 【JavaScript】快速学习JS
  • 聊聊“JVM 调优JVM 性能优化”是怎么个事?
  • Transit path
  • javaswing/gui+mysql的学生信息管理系统
  • 代码随想录 | Day61 and 62
  • 77 全排列
  • 五年来首次!香港金管局斥资465.39亿港元购买美元
  • 印巴局势紧张或爆发军事冲突,印度空军能“一雪前耻”吗?
  • 龙翔被撤销南京市人大常委会主任职务,此前已被查
  • 宿州市委副书记任东已任市政府党组书记
  • 苹果手机为何无法在美制造?全球供应链难迁移
  • 王毅谈金砖国家开展斡旋调解的经验和独特优势