努力
加油

通过命令行如何查看CentOS或Ubuntu的系统版本?

在 Linux 环境下查看系统版本,其实没有唯一的标准答案,因为不同的发行版(Distribution)和内核版本迭代,导致命令输出格式差异很大。作为运维或开发者,掌握几种最稳妥、兼容性最好的方法比死记硬背某个单一命令更重要。

以下分 CentOS 和 Ubuntu 两种主流场景,结合实战经验给出最准确的方案。

一、 CentOS / RHEL 系列

CentOS 家族内部版本较多(如 CentOS 6, 7, 8, Stream),且不同版本的文件结构有变化。建议按优先级使用以下命令:

1. 最推荐:cat /etc/os-release

这是目前最通用、最标准化的方法。从 CentOS 7 开始,Red Hat 系全面转向 os-release 标准,这个方法在所有现代 Linux 发行版中都有效。

$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

优点:结构化数据,字段清晰,脚本中解析方便。

2. 传统经典:cat /etc/redhat-release

如果你只关心“大版本号”(比如只需知道是 7 还是 8),这个命令最简单直接。

$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

注意:在较新的 CentOS Stream 或某些最小化安装中,这个文件可能不存在或内容不完整,因此不如 os-release 可靠。

3. 内核版本:uname -r

很多时候我们说“看版本”,其实是指“内核版本”。如果你需要确认运行的是哪个内核:

$ uname -r
3.10.0-1160.el7.x86_64

注意:这显示的是内核版本,不是操作系统发布版本。对于容器环境或云主机,内核版本往往由宿主机决定,不一定反映客户机 OS 版本。


二、 Ubuntu / Debian 系列

Ubuntu 的版本标识相对统一,主要依赖 /etc/os-release 和 /etc/lsb-release。

1. 最推荐:cat /etc/os-release

与 CentOS 一样,这是现代 Ubuntu(14.04+)的标准方式。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
...

2. 专用命令:lsb_release -a

这是 Debian/Ubuntu 特有的工具,专门用于查询 LSB(Linux Standard Base)合规信息。如果系统安装了 lsb-release 包(通常默认已装),这是最直观的输出。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.5 LTS
Release:        20.04
Codename:       focal

优点:输出人类可读性强,包含代号(Codename)。
缺点:在某些极简容器镜像中可能未预装此命令。

3. 快速查看:cat /etc/lsb-release

如果不想用命令,直接读文件更快:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.5 LTS"

三、 通用万能法(适用于所有 Linux)

如果你不确定系统是 CentOS 还是 Ubuntu,或者是在一个陌生环境中,以下三个命令组合可以覆盖 99% 的情况:

# 1. 查看操作系统名称和版本(最标准)
cat /etc/os-release | grep PRETTY_NAME

# 2. 查看内核版本
uname -a

# 3. 查看架构信息
arch

四、 实战建议与避坑指南

  1. 不要依赖 hostnamectl
    虽然 hostnamectl 也能显示 OS 信息,但它依赖于 systemd,且在非 systemd 初始化系统(如一些老旧的 OpenVZ 容器或自定义 init 的系统)中可能不可用或输出不全。优先使用读取静态配置文件的方法。

  2. 脚本中如何判断?
    如果你在写 Shell 脚本需要根据版本做分支处理,建议解析 /etc/os-release 中的 ID 和 VERSION_ID 字段,而不是匹配字符串。例如:

    #!/bin/bash
    source /etc/os-release
    
    case "$ID" in
      centos)
        echo "This is CentOS $VERSION_ID"
        ;;
      ubuntu)
        echo "This is Ubuntu $VERSION_ID"
        ;;
      *)
        echo "Unknown OS: $ID"
        ;;
    esac
  3. 云服务器特别注意
    在阿里云、腾讯云等云厂商的控制台或 API 中,你看到的“镜像版本”可能与实例内实际运行的内核版本不一致。例如,官方镜像标注为 Ubuntu 20.04,但经过安全更新后,内核可能是 5.4 而非默认的 5.3。务必以 uname -r 为准来排查驱动或兼容性问题。

  4. 关于敏感词和合规性
    以上命令均为标准 POSIX/Linux 系统命令,不涉及任何敏感内容,可在生产环境中放心使用。避免使用 sudo 执行不必要的查看操作,普通用户权限即可读取 /etc/os-release 和 /etc/redhat-release。

总结:首选 cat /etc/os-release,它已成为事实上的行业标准,兼顾了 CentOS 和 Ubuntu 的兼容性,简洁且信息完整。