努力
加油

服务器系统类型不明,怎样识别是Ubuntu还是OpenEuler?

识别服务器操作系统是运维排查、部署环境或安全加固的第一步。当面对一台“身份不明”的服务器时,我们可以通过命令行工具从内核信息、版本标识文件、包管理器等维度进行精准判断。

以下是区分 Ubuntu 和 openEuler(华为开源欧拉操作系统)的具体方法和命令对比:

1. 查看内核版本与发行版标识(最通用方法)

无论使用哪种 Linux 发行版,uname 命令都是获取内核信息的基础工具,但结合 /etc/os-release 能更准确地识别发行版名称。

方法一:使用 cat /etc/os-release

这是目前最推荐的方法,因为所有现代 Linux 发行版都遵循 freedesktop.org 规范,该文件包含标准化的字段。

cat /etc/os-release

观察结果:

  • 如果是 Ubuntu:

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

    关键词:NAME="Ubuntu",ID_LIKE=debian

  • 如果是 openEuler:

    NAME="openEuler"
    VERSION="22.03 (LTS)"
    ID=openeuler
    ID_LIKE=rhel fedora
    PRETTY_NAME="openEuler 22.03 (LTS)"
    ANSI_COLOR="0;31"
    ...

    关键词:NAME="openEuler",ID=openeuler,ID_LIKE=rhel

注意:如果系统非常精简(如 Docker 容器或最小化安装),可能没有 /etc/os-release,请尝试以下方法。


方法二:使用 lsb_release -a

需要安装 lsb-release 包(Ubuntu 默认安装,openEuler 可能需要手动安装)。

lsb_release -a
  • Ubuntu 输出示例:

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

    Distributor ID: openEuler
    Description:    openEuler release 22.03 (LTS)
    Release:    22.03
    Codename:   n/a

2. 检查包管理器类型(关键差异点)

Ubuntu 基于 Debian,使用 .deb 包;openEuler 基于 RHEL/CentOS 体系,使用 .rpm 包。通过查询当前安装的软件包格式可以快速判断。

方法三:查看已安装包列表

# 查看 dpkg 管理的包(Debian/Ubuntu 特有)
dpkg -l | head -n 5

# 查看 rpm 管理的包(RHEL/openEuler 特有)
rpm -qa | head -n 5
  • Ubuntu:dpkg 命令存在且可用,rpm 通常不可用或未安装。
  • openEuler:rpm 命令存在且可用,dpkg 通常不可用。

提示:在 openEuler 上,你也可以使用 dnf 或 yum 来管理软件包,而 Ubuntu 使用的是 apt 或 apt-get。

# 测试 apt
apt --version   # Ubuntu 有输出,openEuler 无此命令

# 测试 dnf/yum
dnf --version   # openEuler 有输出,Ubuntu 无此命令

3. 查看主机名与启动日志(辅助判断)

方法四:检查 /etc/redhat-release 或 /etc/debian_version

  • openEuler(兼容 RHEL 体系):

    cat /etc/redhat-release
    # 输出类似:openEuler release 22.03 (LTS)
  • Ubuntu(Debian 体系):

    cat /etc/debian_version
    # 输出类似:bullseye/sid 或 11.6

方法五:查看系统启动日志中的初始化信息

dmesg | grep -i "linux version" | tail -n 1

虽然这主要显示内核版本,但有时会在早期启动阶段打印发行版相关信息。不过更可靠的是检查 systemd 的 journal:

journalctl -b | grep -i "openeuler|ubuntu" | head -n 3

4. 快速脚本一键判断

你可以将以下逻辑封装成一个简单的一行命令或脚本,用于自动化检测:

if [ -f /etc/os-release ]; then
    . /etc/os-release
    echo "OS Name: $NAME"
    echo "OS Version: $VERSION"
elif [ -f /etc/redhat-release ]; then
    echo "OS Name: $(cat /etc/redhat-release)"
elif command -v lsb_release &> /dev/null; then
    lsb_release -a
else
    echo "Unable to determine OS via standard files."
fi

总结对比表

特征 Ubuntu openEuler
基础体系 Debian-based RHEL/CentOS-based
包管理器 apt, dpkg dnf, yum, rpm
标识文件 /etc/os-release 中 NAME="Ubuntu" /etc/os-release 中 NAME="openEuler"
RedHat 兼容文件 无 /etc/redhat-release 有 /etc/redhat-release
Debian 版本文件 有 /etc/debian_version 无 /etc/debian_version
内核命名风格 通常带 -generic 或 -lowlatency 通常带 -oe 或 x86_64

实际建议

  1. 优先使用 cat /etc/os-release:这是最标准、最不易出错的方式。
  2. 若权限受限:只需执行 lsb_release -a 或 uname -a 结合 hostnamectl 即可初步判断。
  3. 云环境注意:如果你是在阿里云、腾讯云、华为云等云平台创建的 ECS/ECS 实例,可以直接登录控制台查看“操作系统类型”字段,无需进入系统内部判断。

通过以上方法,你可以准确、快速地识别出服务器是 Ubuntu 还是 openEuler,从而选择正确的软件安装命令和配置方式。