麒麟系统清理/tmp等目录主要依赖systemd-tmpfiles(优先)和cron两种机制:systemd-tmpfiles通过/etc/tmpfiles.d/kylin-clean.conf等配置按生命周期规则自动管理,cron则通过root定时任务调用自定义脚本执行find删除、journalctl轮转等操作。

Linux 中查找 /tmp 临时目录的文件清理机制,关键不是“搜文件”,而是查系统用什么策略、谁在执行、按什么规则清理。不同发行版和 init 系统差异大,直接 find /tmp -name "*" 没用——得看背后的管理逻辑。
确认当前系统用的是哪种清理机制
先判断你的系统走的是 systemd 还是 cron 路线:
- 运行
systemctl list-timers | grep tmpfiles,如果看到systemd-tmpfiles-clean.timer处于 active 状态,说明走的是 systemd-tmpfiles 路线(Ubuntu 22.04+、RHEL/CentOS 8+、Debian 11+ 默认) - 运行
ls /etc/cron.daily/ | grep -E "(tmpwatch|tmpreaper)",如果存在对应脚本,大概率是旧版 RHEL/CentOS 6–7 或某些轻量发行版,用的是 cron + tmpwatch - 运行
mount | grep /tmp,若输出含tmpfs,说明 /tmp 是内存挂载,重启即清空,systemd 清理不会生效(只对磁盘挂载的 /tmp 有效)
查看具体的清理配置和规则
配置决定清理行为,重点查三类位置(优先级从高到低):
-
/etc/tmpfiles.d/*.conf:管理员自定义规则,优先级最高。运行
ls /etc/tmpfiles.d/看有没有 tmp.conf 或 myapp.conf -
/usr/lib/tmpfiles.d/tmp.conf:发行版默认规则(如
d /tmp 1777 root root 10d表示清理 10 天未访问的文件) -
/etc/cron.daily/tmpwatch(如存在):打开看脚本里写的天数,比如
10d /tmp或30d /var/tmp,注意-x参数后面跟着的排除路径(如/tmp/.X11-unix)
验证清理是否真在运行
光看配置不够,要确认它实际生效:
- 查最近一次清理日志:
journalctl -u systemd-tmpfiles-clean --since "2 days ago" | tail -20 - 手动触发并预览效果(不删文件):
sudo systemd-tmpfiles --clean --dry-run /tmp,会列出将被清理的文件 - 检查是否有进程正占用 /tmp 下的文件(导致无法删除):
lsof +D /tmp | head -20或fuser -v /tmp
快速定位残留大文件或异常堆积点
如果发现 /tmp 占用突增,可针对性排查:
- 找最大的 10 个文件:
sudo find /tmp -type f -size +10M -exec ls -lh {} \; 2>/dev/null | sort -k5 -hr | head -10 - 按修改时间排序看老文件:
sudo find /tmp -type f -mtime +30 -ls 2>/dev/null | head -10 - 检查常见“顽固”子目录:
ls -ld /tmp/systemd-private-* /tmp/hsperfdata_* /tmp/myapp-cache,这些常被排除在清理之外


















