努力
加油

通过命令行怎样区分服务器使用的是CentOS还是Ubuntu?

在 Linux 环境下,区分 CentOS 和 Ubuntu 其实非常简单,因为这两者虽然都基于 Linux 内核,但在软件包管理、发行版标识文件以及默认配置上有着本质的区别。

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

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

这是最底层也最准确的方法,因为所有基于 RPM 或 DEB 的发行版都会在 /etc/ 目录下保留特定的标识文件。

方法 A:检查 os-release 文件
这是目前大多数现代 Linux 发行版(包括 CentOS 7+ 和 Ubuntu 16.04+)通用的标准方式。

cat /etc/os-release

输出结果中,重点关注 NAME 和 VERSION_ID 字段:

  • 如果看到 NAME="CentOS Linux" 或 NAME="CentOS Stream",则是 CentOS。
  • 如果看到 NAME="Ubuntu",则是 Ubuntu。

方法 B:检查特定发行版专属文件

  • 针对 CentOS/RHEL 系列:

    cat /etc/redhat-release

    输出示例:CentOS Linux release 7.9.2009 (Core) 或 CentOS Stream release 8。
    注意:Ubuntu 系统下通常没有这个文件,或者内容为空。

  • 针对 Ubuntu/Debian 系列:

    cat /etc/lsb-release

    输出示例:DISTRIB_ID=Ubuntu、DISTRIB_RELEASE=22.04。
    注意:CentOS 系统下通常没有这个文件。

2. 通过软件包管理器判断

CentOS 使用 yum 或 dnf(RPM 包管理器),而 Ubuntu 使用 apt 或 apt-get(DEB 包管理器)。你可以直接尝试运行这些命令并观察帮助信息或错误提示。

# 尝试获取 yum 的帮助信息
yum --help | head -n 5

# 尝试获取 apt 的帮助信息
apt --help | head -n 5
  • 如果 yum 命令存在并能正常显示帮助信息,大概率是 CentOS/RHEL 系。
  • 如果 apt 命令存在并能正常显示帮助信息,大概率是 Ubuntu/Debian 系。

技巧:你也可以直接问当前系统的“家底”:

rpm -q centos-release  # CentOS 专用
dpkg --version        # Ubuntu/Debian 专用

3. 快速一键脚本(适合批量检测)

如果你需要在多台服务器上快速判断,可以使用以下一行命令:

grep -q "CentOS" /etc/os-release && echo "This is CentOS" || grep -q "Ubuntu" /etc/os-release && echo "This is Ubuntu" || echo "Unknown or other distro"

或者更简洁地只打印名称:

grep '^NAME=' /etc/os-release | cut -d'"' -f2

补充说明:为什么不用 uname -a?

很多人第一反应是 uname -a,但它不能用来区分 CentOS 和 Ubuntu。

uname -a
# 输出示例:Linux server1 3.10.0-1160.el7.x86_64 #1 SMP ... x86_64 GNU/Linux

uname 只显示内核版本(Kernel Version),而内核是跨发行版共享的。CentOS 和 Ubuntu 可以安装完全相同的内核版本,因此无法通过内核信息判断操作系统类型。

总结建议

  • 首选:cat /etc/os-release —— 信息最全,兼容性好。
  • 次选:cat /etc/redhat-release(查 CentOS)或 cat /etc/lsb-release(查 Ubuntu)—— 针对性强。
  • 避坑:不要用 uname -a 来判断发行版。

在实际运维中,尤其是涉及云服务器(如阿里云 ECS、腾讯云 CVM)时,建议在创建实例时明确选择操作系统镜像类型,并在初始化后通过上述命令二次确认,以避免因镜像混淆导致的后续配置问题。