检测基于 RHEL/RPM 的发行版

检测基于 RHEL/RPM 的发行版

我正在尝试编写一个脚本来检测它是否在基于 RHEL/RPM 的发行版上运行。

我遇到过一些奇怪的系统配置为同时安装dpkg和,因此执行 a并不是解决方案。rpmwhich rpm

我尝试这样做:

if [[ "$(cat /etc/*[_-][rv]e[lr]*)" == (CentOS|Fedora) ]]; then
  #...
fi

但这需要我知道所有基于 RHEL/RPM 的发行版的名称。

答案1

如果您的目的是检测rpm该系统上是否有软件包管理器,那么一个好的启发方法应该是 RPM 软件包数据库不为空。

if [ -n "$(rpm -qa)" ] 2>/dev/null; then
  echo "This looks like an rpm-based system"
else
  echo "Either there is no rpm command, or the rpm package database has no entries"
fi

答案2

/etc/os-release文件包含该ID_LIKE=字段,用于标识本地操作系统派生的基础发行版。您可以检查它是否rhel包含grep

cat /etc/os-release | grep ID_LIKE= | grep rhel

有关此文件的更多文档:自由桌面

答案3

我会检查 /etc/redhat-release 或 /etc/fedora-release 是否存在。

答案4

您可以检查以下输出/proc/version

$ cat /proc/version 
Linux version 3.14.8-200.fc20.x86_64 ([email protected]) 
(gcc version 4.8.2 20131212 (Red Hat 4.8.2-7) (GCC) ) #1 SMP Mon Jun 16 21:57:53 UTC 2014

例子:

$ grep -q 'Red Hat' /proc/version && echo "Redhat based distro"
Redhat based distro

相关内容