努力
加油

怎样通过命令行查看CentOS或Ubuntu的版本信息?

在 Linux 世界里,版本查看其实是个“基本功”,但不同发行版(尤其是 CentOS 和 Ubuntu)因为底层架构和历史沿革不同,命令确实有差异。下面我按系统分类,把最常用、最稳妥的方法列出来,顺便解释一下背后的逻辑,方便你理解而不是死记硬背。

一、CentOS / RHEL 系列(基于 Red Hat)

CentOS 7 之前主要用 lsb_release 或 /etc/redhat-release,CentOS 8/Stream 之后更推荐看 /etc/os-release。

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

这是目前几乎所有现代 Linux 发行版都遵循的标准文件,信息最全且格式统一。

cat /etc/os-release

输出示例:

NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
...
PRETTY_NAME="CentOS Linux 7 (Core)"

你看 PRETTY_NAME 这一行,直接就能知道是 CentOS 7。如果是 CentOS Stream 8,这里会显示 Stream。

2. 传统方法:cat /etc/redhat-release

这是老派运维人员最爱用的,简单粗暴。

cat /etc/redhat-release

输出示例:

CentOS Linux release 7.9.2009 (Core)

注意:这个方法在较新的 CentOS Stream 或某些精简版系统中可能不存在或不准确,但在 CentOS 7/6 上非常稳。

3. LSB 标准方法:lsb_release -a

需要安装 redhat-lsb-core 包才能用(很多最小化安装的服务器默认没装)。

lsb_release -a

输出示例:

Distributor ID: CentOS
Description:    CentOS Linux release 7.9.2009 (Core)
Release:        7.9.2009
Codename:       Core

如果提示 command not found,别慌,说明你没装这个工具,直接用上面两个方法就行。

4. 内核版本:uname -r

很多人混淆“操作系统版本”和“内核版本”。如果你只想知道内核是多少:

uname -r

输出示例:

3.10.0-1160.el7.x86_64

这代表内核是 3.10,el7 表示它是为 RHEL/CentOS 7 编译的。


二、Ubuntu / Debian 系列

Ubuntu 基于 Debian,所以有些命令是通用的,但也有自己的特色。

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

和 CentOS 一样,这是现代 Linux 的标准做法。

cat /etc/os-release

输出示例:

NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
...
PRETTY_NAME="Ubuntu 20.04.5 LTS"

一眼就能看到是 20.04 LTS。

2. Ubuntu 专属:lsb_release -a

Ubuntu 默认就装了 lsb-release 包,所以这个命令在 Ubuntu 上几乎必能用,而且输出非常清晰。

lsb_release -a

输出示例:

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

注意:第一行“No LSB modules…”可以忽略,不影响判断。重点看 Description 和 Release。

3. 旧版习惯:cat /etc/lsb-release

这个文件内容比 /etc/os-release 少一点,但也很直观。

cat /etc/lsb-release

输出示例:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.5 LTS"

4. 内核版本:uname -r

同样适用:

uname -r

输出示例:

5.4.0-142-generic

三、避坑指南 & 实用技巧

  1. 不要只看 uname -v 或 uname -a
    uname -a 会打印所有内核信息,包括主机名、CPU 架构等,虽然能看到内核版本,但看不出是 CentOS 还是 Ubuntu。比如:

    uname -a
    # Linux server1 3.10.0-1160.el7.x86_64 #1 SMP ... x86_64 GNU/Linux

    这里只有 el7 暗示了可能是 RHEL/CentOS 7,但不能 100% 确定是 CentOS(也可能是 Rocky、Alma 等兼容系统)。

  2. 容器环境(Docker/K8s)里的特殊情况
    如果你在 Docker 容器里运行这些命令,看到的可能不是宿主机的版本,而是容器镜像的版本。例如一个 Ubuntu 容器里跑 lsb_release -a,显示的是容器基础镜像的版本,而不是宿主机 Ubuntu 的版本。要查宿主机版本,得从宿主机操作。

  3. 一键判断脚本(适合自动化)
    如果你写脚本需要判断系统类型和版本,可以用这个组合:

    #!/bin/bash
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        echo "ID: $ID, VERSION: $VERSION_ID"
    elif [ -f /etc/redhat-release ]; then
        cat /etc/redhat-release
    else
        echo "Unknown OS"
    fi

总结

系统 最推荐命令 备选命令 备注
CentOS 7/8/Stream cat /etc/os-release cat /etc/redhat-release /etc/redhat-release 在新版中可能缺失
Ubuntu 16.04+ cat /etc/os-release lsb_release -a lsb_release 在 Ubuntu 上默认可用,输出友好
所有 Linux uname -r — 仅查内核版本,不区分发行版

日常工作中,我基本只用 cat /etc/os-release 这一个命令,因为它跨发行版兼容性最好,信息也最标准化。