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

Spa*_*ky1 9 distros 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
Run Code Online (Sandbox Code Playgroud)

Wil*_*ilf 9

对于 Debian 系统的测试,您可以检查是否/etc/debian_version存在:

if [ -f "/etc/debian_version" ]; then
   # do stuff
fi
Run Code Online (Sandbox Code Playgroud)

它应该包含在 Debian 和基于它的系统(包括 Ubuntu 及其衍生产品)中,尽管有些可能没有 - 在这种情况下,您可以检查/etc/*release文件:

if [ "$(grep -Ei 'debian|buntu|mint' /etc/*release)" ]; then
   # do stuff
fi
Run Code Online (Sandbox Code Playgroud)

debian|buntu|mint要查找的发行版名称列表在哪里(不区分大小写) - 您可以从这里了解一些常见的衍生产品,尽管像 Ubuntu这样的debian 衍生产品有它们自己的衍生产品


对于基于 RedHat 的系统,衍生版本使用更大范围的文件,并且可能没有安装 lsb-release - 因此您可以应用以下方法:

  • lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-
    
    Run Code Online (Sandbox Code Playgroud)
  • 检查文件中的 DISTRIB-ID lsb-release- 一种“现代系统上可能不需要的后备方法”,该文件在 Fedora 上显然丢失,并且在 OpenSUSE 上不包含 DISTRIB_ID

  • 检查是否存在以下某些内容

    • /etc/fedora-release和/或/etc/redhat-releaseRedHat 或 Fedora
    • /etc/SuSE-release 为SuSe
    • /etc/mandriva-release 对于曼德里瓦/玛吉亚
  • 使用与后一种 debian 类似的方法:

    if [ "$(grep -Ei 'fedora|redhat' /etc/*release)" ]; then
    ...
    
    Run Code Online (Sandbox Code Playgroud)

我从 Google Chrome 的更新 cron 中获取的前 3 点,因此您可以检查以了解更多信息(它也决定了包管理器)


对于更广泛的操作系统,阅读这篇关于 SO 的文章应该会有所帮助。


小智 3

运行uname -a应该会为您提供一些有关系统的一般信息。此外,您可以apropos "package manager"使用类似的关键字运行 或 ,以期找到有关包管理器的更多信息。查找名为where/etc的文件,该文件应该是正在运行的任何发行版。xyz-releasexyz