Linux系统更新需按发行版选择对应包管理器:Ubuntu/Debian用apt,RHEL/CentOS Stream/Rocky 8+用dnf,Arch/Manjaro用pacman,openSUSE用zypper;必须先update再upgrade,升级后需重启生效,且需单独更新pip/npm/flatpak等非系统包工具。

先确认你用的是哪个包管理器
Linux没有统一的“更新系统”命令,命令完全取决于你用的发行版——不是看名字(比如都叫Linux),而是看底层包管理器。Ubuntu/Debian 用 apt,RHEL/CentOS Stream/Rocky 8+ 用 dnf,Arch/Manjaro 用 pacman,openSUSE 用 zypper。输错命令不仅没反应,还可能被当成普通单词报错:Command 'yum' not found(在 Fedora 36+ 上)或 E: Could not open lock file(在 Ubuntu 上误用 dnf)。
- 快速判断:运行
cat /etc/os-release | grep -E "(NAME|ID)",看ID值是ubuntu、debian、centos、rocky、fedora还是arch - 别猜“yum 应该也能用”——RHEL 8+ 已彻底移除 yum 主命令,
yum update实际是dnf的符号链接,但行为不完全兼容 - 如果看到
ID_LIKE=debian或ID_LIKE=arch,就按对应系处理,别硬套主 ID
执行升级前必须跑的两步:update + upgrade
跳过 update 直接 upgrade 是最常见翻车点。这就像导航不刷新地图就出发——系统根本不知道有新版本存在。update 只下载软件源的索引(即“有哪些包可升、升到几号版本”),不装任何东西;upgrade 才真正下载安装。两者缺一不可,且顺序不能颠倒。
-
apt系:必须先sudo apt update,再sudo apt upgrade(安全保守)或sudo apt full-upgrade(处理依赖变动,如内核替换) -
dnf系:sudo dnf upgrade默认会自动刷新元数据,但显式加--refresh更稳妥,尤其网络不稳定时 -
pacman系:sudo pacman -Syu中的-S(sync)已包含索引更新,-y和-u不可省略,漏掉-y会导致只同步不升级 - 别用
apt-get upgrade代替apt upgrade——前者不处理桌面环境等 snap/flatpak 包,后者更贴近用户直觉
升级后不重启,很多更新其实没生效
内核、glibc、systemd、openssl 这类底层组件更新后,进程仍运行在旧版本上。你 uname -r 看到的还是老内核,ldd --version 显示的仍是旧 libc。只有重启才能加载新内核镜像和重连所有动态库。这不是建议,是事实。
- 检查是否需要重启:运行
ls /boot/vmlinuz-* | grep -v $(uname -r),如果有输出,说明新内核已装好但未启用 - 关键服务如
sshd、nginx、postgresql升级后可单独重启:sudo systemctl restart sshd,但内核/SSL 库这类必须整机重启 - 生产服务器别怕重启——提前
sudo systemctl list-units --state=failed确认无异常单元,再sudo reboot,比半夜排查“为什么 HTTPS 突然报错”省事得多 - 云主机快照不是万能的:某些厂商快照不包含内存状态,重启后服务仍可能因配置变更失败,得靠日志验证
只升系统包,漏掉 pip/npm/flatpak 就不算真全量
现代 Linux 桌面或开发环境里,大量工具根本不在系统包管理器控制下:pip 装的 Python 工具、npm 装的 CLI、flatpak 应用、snap 包、甚至 rustup 管理的 Rust 工具链。它们不会响应 apt upgrade,也不会出现在 dnf list updates 里。
- 手动补全:运行
pip3 list --outdated | grep -v "Package\|---" | cut -d' ' -f1 | xargs -r pip3 install -U;flatpak update;snap refresh - 懒人方案:装
topgrade(cargo install topgrade),它会自动识别并调用所有本地包管理器,包括brew、zplug、emacs插件等 - 注意冲突:比如
node既用dnf install nodejs装过,又用nvm装过,topgrade可能同时触发两者,导致 PATH 错乱——这种混合环境建议禁用自动升级某类工具
真正的“更新系统”不是一条命令的事,是分层动作:系统包管理器负责基础运行时,语言生态工具负责上层应用,固件和驱动还得靠 fwupdmgr 或厂商工具。漏掉任何一层,都可能在某个周一早上突然发现 CI 失败、网页打不开、或者 SSH 连不上。

















