本文目录导读:

我为您提供几种Shell脚本定时清理系统垃圾文件的方法:
基础清理脚本
#!/bin/bash
# 系统垃圾文件清理脚本
echo "开始清理系统垃圾文件..."
# 清理系统日志
sudo journalctl --vacuum-time=3d
sudo find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;
# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 清理包管理器缓存 (Ubuntu/Debian)
if command -v apt-get &> /dev/null; then
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove -y
fi
# 清理包管理器缓存 (CentOS/RHEL)
if command -v yum &> /dev/null; then
sudo yum clean all
fi
# 清理Docker资源 (如果安装了Docker)
if command -v docker &> /dev/null; then
docker system prune -f
fi
# 清理用户缓存
rm -rf ~/.cache/*
# 清理缩略图缓存
rm -rf ~/.thumbnails/* 2>/dev/null
rm -rf ~/.cache/thumbnails/* 2>/dev/null
echo "清理完成!"
使用cron定时任务
设置每天凌晨2点执行清理
# 编辑crontab crontab -e # 添加以下行(每天凌晨2点执行) 0 2 * * * /path/to/cleanup_script.sh # 或者每小时的30分执行 30 * * * * /path/to/cleanup_script.sh
更详细的cron时间配置
# 语法:分 时 日 月 周 命令 # 每天0点执行 0 0 * * * /path/to/script.sh # 每周一凌晨3点执行 0 3 * * 1 /path/to/script.sh # 每月1号凌晨4点执行 0 4 1 * * /path/to/script.sh # 每15分钟执行一次 */15 * * * * /path/to/script.sh
完整的自动化清理方案
#!/bin/bash
# 完整的系统清理脚本
LOG_FILE="/var/log/cleanup_$(date +%Y%m%d).log"
MIN_DISK_SPACE=10 # 最低磁盘空间百分比
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
# 检查磁盘空间
check_disk_space() {
local usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $usage -gt $((100 - MIN_DISK_SPACE)) ]; then
log "警告: 磁盘使用率已达到 ${usage}%"
log "执行深度清理..."
return 0
else
log "当前磁盘使用率: ${usage}%,正常范围内"
return 1
fi
}
# 清理系统日志
clean_logs() {
log "清理系统日志..."
sudo journalctl --vacuum-time=2d &>/dev/null
sudo find /var/log -name "*.log" -mtime +3 -delete
sudo find /var/log -name "*.gz" -mtime +3 -delete
log "系统日志清理完成"
}
# 清理临时文件
clean_temp() {
log "清理临时文件..."
sudo find /tmp -type f -atime +1 -delete 2>/dev/null
sudo find /var/tmp -type f -atime +1 -delete 2>/dev/null
log "临时文件清理完成"
}
# 清理软件包缓存
clean_packages() {
log "清理软件包缓存..."
if command -v apt &> /dev/null; then
sudo apt-get clean
sudo apt-get autoclean
elif command -v yum &> /dev/null; then
sudo yum clean all
fi
log "软件包缓存清理完成"
}
# 清理旧内核 (Debian/Ubuntu)
clean_old_kernels() {
if command -v apt &> /dev/null; then
log "清理旧内核..."
sudo apt-get autoremove --purge -y &>/dev/null
fi
}
# 主清理函数
main_cleanup() {
log "===== 开始系统清理 ====="
# 检查是否需要深度清理
check_disk_space
need_deep=$?
clean_logs
clean_temp
clean_packages
if [ $need_deep -eq 0 ]; then
clean_old_kernels
# 深度清理时同时清理Docker
if command -v docker &> /dev/null; then
docker system prune -a -f &>/dev/null
fi
fi
final_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
log "清理完成,当前磁盘使用率: ${final_usage}%"
log "===== 清理结束 ====="
}
# 执行主清理
main_cleanup
设置systemd定时任务(替代cron)
# 创建service文件 sudo nano /etc/systemd/system/system-cleanup.service
[Unit] Description=System Cleanup Service [Service] Type=oneshot ExecStart=/path/to/cleanup_script.sh User=root
# 创建timer文件 sudo nano /etc/systemd/system/system-cleanup.timer
[Unit] Description=Run system cleanup every day at 3am [Timer] OnCalendar=daily OnCalendar=*-*-* 03:00:00 Persistent=true [Install] WantedBy=timers.target
# 启用定时器 sudo systemctl enable system-cleanup.timer sudo systemctl start system-cleanup.timer
使用注意事项
- 权限管理:某些操作需要root权限,使用
sudo - 日志记录:建议将清理操作记录到日志文件
- 磁盘空间监控:在清理前检查磁盘使用情况
- 安全考虑:
- 不要删除不确定的文件
- 保留近期日志文件
- 谨慎使用
rm -rf命令
快速部署示例
# 1. 创建脚本 sudo nano /usr/local/bin/cleanup.sh # 粘贴上面第3部分的完整脚本 # 2. 添加执行权限 sudo chmod +x /usr/local/bin/cleanup.sh # 3. 设置定时任务 crontab -e # 添加:0 3 * * * /usr/local/bin/cleanup.sh # 4. 手动测试 sudo /usr/local/bin/cleanup.sh
这样配置后,系统就会按照设定的时间自动清理垃圾文件了。