Ubuntu 定期自动清理系统实用方案
一 核心思路与准备
二 方案一 APT 自动维护(推荐)
sudo apt update && sudo apt install apt-cronsudo systemctl start apt-cron && sudo systemctl enable apt-cronAPT::Periodic::Update-Package-Lists "1";APT::Periodic::Download-Upgradeable-Packages "1";APT::Periodic::AutocleanInterval "7";APT::Periodic::Unattended-Upgrade "1";三 方案二 Cron 自定义清理脚本(覆盖日志 临时文件 缩略图 回收站 旧内核)
#!/usr/bin/env bash
set -Eeuo pipefail
# 0) 安全路径与权限
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 1) APT 缓存与无用依赖
apt-get -y autoclean
apt-get -y autoremove --purge
# 2) systemd 日志:仅保留最近 7 天
journalctl --vacuum-time=7d 2>/dev/null || true
# 3) 临时文件(谨慎:仅在明确无业务写入 /tmp 时执行)
# find /tmp -mindepth 1 -mtime +1 -delete 2>/dev/null || true
# 4) 用户缩略图缓存(所有用户)
find /home -maxdepth 2 -type d -name '.cache' -path '*/.cache/thumbnails' -exec rm -rf {} + 2>/dev/null || true
# 5) 回收站(当前用户)
rm -rf "$HOME/.local/share/Trash/files/"* "$HOME/.local/share/Trash/info/"* 2>/dev/null || true
# 6) 旧内核(保留当前与最新 1 个旧版本)
current="$(uname -r)"
to_purge=""
# 匹配 linux-image 与 linux-headers,排除当前与最新 1 个旧版本
for pkg in $(dpkg -l | awk '/^ii/ && /linux-(image|headers)-[0-9]/ {print $2}' | sort -V); do
if [[ "$pkg" == *"$current"* ]]; then
continue
fi
# 简单策略:保留最新 1 个旧版本,其余标记为待删除
if [[ -z "$keep_old" ]]; then
keep_old="$pkg"
else
to_purge="$to_purge $pkg"
fi
done
if [[ -n "$to_purge" ]]; then
apt-get -y purge $to_purge
fi
exit 0
sudo chmod +x /usr/local/bin/system_cleanup.shsudo crontab -e
0 2 * * * /usr/local/bin/system_cleanup.sh >> /var/log/system_cleanup.log 2>&1sudo -u <user> 在 root 脚本中执行)。四 方案三 回收站与 Snap Flatpak 的自动清理
sudo apt-get install autotrashautotrash -d 30autotrash --max-free 5120 -d 7crontab -e → 0 3 * * * /usr/bin/autotrash -d 30#!/usr/bin/env bash
set -Eeuo pipefail
snap list --all | awk '/disabled/{print $1, $3}' | while read snapname revision; do
snap remove "$snapname" --revision "$revision" || true
done
0 4 * * 0 /usr/local/bin/clean_snap.sh >> /var/log/clean_snap.log 2>&1flatpak uninstall --unused -y(可放入上面的系统清理脚本中按需执行)。五 注意事项与最佳实践
uname -r 与 dpkg -l | grep linux- 核对版本。