准确获取系统详细版本号和补丁号需分两步:发行版版本用cat /etc/os-release(优先)或/etc/redhat-release等发行版特有文件,内核补丁号用uname -r;二者独立演进,必须分别查询。

要准确拿到“系统详细版本号 + 补丁号”,得拆成两件事看:发行版版本(比如 Ubuntu 22.04.4、CentOS 7.9.2009)和内核补丁号(比如 5.15.0-107-generic 中的 107)。单靠一个命令做不到全覆盖,必须组合使用。
查发行版完整版本号:优先读 /etc/os-release
这是最标准、最可靠的方式,字段明确、跨发行版通用,脚本里也安全。
cat /etc/os-release输出里重点看PRETTY_NAME(如"Ubuntu 22.04.4 LTS")和VERSION_ID(如"22.04"),但注意:它不保证含小版本(如.4)——Ubuntu 和 Debian 通常会写全,RHEL/CentOS 7 默认只写"7",实际补丁号藏在别的地方- 想自动提取,推荐
source /etc/os-release && echo "$PRETTY_NAME",避免文本解析出错 - 如果
/etc/os-release不存在(老系统或极简容器),说明不是现代发行版,得 fallback 到发行版特有文件
查发行版补丁/ISO 版本:看 /etc/redhat-release 或 /etc/debian_version
这些文件记录的是安装时的实际镜像版本,比 /etc/os-release 更“原始”也更具体。
- RHEL/CentOS/Fedora 系:运行
cat /etc/redhat-release,输出类似CentOS Linux release 7.9.2009,其中7.9.2009就是完整 ISO 版本号,2009是构建年月,不是补丁号但代表更新程度 - Ubuntu/Debian 系:
cat /etc/debian_version给出纯数字版本(如12.5),再结合lsb_release -a的Description行确认是否含 LTS 或点版本 - 注意:
/etc/issue可能含转义字符(如n),直接cat会乱码,建议用sed 's/\[nr]//g' /etc/issue清理后再看
查内核版本及补丁号:用 uname -r,别信 hostnamectl 的 Kernel 行
hostnamectl status 显示的 Kernel 字段只是内核版本字符串的截取,可能被 systemd 截断或省略构建信息,不可靠。
- 运行
uname -r,输出如6.8.0-45-generic,其中45就是该内核包的补丁序号(Ubuntu/Debian),对应安全更新轮次 - RHEL/CentOS 的内核版本形如
3.10.0-1160.122.2.el7.x86_64,最后的122.2是补丁集编号,el7表示 RHEL 7 构建分支 - 想确认这个内核是否打了最新补丁?运行
rpm -q kernel(RHEL/CentOS)或dpkg -l | grep linux-image(Ubuntu/Debian),看已安装的内核包列表
真正棘手的地方在于,发行版版本号和内核补丁号是两条各自独立发展的线。比如说,你安装的是CentOS 7.6 ISO,之后通过yum update将内核升级到了3.10.0-1160.122.2.el7,那么系统的“发行版版本”依旧是7.6,而“内核补丁”则变成了122.2——这两个数字彼此独立,必须分别查询、分别理解。