努力
加油

怎样判断远程服务器是CentOS还是Ubuntu系统?

判断远程服务器是 CentOS 还是 Ubuntu,最稳妥的方式不是猜,而是通过 SSH 登录进去看系统版本信息。毕竟现在的云厂商(阿里云、腾讯云、华为云等)提供的镜像虽然底层内核可能相似,但包管理器和默认配置差异很大。

以下是几种从“暴力”到“优雅”的判断方法,按推荐程度排序:

1. 最标准做法:查看发布文件内容

这是最准确的方法,因为这两个发行版都在 /etc/ 目录下放了描述自身版本的专用文件。

在终端执行以下命令之一即可:

cat /etc/os-release

输出示例对比:

  • 如果是 CentOS (7/8):

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

    注意:CentOS 8 已经停止维护,现在主流是 CentOS Stream 或 Rocky/AlmaLinux,它们也会显示 ID="centos-stream" 或 ID="rocky" 等,但名字里通常带 “CentOS” 或 “Rocky”。

  • 如果是 Ubuntu:

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

为什么推荐这个?
/etc/os-release 是 freedesktop.org 的标准,几乎所有现代 Linux 发行版都支持,而且格式统一,解析起来最不容易出错。


2. 快速判断:使用 lsb_release 命令

如果你安装了 lsb-release 包(Ubuntu 默认安装,CentOS 可能需要手动装 redhat-lsb-core),可以用这个更简洁的命令:

lsb_release -a
  • Ubuntu 输出:

    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 22.04.1 LTS
    Release:        22.04
    Codename:       jammy
  • CentOS 输出:

    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

注意: 有些精简版的云服务器镜像可能没预装 lsb_release,这时候会提示 command not found。如果遇到这种情况,请回退到第 1 种方法。


3. 辅助判断:检查包管理器

CentOS 和 Ubuntu 的软件包管理系统完全不同,这是一个非常直观的区分点:

  • CentOS/RHEL 系: 使用 yum 或 dnf

    yum --version
    # 或者
    dnf --version
  • Ubuntu/Debian 系: 使用 apt 或 apt-get

    apt --version
    # 或者
    apt-get --version

你可以直接尝试运行:

which apt yum

如果只有 apt 没有 yum,大概率是 Ubuntu;反之则是 CentOS 系。


4. 进阶技巧:通过内核模块和初始化系统判断(不依赖特定文件)

如果你连 /etc/os-release 都被删了(极端情况),可以看初始化系统和内核模块:

  • Systemd vs SysVinit:
    现在两者基本都用 systemd,所以这招不太灵。但你可以看 /sbin/init 是否是 systemd。

  • 观察默认编辑器或 shell:

    • Ubuntu 默认编辑器通常是 nano 或 vim,且用户主目录结构较规范。
    • CentOS 传统上更偏向 vi/vim,且历史包袱较重。

但这都不是可靠的判断依据,仅作为旁证。


⚠️ 重要提醒:警惕“伪 CentOS”

近年来,由于 CentOS 8 停更,很多用户转向 Rocky Linux、AlmaLinux 或 CentOS Stream。这些系统在很多方面与 CentOS 高度兼容,甚至命令行几乎一样。

  • Rocky Linux / AlmaLinux:它们是 RHEL 的下游克隆版,行为像 CentOS,但名字不同。
  • CentOS Stream:它是 RHEL 的上游滚动版本,名字叫 CentOS,但本质是开发分支。

所以,当你看到 Distributor ID: CentOS 时,最好再确认一下具体版本:

cat /etc/redhat-release
  • CentOS 7: CentOS Linux release 7.9.2009 (Core)
  • Rocky: Rocky Linux release 8.5 (Green Obsidian)
  • Alma: AlmaLinux release 8.5 (Sky Tiger)

✅ 最佳实践建议

在实际运维中,不要只靠“猜”,建议在自动化脚本中加入以下逻辑:

# 安全获取系统类型
if [ -f /etc/os-release ]; then
    . /etc/os-release
    OS=$NAME
    VERSION_ID=$VERSION_ID
elif [ -f /etc/redhat-release ]; then
    OS="RedHat/CentOS"
else
    OS="Unknown"
fi

echo "Detected OS: $OS, Version: $VERSION_ID"

这样既能处理 Ubuntu,也能正确处理各种 RHEL 衍生版(包括 CentOS、Rocky、Alma、Fedora 等)。

总结:首选 cat /etc/os-release,次选 lsb_release -a,辅以 which apt yum 快速验证。