<p>清理系统临时文件和日志需区分删除与清空:/tmp、/var/tmp 可安全清空但须跳过 systemd-private-* 目录;/var/log 中活跃日志须用 >、truncate 或 /dev/null 清空而非删除;旧归档日志可按时间批量删除;用户缓存与回收站清理前需关闭相关应用。</p>

本地系统长期运行后,/tmp、/var/tmp 和 /var/log 目录会堆积大量临时文件和日志,轻则占用数GB磁盘空间,重则导致服务写入失败或系统响应迟缓。这些文件大多可安全清理,但必须区分“删除”与“清空”场景——正在被进程打开的日志文件不能直接 rm,否则可能中断服务写入。
清理系统级临时目录
执行前确保没有关键服务正依赖 /tmp 中的运行时文件(如 Docker 构建缓存、某些 GUI 应用临时 socket)。
sudo rm -rf /tmp/* /var/tmp/*
这一步会彻底清空两个系统级临时目录。注意:【/tmp 下部分子目录(如 systemd-private-*)可能被 systemd 服务独占锁定,强行删除会导致对应服务异常,应跳过不删】。
清理完成后,建议立即重建空目录结构:sudo mkdir -p /tmp /var/tmp && sudo chmod 1777 /tmp /var/tmp。
安全清空正在写入的日志文件
当某个服务(如 nginx、mysql、rsyslog)持续向 /var/log/myapp.log 写入时,直接删除该文件会使服务继续往已删除的 inode 写数据,磁盘空间不会释放,且新日志无法生成。此时必须清空内容而非删除文件。
方法一:使用重定向截断(最简)
sudo > /var/log/syslog
方法二:使用 truncate(对超大文件更高效)
sudo truncate -s 0 /var/log/auth.log
方法三:用 /dev/null 覆盖(适合脚本批量操作)
sudo cat /dev/null > /var/log/kern.log
三种方式效果一致:保留文件路径、权限、SELinux 上下文,仅将内容置空。任意一种执行后,服务会立刻在原文件中追加新日志。
按时间批量清理旧日志文件
适用于 /var/log 下已归档的 .log.1、.log.gz、.log.20250701 等非活跃日志文件,它们不再被任何进程打开,可直接删除。
第一步:定位30天前的旧日志
sudo find /var/log -name "*.log.*" -mtime +30
第二步:预览确认无误后执行删除
sudo find /var/log -name "*.log.*" -mtime +30 -delete
第三步:同步清理压缩包
sudo find /var/log -name "*.gz" -mtime +30 -delete
⚠️ 注意:不要对 *.log 主文件(如 messages、secure)直接用 -mtime 删除,它们是当前活跃日志,应走“清空”流程而非删除。
清理用户级临时缓存与回收站
这部分不占用 root 权限,但常被忽略——~/.cache 可能藏有 GB 级浏览器、IDE 或 Flatpak 缓存;~/.local/share/Trash 是图形界面删除文件的真实落点。
rm -rf ~/.cache/*
rm -rf ~/.local/share/Trash/*
这一步操作起来很简单,直接把文件拖进去就行。但【务必先关闭 Chrome、Firefox、JetBrains 等正在运行的应用,否则可能触发缓存重建失败或界面卡死】。

















