37人参与 • 2026-09-09 • Linux
不要直接 rm -f app.log 删除进程正在写入的日志文件!
rm 只是删除文件名,进程依旧持有文件句柄继续写,磁盘空间不会释放,需要重启 / 关闭对应进程才释放空间。
出现大量 deleted 文件用 lsof | grep deleted 查看。
# 方式1 > app.log # 方式2 cat /dev/null > app.log
适用:日志太大,直接清空全部内容;正在写入的日志文件安全清空。
不要用 rm app.log 再 touch,会造成业务句柄异常。rm 会产生 deleted 幽灵文件,空间不释放。
sed -i '1,100d' app.log
sed -n '101,$p' app.log > app.log.tmp cp app.log.tmp app.log rm -f app.log.tmp
注意:复制间隙会丢失极少量日志;高吞吐不建议频繁手动删头部。
把日志只保留最后 2000 行,前面全部丢弃
tail -n 2000 app.log > app.log.tmp cp app.log.tmp app.log rm -f app.log.tmp
查找 7 天以前的 .log 文件删除(日志归档文件,已经不再被进程打开)
# 查找 /var/log 下7天前日志文件删除 find /var/log -type f -name "*.log" -mtime +7 -delete
参数说明:
-mtime +7:修改时间大于 7 天-type f:只找普通文件千万不要对正在被进程写入的活跃日志执行 find 删除!会产生 deleted 幽灵文件。
日志暂时不能删,先压缩节省磁盘
gzip old-app.log # 效果:`old-app.log` → `old-app.log.gz`,原文件被删除 gzip -c old-app.log > old-app.log.gz #压缩保留原文件 gunzip old-app.log.gz #解压,删除gz gunzip -c old-app.log.gz > file #解压保留gz zcat old-app.log.gz #查看gz内容 zgrep "xxx" old-app.log.gz #搜索gz内关键字 tar -zcvf old-app.log.tar.gz dir/ #打包压缩目录 tar -zxvf old-app.log.tar.gz #解压目录包
# 查看已经删除,但进程还打开的文件 lsof | grep deleted
处理:找到对应业务进程,重启进程,磁盘空间立刻释放。
业务不可重启:进入该文件的 /proc/<pid>/fd/ 目录,找到对应 fd,执行 > fd编号 清空文件
只 rm 文件,不重启进程,磁盘空间不会释放。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论