我开始使用一个在其上构建了自定义(小型)Linux 的盒子。我如何判断这是基于 Debian 还是基于 Red Hat 的构建?
这是我目前所知道的:
$ cat /proc/version
Linux version 2.6.31-2.5 (build@build-desktop) (gcc version 4.4.3 (Broadcom stbgcc-4.4.3-1.2) ) #7
$ apt-get
-sh: apt-get: command not found
$ yum
-sh: yum: command not found
答案1
对于 Debian 系统的测试,可以检查是否/etc/debian_version
存在:
if [ -f "/etc/debian_version" ]; then
# do stuff
fi
它应该包含在 Debian 和基于它的系统(包括 Ubuntu 及其衍生版本)中,尽管有些可能没有它 - 在这种情况下,您可以检查所有 /etc/*release
文件:
if [ "$(grep -Ei 'debian|buntu|mint' /etc/*release)" ]; then
# do stuff
fi
在哪里debian|buntu|mint
可以找到要查找的发行版名称列表(不区分大小写)——您可以从中了解一些常见的衍生产品这里,尽管 Debian 衍生品如 Ubuntu
有自己的衍生品。
对于基于 RedHat 的系统,衍生版本使用更大范围的文件,并且可能尚未lsb-release
安装 - 因此您可以应用以下方法:
获取版本名称
lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-
检查文件中的 DISTRIB-ID
lsb-release
— 这是一种后备方法,在现代系统上可能没有必要,而且该文件在 Fedora 上显然丢失,并且在 OpenSUSE 上不包含 DISTRIB_ID检查是否存在以下一些内容
/etc/fedora-release
和/或/etc/redhat-release
分别适用于 Fedora 或 RedHat/etc/SuSE-release
对于苏硒/etc/mandriva-release
曼德里瓦/马吉亚
使用与后一种 Debian 类似的方法:
if [ "$(grep -Ei 'fedora|redhat' /etc/*release)" ]; then ...
前 3 点是我从 Google Chrome 的更新 cron 中获取的,因此您可以检查它以了解更多信息(它还决定了包管理器)。
对于更广泛的操作系统,“如何从 Bash 脚本检测操作系统?” [关于堆栈溢出] 应该有帮助。
答案2
运行uname -a
应该会为您提供一些有关系统的一般信息。此外,您可以apropos "package manager"
使用类似的关键字运行 或 ,以期找到有关包管理器的更多信息。查找名为where/etc
的文件,该文件应该是正在运行的任何发行版。xyz-release
xyz
答案3
检查输出:
lsb_release -a
和:
cat /etc/issue
rpm
您还可以检查适用于 RedHat 和Debian 的更多低级软件包命令dpkg
。
答案4
uname -a
和cat /proc/version
(超级用户只读),在我看来,是这个问题唯一正确的答案,因为其余的 - 例如lsb_release
,/etc/issue
或cat /proc/sys/kernel/version
- 在每个系统上都不可用/不可用(甚至不是官方的 Debian 发行版)。也不要费心使用/etc/*releases
,/etc/*version
因为它们可以改变。后者并非在所有 Debian 发行版上都可用。
其他选项可能是(不是我的推荐):
- 检查
dash
或验证是否sh
链接到dash
(它应该是运行脚本的默认值) - 通过执行检查包管理器
>/dev/null 2>&1 dpkg --version && { ... }