努力
加油

CentOS和Ubuntu系统中查看版本号的命令有哪些?

在 Linux 运维和开发日常中,确认系统版本是排错、安装软件或配置环境的第一步。虽然 CentOS 和 Ubuntu 都属于主流发行版,但由于它们背后的包管理器和初始化历史不同,查看版本号的方法既有重叠也有差异。

下面我将分门别类,梳理出最常用且可靠的命令,并解释其适用场景。

一、 CentOS/RHEL 系(包括 AlmaLinux, Rocky Linux 等)

CentOS 系列主要使用 RPM 包管理和 systemd,内核信息通常集中在 /etc/ 下的配置文件里。

1. cat /etc/os-release (推荐,最标准)

这是目前最通用、最规范的查看方式。它输出的是 freedesktop.org 定义的标准格式,包含 ID、VERSION_ID、PRETTY_NAME 等信息。无论 CentOS 7 还是 CentOS Stream 9,这条命令都能给出清晰的结构化数据。

$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
VERSION_ID="7"
...

2. lsb_release -a (需安装 lsb-release 包)

如果你需要快速获取人类可读的完整描述,这个命令很直观。但注意,最小化安装的 CentOS 可能没有预装 redhat-lsb-core 包,直接运行会提示 command not found。

$ yum install redhat-lsb-core -y  # 如果没装的话
$ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.9.2009 (Core)
Release:        7.9.2009
Codename:       Core

3. rpm -q centos-release (针对特定包)

如果你想确认的是“发布包”的版本,而不是内核或其他组件,可以直接查询该包。这在判断是否为 Stream 版本或具体小版本时很有用。

$ rpm -q centos-release
centos-release-7-9.2009.0.el7.12.x86_64

4. uname -r 与 uname -a (看内核,非系统版本)

很多新手容易混淆。uname 查看的是内核版本,不是操作系统版本。例如 CentOS 7 可以升级内核到 5.x,但系统本身还是 CentOS 7。除非你在排查驱动兼容性问题,否则一般不首选这个。


二、 Ubuntu/Debian 系

Ubuntu 基于 Debian,继承了 .deb 包管理体系,同时也遵循标准的 /etc/os-release 规范。

1. cat /etc/os-release (同样推荐,最标准)

和 CentOS 一样,这是跨发行版的黄金标准。输出内容更简洁,重点突出 VERSION_CODENAME(如 focal, jammy)。

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

2. lsb_release -a (Ubuntu 默认自带)

Ubuntu 桌面版和大多数服务器镜像都预装了 lsb-release,所以这条命令开箱即用,无需额外安装。

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

3. cat /etc/lsb-release (轻量级替代)

如果你只想快速看一眼,而不想要 lsb_release 命令带来的开销,可以直接读这个文件。它比 os-release 更简短,只包含 LSB 相关信息。

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

4. hostnamectl (systemd 特有)

如果你的系统使用了 systemd(现代 Linux 标配),hostnamectl 不仅能看主机名,也能显示操作系统和内核信息。适合喜欢单一命令解决多个问题的场景。

$ hostnamectl
   Static hostname: ubuntu-server
         Icon name: computer-vm
           Chassis: vm
        Operating System: Ubuntu 20.04.6 LTS
                  Kernel: Linux 5.4.0-150-generic
            Architecture: x86-64

三、 通用技巧与避坑指南

  1. 不要依赖 /etc/redhat-release 或 /etc/issue
    这些文件存在但内容可能过时或被自定义修改,尤其是 /etc/issue 常用于登录前的欢迎语,不一定反映真实系统版本。/etc/os-release 是动态生成的,更可靠。

  2. 区分“大版本”和“小版本”

    • CentOS 7.9 vs CentOS 7.0:对于补丁兼容性很重要。
    • Ubuntu 20.04.1 vs 20.04.6:LTS 维护点更新,涉及安全补丁级别。
      使用 cat /etc/os-release 中的 VERSION_ID 和 PRETTY_NAME 能最好地分辨这一点。
  3. 容器内(Docker/K8s)
    在容器里,你可能看不到完整的宿主系统信息,因为容器共享宿主机内核。此时应关注容器镜像本身的标签(Tag),或在容器内运行 cat /etc/os-release 来确认镜像基础系统。

  4. 脚本自动化建议
    如果你在写 Shell 脚本判断系统类型,推荐使用:

    if grep -q "Ubuntu" /etc/os-release; then
       echo "Ubuntu system"
    elif grep -q "CentOS" /etc/os-release; then
       echo "CentOS system"
    fi

    这种方式比调用外部命令更高效、更少出错。

总结来说:cat /etc/os-release 是你应该记住的唯一万能命令。它在 CentOS 和 Ubuntu 上表现一致,输出结构清晰,适合人工阅读和脚本解析。其他命令可作为补充,用于特定场景或习惯偏好。