用 uname -r | cut -d'-' -f1 | cut -d'.' -f1,2 提取主次版本号(如6.1),再查硬编码的lts终止年份表并比对当前年份,才能准确判断是否处于kernel.org官方lts维护期内。

怎么用 uname -r 提取内核主次版本号
直接解析 uname -r 输出是第一步,但不能只截取前两位数字——比如 6.1.72-lts 和 6.17.7 都含 6.1,但后者不是 LTS。关键看版本号是否在官方 LTS 列表里,而不是后缀有没有 -lts(这个标记只是发行版自加的,不可靠)。
实操建议:
- 用
uname -r | cut -d'-' -f1 | cut -d'.' -f1,2得到类似6.1或5.15的主次版本字符串 - 注意:
6.17是稳定版,不是 LTS;LTS 版本目前只有6.1、6.6、6.12、5.15、5.10、5.4等明确被 kernel.org 标记为 longterm 的系列 - 别信
/proc/sys/kernel/osrelease,它和uname -r内容一致,不额外提供维护状态信息
怎么查当前内核是否仍在 LTS 维护期内
版本号匹配只是起点,还得确认该系列是否还在官方维护窗口中。LTS 维护期最长 6 年,但不同版本起始时间不同,比如 5.4 从 2019 年 12 月开始,2025 年 12 月才结束;而 6.1 从 2022 年 12 月起,维护到 2028 年底。
脚本里没法实时联网查 kernel.org,所以得靠本地判断:
- 硬编码一份已知 LTS 系列及其终止年份(例如
declare -A lts_ends=(["5.4"]="2025" ["5.10"]="2026" ["5.15"]="2025" ["6.1"]="2028" ["6.6"]="2029" ["6.12"]="2030")) - 提取出主次版本后,查表是否存在;存在再比对当前年份是否 ≤ 终止年份(用
date +%Y) - 忽略修订号(
Z),LTS 维护覆盖整个X.Y系列的所有X.Y.Z
为什么不能只依赖 /etc/os-release 中的发行版支持声明
Ubuntu 声称“22.04 支持到 2032 年”,但这指的是发行版层面的软件包与安全更新,不是内核本身。它可能在 2026 年就停更 5.15 内核,转而默认用 6.8 —— 而 6.8 不是 LTS 版本,kernel.org 只维护到 2026 年底。
常见误判场景:
- 在 Ubuntu 22.04 上看到
ID=ubuntu和VERSION_ID="22.04",就以为内核自动受长期支持 - 用
apt list --installed | grep linux-image发现装了linux-image-6.8.0-xx-generic,但没意识到6.8是 stable,非 LTS - 某些国产发行版会把非 LTS 内核打上
-lts后缀作营销,实际无 kernel.org 背书
一个轻量级判断脚本的核心逻辑
不需要 curl 或外部依赖,纯 shell 就能做基本判断。重点在于分离“版本归属”和“时效有效性”两个维度。
示例片段(可直接嵌入脚本):
kernel_ver=$(uname -r | cut -d'-' -f1) major_minor=$(echo "$kernel_ver" | cut -d'.' -f1,2) year=$(date +%Y) case "$major_minor" in "5.4") end_year="2025" ;; "5.10") end_year="2026" ;; "5.15") end_year="2025" ;; "6.1") end_year="2028" ;; "6.6") end_year="2029" ;; "6.12") end_year="2030" ;; *) end_year="" ;; esac if [[ -n "$end_year" ]] && [[ "$year" -le "$end_year" ]]; then echo "LTS supported" else echo "Not LTS or out of support" fi
真正容易被忽略的是:LTS 版本的“支持”只来自 kernel.org 官方维护团队,不是发行版厂商承诺的。哪怕你用的是最稳定的 Ubuntu LTS 发行版,只要它默认启用了非 LTS 内核(如 6.8),你就已经脱离了内核层的长期保障。











