一、系統級臨時文件清理規則(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%時報警)。