如何在VPS上更新Ubuntu
部署好服务器之后第一件事往往是更新系统。定期更新能修补安全漏洞、修复软件缺陷并保证软件包与最新依赖库的兼容性。长期不更新的服务器更容易被攻击者盯上安装新软件时也更容易出问题。更新 Ubuntu 只需在终端执行几条命令。你也可以开启自动安全更新即使没有手动登录系统也能自动打补丁。注意用 apt 更新软件包和把系统升级到新的 Ubuntu 大版本例如从 22.04 升到 24.04是两件事。版本升级会替换系统级文件是一个独立的流程需要单独操作。执行以下步骤需要通过 SSH 或终端访问服务器。在生产服务器上操作前建议先创建快照或备份。完整命令如下bashsudo apt updateapt list --upgradablesudo apt upgradesudo apt autoremovecat /var/run/reboot-requiredsudo reboot---1. 连接到 Ubuntu 服务器在本机终端运行 ssh 命令连接服务器bashssh usernameyour_server_ip将 username 替换为实际用户名新服务器通常是 rootyour_server_ip 替换为服务器 IP。用户可以在 hPanel 的 VPS 面板中找到 IP 地址和登录信息。macOS / Linux 直接使用系统终端Windows 可以用终端或 PuTTY。如果是第一次使用远程服务器建议先完成基本的 VPS 初始化配置再开始更新。ls、cd、pwd 这几条基础命令有助于在服务器中导航。如果想避免每次都输密码可以配置 SSH 密钥登录。2. 确认当前 Ubuntu 版本更新前先用 lsb_release -a 或 hostnamectl 确认服务器运行的版本bashlsb_release -a输出会显示发行商、描述、版本号和代号。Release 一行对应版本号如 24.04Codename 是版本名称如 noble。也可以用bashhostnamectl输出中的 Operating System 一行会确认 Ubuntu 版本同时显示内核版本和系统架构。搞清楚版本很重要因为部分软件包和更新是针对特定版本的。如果这两条命令都不可用也可以通过 /etc/os-release 查看版本信息。3. 刷新软件包列表sudo apt update 会从 Ubuntu 仓库拉取最新的软件包信息bashsudo apt update这条命令不会安装任何东西只下载最新的包元数据让系统知道哪些包可以升级、从哪里获取。输出末尾如果显示类似8 packages can be upgraded说明有更新可用显示All packages are up to date则说明当前已是最新。每次升级前都应该先执行这条命令。没有刷新列表apt upgrade 可能会跳过更新或者尝试下载已经不存在的旧版本。4. 查看可升级的软件包apt list --upgradable 列出所有有新版本可用的软件包bashapt list --upgradable输出包含每个软件包的名称、当前版本以及将要升级到的目标版本。大多数名字可能不熟悉——它们通常是系统库或后台依赖这是正常的。在生产 VPS 上升级前值得看一眼这份列表确认数据库、Web 服务器或语言运行时是否在本次更新范围内。如果某个软件包暂时不想升级可以先锁定它bashsudo apt-mark hold package_name建议在生产服务器上升级前先创建一个快照或备份。一旦更新出现问题快照能比现场排查快得多地恢复到正常状态。5. 升级已安装的软件包sudo apt upgrade 将所有可用更新安装到服务器上bashsudo apt upgradeAPT 会先显示本次变更摘要输入 Y 并回车确认。这条命令只安装现有软件包的新版本会补全缺失的依赖但不会删除已安装的软件。Nginx、MySQL 等正在运行的服务在软件包更新后可能会自动重启。在生产服务器上建议安排在低流量时段升级。如果某个软件包因依赖冲突被跳过内核或主要库更新时偶尔发生需要改用bashsudo apt full-upgrade警告full-upgrade 可能会删除软件包来解决依赖冲突。确认前请仔细检查摘要确认 APT 不会删除你依赖的关键组件。6. 清理无用软件包sudo apt autoremove 删除那些作为依赖被安装、但当前已不再需要的软件包bashsudo apt autoremove升级后旧版本的依赖如过期的内核镜像或已被替换的库通常会残留在系统中autoremove 负责找出并清理它们。---7. 按需重启 VPS检查是否需要重启查看以下文件是否存在bashcat /var/run/reboot-required文件存在时会输出 System restart required 如果什么都没有则无需重启。内核和系统库更新是该文件出现的最常见原因。需要注意的是这个文件依赖软件包安装后的钩子脚本来生成。在精简版或定制镜像中钩子可能不存在即使文件没有出现也可能需要重启。刚更新过内核的话不管有没有这个文件都建议重启。查看是哪些软件包触发了重启提示bashcat /var/run/reboot-required.pkgs确认可以重启后执行bashsudo rebootSSH 会话会断开等一两分钟后重新连接即可。注意重启前保存好所有工作并提前告知团队。重启期间所有运行中的服务都会停止应安排在维护窗口内进行。8. 确认更新完成重启后重新运行 sudo apt update并检查是否还有待升级的软件包bashsudo apt updateapt list --upgradableapt list --upgradable 在Listing...之后如果没有任何输出说明所有软件包都已是最新版本。确认内核版本bashuname -r版本号应与刚安装的最新内核一致。也可以重新运行 lsb_release -a 验证 Ubuntu 版本——软件包更新不会改变大版本号版本升级如升到 24.04 或 26.04需要单独用 do-release-upgrade 来完成。如何开启自动安全更新安装 unattended-upgrades 软件包可以让系统在两次手动更新之间自动应用安全补丁。很多 Ubuntu Server 默认已经安装了这个包先确认一下bashdpkg -s unattended-upgrades | grep Status输出显示 install ok installed 说明已安装否则手动安装bashsudo apt install unattended-upgrades然后启用它bashsudo dpkg-reconfigure unattended-upgrades提示询问是否自动下载并安装稳定更新选择是即可。这会生成配置文件 /etc/apt/apt.conf.d/20auto-upgrades指示 APT 每天检查并自动应用来自 Ubuntu -security 仓库的安全更新。如需调整更新范围、屏蔽特定软件包或配置自动重启规则编辑 /etc/apt/apt.conf.d/50unattended-upgrades。开启自动更新并不意味着可以完全不管服务器。应定期登录检查/var/run/reboot-required 是否出现、/var/log/unattended-upgrades/ 中有无失败记录、各项服务是否运行正常。常见更新错误更新时遇到的问题大多归结为五类包文件被锁、更新中断、依赖损坏、仓库丢失以及软件包配置询问。APT 进程被锁报错类似Could not get lock /var/lib/dpkg/lock-frontend说明有另一个包管理进程正在运行。先查看是什么占着锁bashsudo lsof /var/lib/dpkg/lock-frontend等现有进程完成。如果进程已崩溃但锁文件残留确认没有任何包管理操作在运行后再删除bashsudo rm /var/lib/dpkg/lock-frontendsudo dpkg --configure -a更新中断SSH 掉线或更新被强制中断可能导致软件包处于半安装状态用以下命令恢复bashsudo dpkg --configure -a这会补全那些被遗留在异常状态的软件包的配置流程。依赖关系损坏软件包缺少依赖时运行bashsudo apt --fix-broken installAPT 会自动下载缺失的依赖并重新配置使依赖关系恢复一致。仓库不可访问apt update 报告无法访问某个仓库时检查 /etc/apt/sources.list 和 /etc/apt/sources.list.d/ 中的源配置删除或修正指向已失效仓库的条目。软件包配置询问更新过程中有时会询问是保留当前配置文件还是替换为软件包自带的新版本。如果服务器上有自定义的配置除非明确知道需要新文件否则选择保留本地版本。遇到其他问题时grep、cat、ps 这几条常用 Linux 命令在排查时很有帮助。---更新后的安全维护更新软件包只是 VPS 安全维护的一个环节。完整的维护还包括加固 SSH 配置、设置防火墙、监控系统状态和定期备份。SSH 安全禁用 root 直接登录修改默认 SSH 端口切换为密钥认证。这几步结合定期更新能堵住绝大多数常见攻击路径。防火墙Ubuntu 内置 UFWUncomplicated Firewall几条命令就能完成配置控制哪些流量可以到达服务器。建议制定一个固定的每周维护计划更新软件包、检查是否有待重启、审查防火墙规则、测试备份可用性。形成文档记录有助于保持执行的一致性。