26

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

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

4

12 回答 12

29

lsb_release -i可能对你有用。

更多详细信息可通过lsb_release -a

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

于 2008-11-05T03:48:49.980 回答
28
cat /etc/*release

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

于 2008-11-05T03:52:12.330 回答
8

令人讨厌的是,这是一个比看起来更难的问题。

对于 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 页面上找到有关系统和发行版的一些信息。

于 2008-11-05T04:17:04.883 回答
3

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

于 2008-11-05T05:25:24.997 回答
2

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

  1. lsb_relase -a

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

  1. unname -a

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

  1. 猫 /etc/*释放

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

  1. 猫 /etc/问题

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

  1. 猫 /proc/版本

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

于 2017-12-04T11:00:51.707 回答
1

在我的.cshrc我有

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

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

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

当然,这可能不适用于您最喜欢的发行版。(我在Oracle 的 Unbreakable Linux上遇到了一些问题,它提供了类似于 Redhat 的东西,但对于我的目的来说已经足够了。)

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

于 2008-11-05T04:01:49.690 回答
1

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

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

于 2008-11-05T05:03:10.953 回答
1

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

cd /proc/

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

于 2010-06-17T10:28:00.063 回答
0

你可以使用'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
于 2008-11-05T03:44:48.520 回答
0
uname -r

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

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

否则,据我所知,没有任何普遍性。

于 2008-11-05T03:46:47.393 回答
0

NeoFetch

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

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

用法

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

可能会给:

Debian GNU/Linux 11(靶心)x86_64

但还有更多信息。

安装

选项:

  1. 系统包neofetch

  2. 如果不可用,请参阅官方安装说明

  3. 或者一次性使用——如果你有信心和互联网连接——你可以使用:

    wget 'https://raw.githubusercontent.com/dylanaraps/neofetch/master/neofetch' \
        && bash neofetch --stdout \
        && rm neofetch
    
于 2019-07-10T09:31:42.650 回答
-1

尝试uname -a

于 2008-11-05T03:43:33.890 回答