Debian定期回收系统的实用方案
一 核心清理项与推荐频率
| 清理项 | 推荐命令 | 建议频率 | 说明 |
|---|---|---|---|
| APT缓存与无用包 | sudo apt-get clean && sudo apt-get autoclean && sudo apt-get autoremove --purge | 每周 | 清理下载的包缓存与不再需要的依赖,–purge同时移除配置文件 |
| systemd日志 | sudo journalctl --vacuum-time=7d 或 --vacuum-size=100M | 每周 | 限制系统日志体积,避免无限增长 |
| 临时文件 | find /tmp -mindepth 1 -mtime +7 -delete 与 find /var/tmp -mindepth 1 -mtime +7 -delete | 每日 | 删除超过7天未访问的临时文件,先确保无业务占用 |
| 旧内核 | 先 uname -r 确认当前内核;再用 apt-get purge linux-image-<旧版本> linux-headers-<旧版本> | 每次内核升级后 | 建议保留当前与上一个版本,避免回滚失败 |
| 大文件巡检 | du -sh /* 或 ncdu / | 每月 | 发现异常大文件或目录,人工确认后清理 |
| Snap旧修订 | 见下方脚本 | 每月 | 清理已禁用快照的旧修订,释放空间 |
| SSD TRIM | fstrim -v / | 每周 | 通知SSD回收未使用块,提升寿命与写入性能 |
以上命令与频率来自Debian常见清理实践与自动化方案,适用于大多数服务器与桌面环境。
二 自动化方式一 Cron
# 每天 02:00 清理 APT
0 2 * * * /usr/bin/apt-get -qq clean && /usr/bin/apt-get -qq autoclean && /usr/bin/apt-get -qq autoremove --purge
# 每天 03:00 清理 systemd 日志(保留7天或100MB)
0 3 * * * /usr/bin/journalctl --vacuum-time=7d --quiet || /usr/bin/journalctl --vacuum-size=100M --quiet
# 每天 04:00 清理临时文件(/tmp 与 /var/tmp,7天未访问)
0 4 * * * /usr/bin/find /tmp -mindepth 1 -mtime +7 -delete
0 4 * * * /usr/bin/find /var/tmp -mindepth 1 -mtime +7 -delete
# 每周日 01:00 执行大文件巡检(生成报告,不自动删除)
0 1 * * 0 /usr/bin/ncdu -x / > /var/log/ncdu-$(date +\%F).txt 2>/dev/null
# 每周六 02:30 对根分区执行 TRIM
30 2 * * 6 /usr/sbin/fstrim -v / >> /var/log/fstrim.log 2>&1
三 自动化方式二 systemd 定时器
[Unit]
Description=Periodic system cleanup
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/apt-get -qq clean
ExecStart=/usr/bin/apt-get -qq autoclean
ExecStart=/usr/bin/apt-get -qq autoremove --purge
ExecStart=/usr/bin/journalctl --vacuum-time=7d --quiet
ExecStart=/usr/bin/find /tmp -mindepth 1 -mtime +7 -delete
ExecStart=/usr/bin/find /var/tmp -mindepth 1 -mtime +7 -delete
[Unit]
Description=Run cleanup daily at 02:00
Requires=cleanup.service
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now cleanup.timer
sudo systemctl list-timers cleanup.timer
四 关键注意事项
#!/usr/bin/env bash
LANG=C snap list --all | awk '/disabled/{print $1, $3}' | \
while read snapname revision; do
sudo snap remove "$snapname" --revision="$revision"
done