磁盘空间告警后需先用df -h定位满载分区,再用du命令精准识别大目录,针对journal日志须用journalctl --vacuum-size清理,清空日志文件应使用>或truncate而非rm,避免inode占用导致空间不释放。

磁盘空间告警后,df -h 显示根分区或 /var/log 已满,90% 以上的使用率基本意味着必须立刻动手——不是“要不要清”,而是“清什么、怎么清才安全不翻车”。
查哪块盘满了、哪个目录吃掉了空间
先别急着删,df -h 只告诉你“谁满了”,但不知道“为什么满”。得配合 du 定位大户:
-
du -sh /var/log/* | sort -hr | head -5:看/var/log下哪些子目录最大(journal、audit、sa 常年霸榜) -
du -sh /var/* 2>/dev/null | sort -hr | head -5:跳过权限错误,快速扫一遍/var全局 - 如果
du -sh *报Argument list too long,改用find . -maxdepth 1 -type d -print0 | xargs -0 du -sh | sort -hr
journal 日志占满 /var/log/journal 怎么办
systemd-journald 默认不限制日志大小,跑几个月就轻松吃掉几个 GB。直接删 /var/log/journal/xxx 目录会触发 journalctl 报错,必须用官方方式清理:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
journalctl --disk-usage:先看当前占多少 -
journalctl --vacuum-size=500M:只保留最新 500MB 日志(推荐,比按时间更可控) -
journalctl --vacuum-time=2w:只保留最近 2 周,但要注意:如果日志写入量极低,可能实际只留几 MB,不够用 - 永久限制:编辑
/etc/systemd/journald.conf,取消注释并设SystemMaxUse=500M和MaxRetentionSec=2week,再systemctl restart systemd-journald
清空大日志文件但不删进程句柄
很多服务(如 nginx、tomcat)持续写日志,rm access.log 看似释放了空间,其实 inode 还被进程占着,磁盘空间并不会真正回收。正确做法是清空内容而非删除文件:
-
> /var/log/nginx/access.log:最快,等效于echo -n "" > file,注意不要漏掉重定向符号>前的空格 -
truncate -s 0 /var/log/nginx/error.log:更明确,语义清晰,适合脚本批量操作 - 批量清空所有
.log:for f in /var/log/*.log; do truncate -s 0 "$f"; done(加引号防空格路径出错) - 绝对不要用
rm -f *.log后再touch,这会改变 inode,部分服务需 reload 才能继续写,有风险
删文件前绕开 Argument list too long
当 rm -f *.log 报这个错,说明当前目录下匹配文件太多(通常上万),shell 展开参数超限。这时 xargs 或 find -exec 是唯一可靠路径:
-
find /var/log -name "*.old" -type f -mtime +30 -delete:安全,-delete是 find 内置动作,不依赖 shell 展开 -
find /tmp -name "core.*" -type f -print0 | xargs -0 rm -f:用-print0和-0处理含空格/换行的文件名 - 避免
ls | xargs rm:如果文件名含空格或特殊字符,rm会误判参数边界,直接崩
真正麻烦的从来不是命令记不住,而是删完发现某个服务挂了、日志不写了、或者 df 显示空间没变——那八成是删了还在被进程占用的文件,或者清空时忘了 > 里那个关键的空格。










