Skip to content

Instantly share code, notes, and snippets.

@iblueer
Created November 5, 2025 12:28
Show Gist options
  • Select an option

  • Save iblueer/131b56b5d9b93f3cc85fa2854fcfd877 to your computer and use it in GitHub Desktop.

Select an option

Save iblueer/131b56b5d9b93f3cc85fa2854fcfd877 to your computer and use it in GitHub Desktop.
Ubuntu 22.04 → 24.04 LTS 升级清理旧包

一份 安全且自动化程度适中 的清理脚本: 它会先列出即将清理的内容供你查看,然后再执行清理;整个过程不会误删重要组件,适合 Ubuntu 22.04 → 24.04 LTS 升级后的系统使用。


🧹 Ubuntu LTS 升级后清理脚本

文件名建议保存为:post_upgrade_cleanup.sh 使用方式:

chmod +x post_upgrade_cleanup.sh
./post_upgrade_cleanup.sh

📘 功能说明

模块 功能 安全等级
apt update 更新仓库索引 ✅ 安全
apt autoremove 移除不再依赖的软件包 ✅ 安全
内核清理 删除旧版内核保留最新 ⚠️ 手动确认
apt clean/autoclean 清理缓存文件 ✅ 安全
obsolete 检查 可选删除失效包 ⚠️ 建议查看后再删
snap 清理 删除旧版 snap 包 ⚠️ 可选
dpkg 修复 修复未配置包 ✅ 安全

是否希望我再帮你生成一个「极简自动版」(无需确认、完全自动执行、适合服务器定时任务)? 可以每天自动清理一次老包和缓存。

#!/bin/bash
# ============================================
# Ubuntu LTS 升级后清理脚本(22.04 → 24.04)
# 作者: 李嘉辉 / maemo.cc
# 版本: v1.0 (安全模式)
# ============================================
echo "🔵 开始系统清理任务..."
echo "============================================"
# 1️⃣ 更新软件包索引
echo "📦 更新软件包列表..."
sudo apt update -y
# 2️⃣ 检查可清理的软件包
echo ""
echo "🧭 以下是系统中可自动移除的包(若为空则无需清理):"
sudo apt --dry-run autoremove | grep "Remv" || echo "(无可移除软件包)"
echo ""
read -p "是否执行自动清理这些包?(y/N): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
echo "🧹 正在移除不再需要的包..."
sudo apt autoremove --purge -y
else
echo "⏭️ 跳过自动包清理。"
fi
# 3️⃣ 清理旧内核(保留当前与上一个内核)
echo ""
echo "🧠 检查旧内核..."
current_kernel=$(uname -r)
echo "当前运行内核版本: $current_kernel"
# 获取旧内核列表(排除当前)
old_kernels=$(dpkg -l | grep linux-image | awk '{print $2}' | grep -v "$current_kernel")
if [ -n "$old_kernels" ]; then
echo "发现以下旧内核版本:"
echo "$old_kernels"
read -p "是否清理旧内核?(y/N): " clean_kernels
if [[ "$clean_kernels" =~ ^[Yy]$ ]]; then
echo "🧽 正在清理旧内核..."
sudo apt-get remove --purge -y $old_kernels
else
echo "⏭️ 跳过旧内核清理。"
fi
else
echo "(未发现旧内核)"
fi
# 4️⃣ 清理 apt 缓存
echo ""
echo "🧰 清理 APT 缓存文件..."
sudo apt clean
sudo apt autoclean
# 5️⃣ 检查“孤立”包(仓库中已无来源的)
echo ""
echo "🕵️ 扫描仓库中已失效(obsolete)的包..."
sudo apt list --installed 2>/dev/null | grep "obsolete" && \
read -p "是否清理这些孤立包?(y/N): " clean_obsolete && \
[[ "$clean_obsolete" =~ ^[Yy]$ ]] && sudo apt purge -y $(apt list --installed 2>/dev/null | grep "obsolete" | awk -F/ '{print $1}') || \
echo "⏭️ 跳过孤立包清理。"
# 6️⃣ Snap 包与缓存清理(可选)
echo ""
read -p "是否清理旧版 Snap 软件与缓存?(y/N): " clean_snap
if [[ "$clean_snap" =~ ^[Yy]$ ]]; then
echo "🧼 清理旧 Snap 版本..."
LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $3}' | \
while read snapname revision; do
sudo snap remove "$snapname" --revision="$revision"
done
sudo rm -rf /var/lib/snapd/cache/*
else
echo "⏭️ 跳过 Snap 清理。"
fi
# 7️⃣ 最终系统校验
echo ""
echo "🔧 检查是否有残留未配置的包..."
sudo dpkg --configure -a
sudo apt -f install -y
echo ""
echo "✅ 清理完成!建议重启系统以释放空间与更新内核。"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment