os-release 是什么
/etc/os-release 是按 freedesktop.org 规范提供的系统标识文件,用一组 KEY=值 的字段描述当前发行版:名字、版本号、代号、发行版 ID、继承的发行版家族等。它最大的价值是「跨发行版一致」——麒麟、统信 UOS、openEuler 都提供同一套字段,脚本据此做分支判断最稳。文件通常在 /etc/os-release,实际内容多来自 /usr/lib/os-release,前者是软链或引用,读的时候按 /etc 下这个路径即可。
基本信息
| 文件位置 | /etc/os-release(常软链自 /usr/lib/os-release) |
|---|---|
| 格式 | KEY=值 的 shell 风格键值对,值为带引号字符串 |
| 关键字段 | ID、VERSION_ID、NAME、VERSION、PRETTY_NAME、ID_LIKE |
| 规范来源 | freedesktop.org os-release 规范 |
| 适用平台 | Kylin V10 / UOS / openEuler / 主流 Linux 发行版 |
| 权限 | 所有用户可读 |
典型使用场景
- 跨发行版脚本分支:按 ID 决定装包命令、服务名与配置文件路径
- 交付登记:把 NAME、VERSION_ID、架构一次性记录到交付文档
- 判断包体系:结合 ID 与机器上 rpm、apt 的存在情况决定用哪套包管理
- 兼容性检查:安装前核对发行版与版本是否在软件支持矩阵内
- 批量巡检:在所有机器上采集同名字段做横向对比,找出不一致的版本
- 排障时确认环境:确认现场系统与文档假设是否一致,避免按错文档操作
读取与判断
读取与判断
cat /etc/os-release # 直接看全部字段
. /etc/os-release; echo "$ID $VERSION_ID" # 在当前 shell 导入后取值
. /etc/os-release; echo "$PRETTY_NAME" # 人工识别用完整名称
. /etc/os-release; echo "$ID_LIKE" # 判断继承的发行版家族
case "$ID" in # 脚本分支的标准写法
kylin) echo 麒麟 ;;
uos) echo 统信 ;;
openEuler) echo 欧拉 ;;
*) echo 其它发行版 ;;
esac
uname -m # 架构要一起采集关键字段读法
| 字段 | 含义 | 使用建议 |
|---|---|---|
| ID | 发行版标识,小写无空格 | 做判断条件的首选字段 |
| VERSION_ID | 主版本号,如 20、20.03 | 判断兼容性与软件源 |
| VERSION | 含代号的完整版本描述 | 报障与厂商沟通时使用 |
| NAME | 发行版名称 | 含产品线信息,可辅助区分服务器与桌面 |
| PRETTY_NAME | 展示用的完整名称 | 仅用于展示,不建议做判断条件 |
| ID_LIKE | 继承的发行版家族 | 用来推断包体系与配置习惯 |
一行摘要写法
一行摘要写法
. /etc/os-release; echo "$NAME $VERSION_ID $(uname -m)" # 交付登记最常用的一行
. /etc/os-release; echo "$ID-$VERSION_ID" # 生成脚本用的短标识ID 字段区分大小写,判断条件必须按实际输出写,不能凭记忆写变体;同一厂商的不同产品线 ID 可能相同,例如服务器版与桌面版都用同一个 ID,此时要结合 NAME、VERSION 与机器上的包管理工具一起判断。
不要依赖 lsb_release 或 /etc/redhat-release 这类发行版专有文件:最小化安装常不预装 lsb-release 包,专有文件名也只在部分发行版存在,跨发行版脚本用 os-release 字段最省事。