一、系统级临时文件清理规则(systemd管理,CentOS 7及以上)
CentOS 7及以上版本使用systemd-tmpfiles-clean.service
管理临时文件清理,核心配置文件位于/usr/lib/tmpfiles.d/tmp.conf
(系统默认规则)。若需自定义,可通过以下方式扩展:
/etc/tmpfiles.d/
目录下创建自定义配置文件(如custom-cleanup.conf
),添加符合tmpfiles.d
语法的规则。例如,保留/tmp
下以tomcat
开头的目录(避免Tomcat上传目录被清理),可添加:x /tmp/tomcat.*
其中,x
表示“排除”(不清理匹配路径),支持shell风格通配符(如*
、?
)。v /path permissions owner group age
:清理指定路径下age
(如10d
表示10天前)未修改的文件/目录;x /path
:排除指定路径(不清理);X /path
:排除指定路径自身(但清理其子内容)。systemd-tmpfiles-clean.service
使规则生效:sudo systemctl restart systemd-tmpfiles-clean.service
或手动触发清理:sudo systemd-tmpfiles --clean
二、日志文件清理规则(logrotate工具)
日志文件是磁盘空间占用的主要来源之一,通过logrotate
可实现定期轮转、压缩和删除旧日志。自定义规则需编辑/etc/logrotate.conf
(全局配置)或在/etc/logrotate.d/
下创建应用特定配置(如nginx
、mysql
):
/var/log/*.log
):/var/log/*.log {
daily # 每日轮转
missingok # 忽略缺失日志文件
rotate 7 # 保留7个旧日志
compress # 压缩旧日志(gzip)
notifempty # 空日志不轮转
create 0640 root root # 新日志权限与所有者
}
size 100M
:当日志文件超过100MB时立即轮转(可替代daily
);postrotate/endscript
:轮转后执行的命令(如重启服务刷新日志句柄):postrotate
systemctl restart nginx
endscript
logrotate -vf /etc/logrotate.conf
强制运行并显示详细过程。三、YUM/DNF缓存清理规则
YUM(CentOS 7及以下)或DNF(CentOS 8及以上)的缓存会占用/var/cache/yum
(或/var/cache/dnf
)目录,可通过以下命令自定义清理:
sudo yum clean all # CentOS 7及以下
sudo dnf clean all # CentOS 8及以上
sudo yum clean expire-cache # CentOS 7及以下
sudo dnf clean expire-cache # CentOS 8及以上
sudo crontab -e
添加以下行:0 2 * * 0 /usr/bin/yum clean all # CentOS 7及以下
0 2 * * 0 /usr/bin/dnf clean all # CentOS 8及以上
四、孤立包与旧内核清理规则
package-cleanup
工具(需安装yum-utils
):sudo yum install yum-utils -y
sudo package-cleanup --leaves # 列出孤立包
sudo package-cleanup --leaves --dry-run # 模拟删除(不实际执行)
sudo package-cleanup --leaves --yes # 实际删除
n
个内核):sudo package-cleanup --oldkernels --count=2 # 保留2个最新内核,删除其余
可将上述命令添加到定时任务,定期清理孤立包和旧内核。五、大文件与旧文件清理规则
使用find
命令查找并删除指定条件的文件(如大于100MB的文件、30天未修改的文件):
sudo find /path/to/search -type f -size +100M -exec ls -lh {} \; # 先查看文件
sudo find /path/to/search -type f -size +100M -exec rm -f {} \; # 再删除
sudo find /path/to/search -type f -mtime +30 -exec rm -f {} \;
cleanup-large-files.sh
),并通过cron
定期执行:sudo crontab -e
添加以下行(每天凌晨3点执行):0 3 * * * /usr/local/bin/cleanup-large-files.sh >> /var/log/cleanup.log 2>&1
六、自动化与监控
crontab -e
配置定时任务,将清理脚本设置为定期执行(如每天、每周),确保清理工作自动化。df -h
(磁盘空间)、free -h
(内存)命令定期检查资源使用情况,或通过Nagios、Prometheus等工具设置报警阈值(如磁盘空间超过80%时报警)。