在 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)时,建议在创建实例时明确选择操作系统镜像类型,并在初始化后通过上述命令二次确认,以避免因镜像混淆导致的后续配置问题。
云技术博客