cat /etc/redhat-release 是最可靠的发行版版本查看方式,输出如“CentOS Linux release 7.9.2009 (Core)”等固定元数据,不随内核或软件更新改变,适用于所有 CentOS 版本,包括 CentOS 6、7、8 及 Stream,但最小化安装可能缺失,此时可 fallback 到 /etc/centos-release。

cat /etc/redhat-release 显示最可靠的发行版版本
这个文件内容直接来自系统安装时写入的元数据,不会随内核升级或软件更新而改变,是判断 CentOS 大版本(如 7.9、8.5)最稳妥的方式。/etc/redhat-release 在所有 CentOS 版本中都存在,包括已停更的 CentOS 6 和较新的 CentOS Stream。
常见输出示例:
CentOS Linux release 7.9.2009 (Core)
CentOS Stream release 8
CentOS Linux release 8.5.2111
- 注意
CentOS Stream和CentOS Linux是不同分支,不能混为一谈 - 如果输出是
CentOS release 6.x (Final),说明是经典 CentOS 6,已停止维护 - 某些最小化安装可能不带该文件,此时 fallback 到
/etc/centos-release(CentOS 7+ 更常用)
lsb_release -a 需要先确认是否安装(尤其 CentOS 8+)
lsb_release 输出结构化信息,但 CentOS 8 及之后默认不预装,运行会报错:bash: lsb_release: 未找到命令。
必须手动安装才能用:
dnf install -y redhat-lsb-core
安装后执行 lsb_release -a,典型输出含四项关键字段:
-
Distributor ID:固定为CentOS -
Description:完整版本描述,如CentOS Linux release 8.4.2105 (Core) -
Release:纯数字版本号,如8.4.2105 -
Codename:代号,CentOS 7/8 均为Core,无实际区分意义
⚠️ 不建议在自动化脚本中无条件调用 lsb_release,它在 CentOS 6 和部分精简镜像里也不存在。
uname -r 只显示内核版本,不是操作系统版本
很多人误把 uname -r 的输出当成系统版本,比如看到 3.10.0-1160.el7.x86_64 就以为是 CentOS 7.9 —— 实际上这只是内核包构建标识,el7 表示“Enterprise Linux 7”,仅能反推大概范围,无法确定具体小版本(7.6?7.9?还是 7.10?)。
真正需要操作系统版本号时,uname 系列命令(包括 uname -a、cat /proc/version)都只反映内核层面,和 yum update 后的用户空间工具链无关。
-
uname -r输出格式:<kernel-version>.<build-id>.<distro-tag>.<arch></arch></distro-tag></build-id></kernel-version> -
el7或el8是 RHEL/CentOS 共用的构建标签,不能用于精确识别 CentOS 自身 patch 版本 - 同一内核版本可能被多个 CentOS 小版本复用(例如 3.10.0-1160 同时出现在 7.9 和 7.10 的某些镜像中)
cat /etc/centos-release 是 CentOS 7+ 的首选快捷方式
从 CentOS 7 开始,官方推荐使用 /etc/centos-release 替代 /etc/redhat-release,两者内容通常一致,但前者语义更明确。
执行:
cat /etc/centos-release
输出示例:
CentOS Linux release 7.9.2009 (Core)
这个路径在 CentOS 8 和 CentOS Stream 中同样有效;但在 CentOS 6 中该文件不存在,只能退回到 /etc/redhat-release。
? 小技巧:写判断脚本时可优先尝试读取 /etc/centos-release,失败再 fallback 到 /etc/redhat-release,覆盖全版本。
真正容易被忽略的是:CentOS Stream 的版本号不体现具体日期或补丁集(如 Stream 8),它本身是滚动发布模型,Release 字段只是主干标识,不能当作传统 CentOS 那样的固定快照来理解。


















