【问题标题】:How to discover what Linux distribution is in use如何发现正在使用的 Linux 发行版
【发布时间】:2010-09-20 19:51:27
【问题描述】:

有时我需要访问一些运行 Linux 的服务器(或者可能是另一个类似 Unix 的 SO),但我不知道如何验证服务器上正在使用哪个 distribution(有时甚至“负责“服务器的人不知道)。

是否有一种简单可靠的方法来发现这一点,并且在所有这些方法中都是一致且一致的?

【问题讨论】:

  • @Peter:真的有必要把‘distro’改成‘distribution’吗?

标签: linux operating-system


【解决方案1】:

lsb_release -i 可能适合你。

更多详情请咨询lsb_release -a

http://etbe.coker.com.au/2007/08/30/identifying-the-distribution-of-a-linux-system/的一些讨论

【讨论】:

  • lsb_release -d 给了我更好的结果。 -i 给出“发行商 ID:CentOS”。 -d 给出“描述:CentOS release 5.2 (Final)”。
【解决方案2】:
cat /etc/*release

大多数发行版都会在/etc/(如/etc/redhat-release/etc/gentoo-release 等)中放置一个发布文件,其中通常包含您的发行版的版本号。

【讨论】:

  • - bash: lsb_release: command not foundcat 为我工作
【解决方案3】:

烦人的是,这个问题比看起来更难。

对于 Linux 系统,使用 lsb_release。

$ lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 8.04.1
Release:        8.04
Codename:       hardy
$ lsb_release -i
Distributor ID: Ubuntu

这有 lsb_release 仅适用于 Linux 版本的限制。

对于所有的Unix系统,你也可以解析出uname。

$ uname -a
Linux blue-laptop 2.6.24-21-generic #1 SMP Tue Oct 21 23:43:45 UTC 2008 i686 GNU/Linux

您可以在uname Wikipedia page 找到有关系统和发行版的一些信息。

【讨论】:

  • 更严格地说,lsb_release 仅适用于尝试遵守 Linux Standard Base 规范的 Linux 系统。
【解决方案4】:

您应该问自己是否真的需要知道正在使用哪个发行版(可能是因为您想为这个发行版构建一个特定的包)。在许多其他情况下,这是一个更好的主意,只需测试并查看您需要的功能是否存在。这可能看起来需要做更多的工作,因为您必须逐个测试每个功能,但这样一来,您的软件就会变得更加灵活。

【讨论】:

    【解决方案5】:

    您可以使用不同的命令来检查正在使用的发行版。这里我只提到其中的 5 个。

    1. lsb_relase -a

    lsb_release 提供特定于发行版的信息。而-a 显示有关分发的所有信息。您也可以使用仅显示描述的-d

    1. uname -a

    uname 还提供系统信息。而-a 显示所有信息。您可以将man uname 用于其他选项。

    1. cat /etc/*release

    您也可以使用cat 命令从etc 文件夹中打印出所有具体的发布信息。该命令实际上是从 /etc 文件夹中读取 lsb-releaseos-release 文件。

    1. cat /etc/issue

    此命令从 /etc 文件夹中读取 issue 文件。

    1. cat /proc/version

    此命令从 /proc 文件夹中读取 version 文件。 /proc 文件夹包含有关系统进程的信息。

    【讨论】:

      【解决方案6】:

      proc file system:Linux 中包含所有硬件级别信息的目录。所以只需输入

      cd /proc/
      

      在那里,您会发现存储在文本文件中的信息金矿,其中包含有关系统的所有任意信息。

      【讨论】:

      • 所以cat /proc/version 将返回有关版本的信息。
      • cd /proc 本身没有任何用处。您不必cd 到一个目录来读取那里的文件,通常不需要(尽管在交互式shell 中,它使您免于输入长路径;但脚本通常很少需要cd)。
      • proc 中的许多文件使用 C 字符串,因此它们在技术上不是纯文本。尝试tr '\000' '\012' <file 用换行符替换空值。
      【解决方案7】:

      我发现 /etc/issue 通常与正在使用的发行版有关。

      但我不知道它在所有发行版上的可用性。

      【讨论】:

      • 不幸的是,许多发行版都有一个非常小的 /etc/issue,其中只有类似“This is \n.\O (\s \m \r) \t”之类的内容,这没有给出有关发行版的真实信息。
      • 是的,它适用于 Ubuntu。我得到了“Ubuntu 16.04.1 LTS \n \l”。是的,\n 和 \l 是文字(不是 ASCII 13 和 10)。
      【解决方案8】:

      在我的.cshrc 我有

      setenv DISTRO `sed -e 's/.*(//' -e 's/)).*//' /proc/version`
      

      对于ksh / Bash 用户,我认为它转换为

      export DISTRO=`sed -e 's/.*(//' -e 's/)).*//' /proc/version`
      

      当然,这可能不适用于您最喜欢的发行版。 (我对 Oracle's Unbreakable Linux 提供类似于 Redhat 的东西有意见,但对于我的目的来说已经足够了。)

      2016 年 8 月更新 我已经有一段时间没有以这种方式使用 Linux(2008 年是很久以前的事了)。对于我现在拥有的系统,这似乎不再适用了。

      【讨论】:

        【解决方案9】:

        你可以使用'uname':

        [anton@localhost ~]$ uname -a
        Linux localhost 2.6.26-ARCH #1 SMP PREEMPT Tue Aug 26 21:15:43 UTC 2008 i686 AMD Athlon(tm) 64 Processor 3000+ AuthenticAMD GNU/Linux
        

        【讨论】:

        • uname 显示版本和架构,但不显示发行版(Red Hat、SuSE、Ubuntu 等)
        • 通常发行版会添加到版本中,就像示例中的发行版是 Arch Linux。而对于 Arch,除了 /etc/issue 之外的所有其他提到的想法都不起作用。那么为什么要投反对票呢?
        【解决方案10】:
        uname -r
        

        应该打印当前运行的内核版本(至少,它适用于 Linux,不知道 如果*BSD 或其他相同)。这与发行版不同,但内核版本通常包含发行版名称,如果它是自定义的,例如“2.6.27-gentoo-r1”或其他东西。

        Init 经常在启动时打印一些东西,但是在它运行时这不是很好。

        否则,据我所知,没有什么通用的。

        【讨论】:

          【解决方案11】:

          NeoFetch

          ... 是一个非常专业的 BASH 脚本,它应该包含您可能想要的所有信息。

          免责声明:我不隶属于它)

          用法

          neofetch --stdout | grep '^OS: ' | sed -e 's/OS:[[:space:]]\+//'
          

          可能会给:

          Debian GNU/Linux 11(靶心)x86_64

          但还有更多信息。

          安装

          选项:

          1. 系统包neofetch

          2. 如果不可用,请参阅official installation instructions

          3. 或用于一次性使用 - 如果您有信心并有互联网连接 - 您可以使用:

            wget 'https://raw.githubusercontent.com/dylanaraps/neofetch/master/neofetch' \
                && bash neofetch --stdout \
                && rm neofetch
            

          【讨论】:

            【解决方案12】:

            试试uname -a

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-10
              • 2017-01-18
              • 2017-05-12
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多