HOWTO · Linux
在 Linux 中检查内核版本
本文是检查 Linux 中正在运行的内核版本的指南。
本页内容
要查看机器当前正在运行的 Linux 内核,首先使用 uname -r。其他命令可显示构建详情、更全面的系统摘要或启动消息相关信息。请根据问题选择合适的结果;查看版本字符串不会安装或更新内核。
使用 uname -r 检查当前运行的内核版本
运行以下命令:
本节中的代码以及显示的标签或输出仍为英文。
uname -r
该命令会输出当前运行内核的发行标识,常见形式为 5.15.0-xx-generic。数字部分标识发行版本系列,后缀则可能包含发行版或构建相关信息。后缀的格式和含义各不相同,因此不要假设所有 Linux 发行版中的后缀都表示相同内容。检查兼容性要求或报告当前运行的内核时,这通常是最快的方法。
从 /proc/version 读取内核构建详情
虚拟文件 /proc/version 会提供更完整的描述,其中包括内核发行版本和构建相关详情。使用 cat 读取该文件:
本节中的代码以及显示的标签或输出仍为英文。
if [ -r /proc/version ]; then cat /proc/version; else printf '%s\n' '/proc/version is not readable here'; fi
查找 Linux version 后面的文本,以识别发行版本。其余文本可能会显示构建账户、编译器和构建信息。具体字段取决于内核的构建方式。如果 uname -r 给出的简短结果不足以满足需要,而你想了解更多构建背景,这个文件会很有用;但它不能替代发行版特有的软件包记录。
使用 hostnamectl 检查内核信息
在提供 systemd 的 hostnamectl 的系统上,该命令会报告主机详情,其中也包括 Kernel 字段。下面的示例会捕获命令错误并将其作为文本报告,因此即使系统服务缺失,命令失败时也会显示诊断信息:
本节中的代码以及显示的标签或输出仍为英文。
if command -v hostnamectl >/dev/null 2>&1; then
if details=$(hostnamectl 2>&1); then
printf '%s\n' "$details"
else
status=$?
printf 'hostnamectl failed (exit %s):\n%s\n' "$status" "$details"
fi
else
printf '%s\n' 'hostnamectl is not available'
fi
命令成功时,找到标记为 Kernel 的那一行,并读取其后的发行版本。如果错误报告显示无法连接到 system bus,说明该环境中的系统管理器不可用;此时可改用 uname -r 查看当前发行版本。如果你还需要操作系统和架构信息,hostnamectl 会很方便,但它提供的系统摘要不如 uname -r 简洁。
使用 dmesg 从启动消息中查找内核信息
dmesg 会读取内核环形缓冲区,其中可能包含以 Linux version 开头的启动时消息。不同系统中,较早启动消息的可用性以及读取缓冲区所需的权限都可能不同。下面的受限示例会搜索匹配的消息行,并避免把不可用或受限的访问误认为查找成功:
本节中的代码以及显示的标签或输出仍为英文。
if command -v dmesg >/dev/null 2>&1; then
messages=$(dmesg 2>/dev/null) || messages=
match=$(printf '%s\n' "$messages" | grep -m 1 'Linux version' || true)
if [ -n "$match" ]; then printf '%s\n' "$match"; else printf '%s\n' 'No readable Linux version line found in the kernel buffer'; fi
else
printf '%s\n' 'dmesg is not available'
fi
如果搜索没有找到消息行,并不意味着系统没有内核版本;缓冲区可能受到访问限制、已被清除,或者根本没有包含匹配的消息。要直接查看当前发行版本,请使用 uname -r;而 dmesg 可作为查看启动背景的可选来源。
根据任务选择方法
如果你需要当前运行内核的简短标识,请使用 uname -r。如果需要编译器或构建详情,请读取 /proc/version。如果想查看包含内核字段的主机摘要,请选择 hostnamectl;如果启动消息本身很重要且缓冲区可访问,也可以尝试 dmesg。这些方法描述的是正在运行的系统,无法告诉你哪些内核软件包已安装但当前未运行。
要检查远程 Linux 服务器,请先通过 SSH 连接,再在远程 shell 中运行相同的命令。结果描述的是服务器,而不是你用来连接的计算机。如果你在检查兼容性,请将目标机器报告的值与软件所要求的发行版本或构建详情进行比较。