You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu v22服务器的/tmp目录中清理非root用户拥有的文件

如何在Ubuntu v22服务器的/tmp目录中清理非root用户拥有的文件

嗨,这个场景我太熟悉了——代码层面的清理总难免有漏网之鱼,靠系统自带机制或者精准命令兜底才是靠谱的办法。针对你的两个问题,给你两个实用方案:

方案一:调用系统启动时的tmp清理机制

Ubuntu 22.04是用systemd-tmpfiles来处理/tmp目录的启动清理的,默认规则是删除超过10天未访问的文件(不管所属用户)。如果你想让它专门清理ubuntu用户的文件,可以自定义规则:

  1. 创建一个自定义配置文件:
sudo nano /etc/tmpfiles.d/clean-ubuntu-tmp.conf
  1. 写入以下内容(作用是删除/tmp下所有属于ubuntu用户或组的文件、空目录):
# 清理/tmp下属于ubuntu用户/组的文件
F /tmp/* - ubuntu ubuntu - -
# 清理/tmp下属于ubuntu用户/组的空目录
D /tmp/* - ubuntu ubuntu - -
  1. 保存退出后,手动触发清理(和系统启动时的清理逻辑完全一致):
sudo systemd-tmpfiles --clean

如果想让这个规则每天自动运行,也可以把上述触发命令加到crontab里。

方案二:用find命令精准删除指定用户/组的文件

这个方案更直接,完全匹配你的需求——只删ubuntu用户/组的文件,保留root的。步骤如下:

  1. 先测试!先测试!先测试! 运行下面的命令看看哪些文件会被删除,确认没有误删目标:
find /tmp \( -user ubuntu -o -group ubuntu \) -print
  1. 如果测试结果没问题,换成删除命令:
find /tmp -depth \( -user ubuntu -o -group ubuntu \) -delete
  • -depth参数确保先删除目录里的文件,再删除目录本身,避免报错
  • 如果只想删文件、保留目录,加上-type f即可:
    find /tmp -depth \( -user ubuntu -o -group ubuntu \) -type f -delete
    
  1. 把这个命令加到crontab实现自动清理,比如每天凌晨2点执行:
    • 编辑root的crontab:
      sudo crontab -e
      
    • 加入一行:
      0 2 * * * /usr/bin/find /tmp -depth \( -user ubuntu -o -group ubuntu \) -delete
      

小提醒

  • 永远先用-print测试find的匹配结果,确认无误再用-delete
  • 用root权限运行这些命令,确保能顺利删除所有ubuntu用户的文件

备注:内容来源于stack exchange,提问作者wonder95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:59:34