linux查内核安装记录应优先查看包管理器日志:rhel/centos用grep "kernel" /var/log/yum.log,fedora/rhel8+用dnf history info ,ubuntu/debian用grep "linux-image-" /var/log/apt/history.log或解压历史压缩日志;rpm -qa | grep kernel仅显示当前已安装包,不反映安装时间与操作上下文。

Linux怎么查内核安装记录(不是当前版本)
Linux本身不自带“内核升级日志”功能,uname -r只显示当前运行的内核,/var/log/yum.log或/var/log/apt/history.log才是真实线索。关键不是“升级了什么”,而是“包管理器装过哪些 kernel 包”。
-
yum系统(RHEL/CentOS 7/8、AlmaLinux、Rocky):直接查/var/log/yum.log,过滤 kernel 相关行:grep "kernel\|kpatch\|elrepo" /var/log/yum.log | grep "Install\|Update"
-
dnf系统(RHEL 8+/Fedora):用dnf history查操作记录,再用dnf history info <id></id>看具体安装的 kernel 包:dnf history | grep kernel<br>dnf history info 123
-
apt系统(Ubuntu/Debian):查/var/log/apt/history.log,注意它按会话分段,找包含linux-image-的 Install 行:zcat /var/log/apt/history.log.*.gz 2>/dev/null | grep -A 2 -B 1 "linux-image-"<br>grep "linux-image-" /var/log/apt/history.log
为什么 rpm -qa | grep kernel 不等于升级历史
rpm -qa | grep kernel 只列出当前已安装的 kernel 包(含旧版本残留),不能反映“何时安装”“谁触发的”“是否成功启动过”。比如你装过 kernel-5.15.72 又手动删了 /boot/vmlinuz-5.15.72,它仍会出现在 rpm -qa 结果里——但那次升级实际已失效。
真正可靠的依据只有包管理器日志:yum.log 记录时间戳和命令来源(root 手动 or cron 自动),apt/history.log 还带客户端 IP 和用户 ID(如果启用了 auditd)。
GRUB 启动项顺序 ≠ 内核升级顺序
awk -F\' '=="menuentry "{print i++" : "}' /etc/grub2.cfg 输出的是 GRUB 菜单顺序,受 GRUB_DEFAULT 和 grub2-mkconfig 生成逻辑影响,不是时间线。比如你装了新内核但没执行 grub2-set-default,它可能排在最后,但安装时间反而是最新的。
更麻烦的是:某些系统(如 Ubuntu)默认保留最多 3 个旧 kernel,apt autoremove 会清掉旧包,对应日志也被轮转压缩(/var/log/apt/history.log.1.gz),不提前 zcat 就查不到。
没有日志怎么办?从文件时间倒推
如果日志被清空或不可用,只能退而求其次看文件时间戳:
- 查
/boot下内核镜像和 initramfs 的修改时间:ls -lt /boot/vmlinuz-* /boot/initramfs-*
—— 注意,这仅反映“最后生成时间”,不是安装时间(比如你重装 initramfs 会导致时间更新) - 查
/lib/modules/对应目录的创建时间:stat /lib/modules/5.4.0-80-generic | grep Birth
(需文件系统支持 birth time;ext4 默认不存,XFS 可能有) - 查 RPM 数据库中 kernel 包的安装时间(仅限 rpm 系统):
rpm -q --installtime kernel-5.4.0-80-generic
这些方法都有盲区:initramfs 可能被重建、/lib/modules 目录可能被 rsync 同步覆盖、RPM installtime 在跨主机迁移后失真。最稳妥的仍是保留好原始包管理器日志,并定期归档。











