努力
加油

通过命令行如何区分云服务器使用的是Ubuntu还是CentOS系统?

在云服务器(ECS/CVM)环境下,区分操作系统是 Ubuntu 还是 CentOS,核心在于识别它们的包管理器和发行版标识文件。这两者虽然都是 Linux,但底层生态完全不同:Ubuntu 基于 Debian,使用 apt;CentOS(尤其是经典的 CentOS 7/8 及 Stream)基于 Red Hat,使用 yum 或 dnf。

以下是几种最常用、最可靠的命令行判断方法,按推荐程度排序:

1. 查看版本信息文件(最通用、最准确)

Linux 系统通常在 /etc/ 目录下存放发行版标识文件。这是最底层的判断依据,无论是否安装了图形界面或额外工具,只要系统启动正常,这些文件就存在。

执行命令:

cat /etc/os-release

如何解读输出:

  • 如果是 Ubuntu:

    NAME="Ubuntu"
    VERSION="20.04.6 LTS (Focal Fossa)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 20.04.6 LTS"
    ...

    关键看 NAME 或 ID 字段是否为 ubuntu。

  • 如果是 CentOS:

    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    ...

    或者 CentOS Stream:

    NAME="CentOS Stream"
    VERSION="8"
    ID="centos"
    ...

    关键看 NAME 或 ID 字段是否为 centos。

注意: 如果你习惯更简洁的输出,也可以直接运行 lsb_release -a,前提是你已经安装了 lsb-release 包(Ubuntu 默认安装,CentOS 可能需要手动安装)。如果提示命令未找到,说明该环境没装这个工具,此时应回退到第一种方法。

2. 检查包管理器(最直观)

既然两者的包管理器不同,直接测试哪个可用是最快的方式。

执行命令:

which apt
which yum
which dnf

判断逻辑:

  • 如果 which apt 返回路径(如 /usr/bin/apt),而 yum 或 dnf 无输出或报错,那基本就是 Ubuntu。
  • 如果 which yum 或 which dnf 返回路径,而 apt 无输出,那基本就是 CentOS 或其衍生版(如 RHEL、Alibaba Cloud Linux)。

技巧: 你可以用一个简单的 shell 条件语句来自动化判断:

if command -v apt &> /dev/null; then
    echo "This is likely Ubuntu/Debian"
elif command -v yum &> /dev/null || command -v dnf &> /dev/null; then
    echo "This is likely CentOS/RHEL/Fedora"
else
    echo "Unknown or minimal system"
fi

3. 查看主机名或初始化脚本痕迹(辅助判断)

有些云厂商会在实例初始化时写入特定标记,但这不是标准做法,仅供参考。

执行命令:

hostnamectl

输出示例:

  • Ubuntu:

    Static hostname: ubuntu-server
            Icon name: computer-vm
              CPE OS Name: cpe:/o:canonical:ubuntu:20.04:server
                   OS: Ubuntu 20.04.6 LTS
                Kernel: Linux 5.4.0-150-generic
          Architecture: x86-64

    看到 cpe:/o:canonical:ubuntu 即可确认。

  • CentOS:

    Static hostname: centos-node
            Icon name: computer-vm
              CPE OS Name: cpe:/o:centos:centos:7
                   OS: CentOS Linux 7 (Core)
                Kernel: Linux 3.10.0-1160.el7.x86_64
          Architecture: x86-64

    看到 cpe:/o:centos:centos 即可确认。

4. 特殊情况:阿里云 Linux / Alibaba Cloud Linux

在国内云计算环境中,你很可能遇到的是 Alibaba Cloud Linux(兼容 CentOS 生态)。它看起来像 CentOS,但名字不同。

执行命令:

cat /etc/os-release | grep NAME

输出:

NAME="Alibaba Cloud Linux"
VERSION="3.2104 LTS"
ID="alinux"
...

这种情况下,虽然它叫 Alibaba Cloud Linux,但其包管理器行为与 CentOS 高度一致(使用 yum 或 dnf),软件兼容性也遵循 RPM 体系。所以在运维操作中,可以将其视为 CentOS 的替代品来处理。


总结建议

场景 推荐命令 判断依据
最可靠 cat /etc/os-release 查看 NAME 和 ID 字段
最快捷 which apt vs which yum/dnf 哪个包管理器存在就用哪个
需格式化输出 lsb_release -a 需提前安装 lsb-release

实际工作流建议:

  1. 先跑 cat /etc/os-release,一眼就能看出是 Ubuntu 还是 CentOS/Alibaba Cloud Linux。
  2. 如果需要写脚本自动处理,用 grep -q "ubuntu" /etc/os-release && echo "UBUNTU" || echo "NOT_UBUNTU" 这种简单逻辑即可。
  3. 避免依赖 uname -r,因为内核版本不能反映用户空间发行版差异。

记住:Ubuntu 用 .deb 包,CentOS 用 .rpm 包。这个根本区别决定了你的所有后续操作(安装软件、配置服务)都必须遵循对应的生态规范。