如何判断构建是否基于 Debian?

如何判断构建是否基于 Debian?

我开始使用一个在其上构建了自定义(小型)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-releasexyz

答案3

检查输出:

lsb_release -a

和:

cat /etc/issue

rpm您还可以检查适用于 RedHat 和Debian 的更多低级软件包命令dpkg

答案4

uname -acat /proc/version超级用户只读),在我看来,是这个问题唯一正确的答案,因为其余的 - 例如lsb_release,/etc/issuecat /proc/sys/kernel/version- 在每个系统上都不可用/不可用(甚至不是官方的 Debian 发行版)。也不要费心使用/etc/*releases/etc/*version因为它们可以改变。后者并非在所有 Debian 发行版上都可用。

其他选项可能是(不是我的推荐):

  • 检查dash或验证是否sh链接到dash(它应该是运行脚本的默认值)
  • 通过执行检查包管理器>/dev/null 2>&1 dpkg --version && { ... }

相关内容