linux系统日志与缓存占满磁盘时,应优先清理可再生的非核心内容:用du和journalctl定位大户,限制systemd日志大小或按时间/容量清理,apt clean或dnf clean清包缓存,应用日志优先走logrotate或gzip归档,避免直接rm -rf。

Linux 系统日志和缓存占满磁盘空间很常见,但盲目 rm -rf 可能导致服务异常或系统无法启动。关键不是“删得快”,而是“删得准、留得稳”——优先清理可再生、非核心的日志与缓存,同时保留审计与排错所需的基本记录。
识别真正占用空间的大户
先定位问题,避免误删:
- 用
du -sh /var/log/* | sort -hr | head -10查看日志目录下最大的子目录(如journal、apt、nginx) - 运行
journalctl --disk-usage查看 systemd-journald 占用空间(常达 GB 级) - 执行
du -sh /var/cache/* | sort -hr | head -5检查 apt、dnf、pip 等缓存目录 - 注意:
/tmp和/var/tmp可能堆积临时文件,但部分服务依赖其存在,不建议直接清空整个目录
安全清理 systemd 日志(journal)
systemd-journal 是最常被忽视的“空间杀手”,但它支持精细控制,无需删除原始文件:
- 限制日志总大小:编辑
/etc/systemd/journald.conf,取消注释并修改这两行:SystemMaxUse=500MRuntimeMaxUse=200M
保存后重启服务:sudo systemctl restart systemd-journald - 立即释放空间(不删当前会话日志):
sudo journalctl --vacuum-size=300M(保留最新 300MB) - 按时间清理(更稳妥):
sudo journalctl --vacuum-time=2weeks,只保留最近两周日志 - ⚠️ 避免:
rm -rf /var/log/journal/*—— 可能破坏 journal 索引,导致journalctl报错或无法读取日志
清理包管理器缓存
apt、dnf、yum、pacman 的缓存长期不清理会累积数百 MB 到数 GB:
- Debian/Ubuntu:
sudo apt clean(彻底清空/var/cache/apt/archives/)
或sudo apt autoremove --purge(卸载无用依赖 + 清理残留配置) - RHEL/CentOS/Fedora:
sudo dnf clean all或sudo yum clean all - Arch Linux:
sudo pacman -Sc(只删旧版本包),sudo pacman -Scc(全清,谨慎使用) - 补充:检查
/var/lib/apt/lists/(Debian 系)是否含大量过期索引,可用sudo apt clean && sudo apt update重建
谨慎处理应用日志与临时文件
第三方服务(如 nginx、docker、mysql)的日志需按策略清理,不能一概而论:
- 确认日志是否启用 logrotate:
ls /etc/logrotate.d/ | grep -E "(nginx|docker|mysql)",若存在,优先检查其配置(如轮转周期、保留份数) - 手动压缩归档旧日志:
sudo find /var/log/ -name "*.log" -mtime +30 -exec gzip {} \;(压缩 30 天前日志,保留可读性) - 清理 Docker 构建缓存:
docker system prune -f(删停止容器、未用网络、悬空镜像、构建缓存)
加--volumes可删卷(慎用!数据会丢失) - 临时文件:用
sudo find /tmp -type f -mtime +7 -delete清理 7 天前普通文件;/var/tmp建议保留至少 30 天,因部分服务依赖其持久性











