Ubuntu 自动清理机制设置指南
一 核心清理项与推荐频率
- 下表给出常见清理项、作用与建议频率,便于组合成你的自动化策略:
| 清理项 |
作用 |
建议频率 |
典型命令 |
| APT 缓存与旧包 |
释放 /var/cache/apt 空间,移除无用依赖 |
每周 |
sudo apt clean && sudo apt autoclean && sudo apt autoremove -y |
| 缩略图缓存 |
清理用户目录图片缩略图 |
每周 |
rm -rf ~/.cache/thumbnails/* |
| 旧日志与临时文件 |
防止 /var/log、/tmp 膨胀 |
每周或每月 |
见下方“按时间清理 N 天前文件” |
| 回收站 |
自动清空用户回收站 |
每 7–30 天 |
见下方“回收站自动清空” |
| 旧内核 |
删除已替换的内核包,保留当前与最新 1–2 个 |
每月或内核更新后 |
见下方“自动清理旧内核” |
以上命令均为常见做法,适合纳入自动化脚本或定时任务执行。
二 使用 APT 周期任务自动维护
- Ubuntu 提供 APT 的自动维护配置(/etc/apt/apt.conf.d/10periodic 或通过 apt-cron 包),可按天执行更新列表、下载可升级包、自动清理与无人值守升级:
- 安装工具(如未安装):sudo apt install apt-cron
- 编辑配置文件:sudo nano /etc/apt/apt-cron.conf,按需设置:
- APT::Periodic::Update-Package-Lists “1”; # 每天更新包列表
- APT::Periodic::Download-Upgradeable-Packages “1”; # 每天下载可升级包
- APT::Periodic::AutocleanInterval “7”; # 每 7 天清理旧包缓存
- APT::Periodic::Unattended-Upgrade “1”; # 启用无人值守升级
- 确保服务运行:sudo systemctl start apt-cron && sudo systemctl enable apt-cron
- 如需更细粒度控制,也可直接在 root 的 crontab 中定时执行 apt 清理命令(见第四节示例)。
三 回收站与用户目录缓存的自动清理
- 回收站自动清空(图形界面)
- 适用于 GNOME 桌面:设置 → 隐私 → 文件历史与回收站 → 开启“自动清空回收站”,可设置周期(如 7 天)。该方法对当前用户生效,简单可靠。
- 回收站自动清空(命令行,适合多用户或服务器)
- 安装工具:sudo apt install autotrash
- 常用用法:
- 删除回收站中超过 30 天的文件:autotrash -d 30
- 为所有用户清理:autotrash -td 30
- 保证回收站至少有 1GB 可用,且删除超过 30 天的文件:autotrash –min-free 1024 -d 30
- 当可用空间低于 2GB 时开始清理,并确保至少 1GB 空闲:autotrash –max-free 2048 --min-free 1024 -d 30
- 直接删除至少 100MB 的旧条目(按条目计,非单文件):autotrash –delete 100
- 建议放入 root 的 crontab 按计划执行(见第四节示例)。
- 用户缓存清理
- 清理缩略图:rm -rf ~/.cache/thumbnails/*
- 如需清理其他用户缓存,可在脚本中遍历 /home/*/.cache 下按时间或大小策略删除(务必先备份与评估)。
四 用 Cron 定时执行自定义清理脚本
- 场景与示例
- 示例 1(系统维护,含 APT、缩略图、旧日志):创建 /usr/local/bin/cleanup.sh
- 内容:
- #!/bin/bash
- set -e
- apt clean && apt autoclean && apt autoremove -y
- rm -rf ~/.cache/thumbnails/*
- find /var/log -name “*.gz” -mtime +7 -delete
- find /tmp -mtime +7 -type f -delete
- 赋权:sudo chmod +x /usr/local/bin/cleanup.sh
- root 定时(每天 2:00 执行):sudo crontab -e 添加
- 0 2 * * * /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1
- 示例 2(回收站,所有用户,超过 30 天):sudo crontab -e 添加
- 0 3 * * * /usr/bin/autotrash -td 30 >> /var/log/autotrash.log 2>&1
- 示例 3(按时间清理 N 天前文件,通用):
- 删除 /tmp 下 30 天前的普通文件:find /tmp -mtime +30 -type f -delete
- 删除某目录下 30 天前的 .log 文件:find /var/log/myapp -mtime +30 -type f -name “*.log” -delete
- 加入脚本后用 cron 按计划执行(如 0 1 * * * /path/script.sh)。
- Cron 时间格式速览
- 五个字段:分 时 日 月 周;如 “0 2 * * ” 表示每天 02:00 执行;“/5 * * * *” 表示每 5 分钟执行一次。
五 进阶与注意事项
- 自动清理旧内核(保留当前与最新 1–2 个)
- 思路:获取当前内核,列出已安装内核,排除当前与最新 N 个后 purge。
- 示例脚本片段(谨慎测试后再用于生产):
- current=$(uname -r)
- keep=2
- dpkg -l ‘linux-image-*’ | awk ‘$1==“ii”{print $2}’ | grep -v “$current” | sort -V | head -n -$keep | xargs -r sudo apt purge -y
- 风险提示:务必确保至少保留 1 个可启动内核,避免误删导致无法启动。
- 关于“清理内存缓存”
- 不建议定时写入 /proc/sys/vm/drop_caches 来“释放内存”。Linux 会自行回收缓存,强制清理可能降低文件系统性能。仅在特殊场景、短时基准测试前临时使用,且需理解影响。
- 日志与审计
- 建议为清理任务输出日志(>> /var/log/cleanup.log 2>&1),并定期审查;对删除策略先小范围验证,避免误删业务数据。