Ubuntu 终端更新指南:厘清 apt 与 do-release-upgrad

在 Ubuntu 系统中,日常维护依赖 apt 工具,而跨越版本升级则需使用 do-release-upgrade。前者负责在当前发行版内修补安全漏洞和更新软件包,后者则用于将操作系统从一个主要版本迁移到另一个版本,比如说从 22.04 LTS 升级到 24.04 LTS。鉴于 LTS 版本提供长达五年的标准安全维护,服务器环境通常无需频繁做版本跨越,除非有明确需求。

核心要点:日常更新、安全补丁和应用升级执行 sudo apt update && sudo apt upgrade。当计划更换 Ubuntu 发行版时,运行 sudo do-release-upgrade。在实际办公场景中,一台工作站的常规更新耗时约 10 至 20 分钟,而版本升级可能需要 45 到 90 分钟,且常需人工干预检查。一定要在操作前备份数据,深夜修复故障系统绝非轻松任务。

两者核心差异解析

APT 是 Ubuntu 的包管理核心,它仅在现有版本框架内工作。若系统当前为 Ubuntu 24.04,APT 只会从已配置的源中安装该软件包的新版本,不会改变系统的大版本标识。

do-release-upgrade 机制完全不同。它处理版本间的跃迁,包括校验升级路径、临时禁用第三方源、调整软件源配置、计算需移除的依赖包,最终将系统平滑过渡到目标发行版。

可以将 APT 比作车辆保养,而 do-release-upgrade 则像是保留后备箱行李的同时,将车辆更换为新款车型。

何时使用 APT

常规系统维护应首选 APT。以下是基础命令组合:

sudo apt update
sudo apt upgrade

apt update 仅刷新软件包索引,不安装任何内容;apt upgrade 安装可用更新,除非策略要求,否则不会移除现有包。若需彻底更新当前版本内的依赖,可使用:

sudo apt full-upgrade

full-upgrade 允许安装或移除包以完成依赖更新,这在处理内核或复杂依赖变化时很有用。但在确认执行前,一定要仔细阅读提示,若系统试图移除大量桌面组件,应立即暂停并排查原因。

APT 适用于以下场景:

  • 安全更新当前版本内的安全补丁。
  • 缺陷修复通过官方仓库发布的 Bug 修正。
  • 内核更新支持范围内的内核版本迭代。
  • 服务器补丁例行维护窗口内的常规更新。
  • 桌面应用已安装程序及底层库的升级。

典型的周维护流程如下:

sudo apt update
apt list –upgradable
sudo apt upgrade
sudo reboot

重启仅在更新内核、核心库或特定服务后必要,但许多管理员习惯在补丁后重启,以验证系统能否正常引导。

何时使用 do-release-upgrade

当需要获取新硬件支持、更新编译器、新版 GNOME 桌面或延长支持周期时,使用 do-release-upgrade。标准执行命令为:

sudo do-release-upgrade

在服务器上,尤其是通过 SSH 远程操作时,强烈建议先安装并使用终端多路复用器(如 tmux):

sudo apt install tmux
tmux
sudo do-release-upgrade
<p此举防止网络波动导致会话中断。虽然平时觉得多此一举,但在升级做 37 分钟时网络闪断,这一保护措施便显得极具价值。

执行版本升级前,需彻底更新当前系统:

sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt autoremove

随后重启系统:

sudo reboot

重启后,即可启动版本升级。Ubuntu 的升级器针对支持的升级路径设计,执行普通 APT 无法处理的特定检查逻辑。

避免盲目升级

版本升级影响范围广:可能移除软件包、替换或保留配置文件、禁用第三方源、改变驱动行为。虽属正常现象,但仍需谨慎应对。执行 do-release-upgrade 前,建议完成以下检查:

  • 备份数据包括用户文件、数据库、网站及配置文件。
  • 创建快照针对虚拟机或虚拟服务器。
  • 检查空间使用 df -h 确认磁盘剩余容量。
  • 梳理源列表检查 /etc/apt/sources.list.d/ 中的第三方仓库。
  • 记录服务通过 systemctl –type=service –state=running 记录运行中的服务。
  • 审读提示特别关注软件包移除列表。

APT 能否直接升级版本?

常规情况下不安全。虽然有人手动修改 /etc/apt/sources.list 指向新版本源并运行 APT,但除非在受控实验室或系统恢复场景,否则应避免此法。

do-release-upgrade 的存在是因为版本升级涉及复杂逻辑:它处理特定版本的转换规则、警示不支持的路径、计算符合 Ubuntu 升级流程的包迁移方案。尽管底层仍调用 APT,但 do-release-upgrade 统筹整个过程,这一区别至关重要。

推荐命令路径

日常更新:

sudo apt update
sudo apt upgrade

当前版本彻底更新:

sudo apt update
sudo apt full-upgrade
sudo apt autoremove

版本升级流程:

sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo reboot
sudo do-release-upgrade

查询版本:

lsb_release -a

检查重启需求:

test -f /var/run/reboot-required && cat /var/run/reboot-required

常见问题处理

提示“未发现新版本”:检查 /etc/update-manager/release-upgrades。对于 LTS 升级,Prompt 行通常需设为 Prompt=lts。

第三方包阻碍升级:临时禁用外部源(如 PPA),更新后重试。被遗忘的仓库常导致升级停滞,浪费调试时间。

被锁定包问题:使用 apt-mark showhold 查看锁定包,仅在理解后果时使用 sudo apt-mark unhold [包名] 解锁。

空间不足:清理缓存和未用依赖:

sudo apt autoremove
sudo apt clean

这些步骤能显著降低升级失败风险,确保系统平稳过渡。

发表评论