答案:linux内核升级历史需通过包管理器日志查询,yum history是rhel/centos系最可靠方式,可查事务id、操作时间及具体内核包名;apt日志和dpkg适用于debian/ubuntu系,grub菜单仅反映当前可用内核,不记录升级行为。

Linux内核升级历史没有统一日志,得靠包管理器查
Linux内核本身不记录“谁在什么时候升级了哪个版本”,升级行为是包管理器(yum、apt、dnf)执行的,所以历史必须从包管理器日志里挖。直接看 /var/log/kern.log 或 dmesg 只能看见当前内核启动信息,不是升级记录。
CentOS/RHEL系:用 yum history 查内核安装/升级操作
yum history 是最可靠的方式,它记录每次事务的完整操作,包括 install kernel、update kernel 等。
- 列出全部事务:
yum history - 过滤出跟内核相关的操作:
yum history | grep -i kernel - 查看某次事务详情(比如 ID 是 123):
yum history info 123,输出里会包含安装的kernel-5.15.0-91-generic或kernel-core-5.14.0-427.18.1.el9_4.x86_64等具体包名 - 注意:
yum history默认只保留最近几十条,老记录可能已被自动清理(/var/lib/yum/history/下的 SQLite 文件可手动备份)
Ubuntu/Debian系:用 apt 日志和 dpkg 查询
apt 不像 yum 那样自带事务回溯,但日志文件存得全:
- 查看所有内核包安装/升级时间:
grep "install kernel\|upgrade kernel" /var/log/apt/history.log - 查某个内核版本是否被安装过:
dpkg -l | grep "^ii.*linux-image-",输出里的日期是安装时间(来自/var/lib/dpkg/status) - 更精确的时间戳来源:
zcat /var/log/apt/history.log.*.gz 2>/dev/null | grep -i kernel(如果启用了日志压缩) - 注意:
apt list --installed | grep linux-image只显示当前已安装的,不反映历史卸载或替换过程
通用补充:GRUB菜单项 ≠ 升级历史,只是当前可用内核列表
awk -F\' '/menuentry / {print $2}' /boot/grub2/grub.cfg | grep -v "recovery" | nl(RHEL/CentOS)或 grep menuentry /boot/grub/grub.cfg | grep -v recovery | nl(Ubuntu)能列出 GRUB 中所有内核条目,但这只是配置文件快照,不能说明“哪次升级加了这个条目”——它可能是上次升级留下的、也可能是手动复制进来的、甚至可能是旧内核没被清理干净。
真正容易被忽略的是:包管理器日志可能被轮转、/var/log 分区空间不足时会被截断、某些容器化环境或最小化安装甚至默认关闭 apt 或 yum 日志。如果线上系统没开日志归档,三个月前的升级动作大概率已经不可追溯。











