我正在尝试编写一个脚本来检测它是否在基于 RHEL/RPM 的发行版上运行。
我遇到过一些奇怪的系统配置为同时安装dpkg
和,因此执行 a并不是解决方案。rpm
which 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