如何在Ubuntu v22服务器的/tmp目录中清理非root用户拥有的文件
如何在Ubuntu v22服务器的/tmp目录中清理非root用户拥有的文件
嗨,这个场景我太熟悉了——代码层面的清理总难免有漏网之鱼,靠系统自带机制或者精准命令兜底才是靠谱的办法。针对你的两个问题,给你两个实用方案:
方案一:调用系统启动时的tmp清理机制
Ubuntu 22.04是用systemd-tmpfiles来处理/tmp目录的启动清理的,默认规则是删除超过10天未访问的文件(不管所属用户)。如果你想让它专门清理ubuntu用户的文件,可以自定义规则:
- 创建一个自定义配置文件:
sudo nano /etc/tmpfiles.d/clean-ubuntu-tmp.conf
- 写入以下内容(作用是删除/tmp下所有属于ubuntu用户或组的文件、空目录):
# 清理/tmp下属于ubuntu用户/组的文件 F /tmp/* - ubuntu ubuntu - - # 清理/tmp下属于ubuntu用户/组的空目录 D /tmp/* - ubuntu ubuntu - -
- 保存退出后,手动触发清理(和系统启动时的清理逻辑完全一致):
sudo systemd-tmpfiles --clean
如果想让这个规则每天自动运行,也可以把上述触发命令加到crontab里。
方案二:用find命令精准删除指定用户/组的文件
这个方案更直接,完全匹配你的需求——只删ubuntu用户/组的文件,保留root的。步骤如下:
- 先测试!先测试!先测试! 运行下面的命令看看哪些文件会被删除,确认没有误删目标:
find /tmp \( -user ubuntu -o -group ubuntu \) -print
- 如果测试结果没问题,换成删除命令:
find /tmp -depth \( -user ubuntu -o -group ubuntu \) -delete
-depth参数确保先删除目录里的文件,再删除目录本身,避免报错- 如果只想删文件、保留目录,加上
-type f即可:find /tmp -depth \( -user ubuntu -o -group ubuntu \) -type f -delete
- 把这个命令加到crontab实现自动清理,比如每天凌晨2点执行:
- 编辑root的crontab:
sudo crontab -e - 加入一行:
0 2 * * * /usr/bin/find /tmp -depth \( -user ubuntu -o -group ubuntu \) -delete
- 编辑root的crontab:
小提醒
- 永远先用
-print测试find的匹配结果,确认无误再用-delete - 用root权限运行这些命令,确保能顺利删除所有ubuntu用户的文件
备注:内容来源于stack exchange,提问作者wonder95
相关产品推荐
相关产品推荐

