有时我需要访问一些运行 Linux 的服务器(或者可能是另一个类似 Unix 的 SO),但我不知道如何验证服务器上正在使用哪个发行版(有时甚至是服务器的“负责人”不知道)。
是否有一种简单可靠的方法来发现这一点,并且在所有这些方法中都是统一且一致的?
有时我需要访问一些运行 Linux 的服务器(或者可能是另一个类似 Unix 的 SO),但我不知道如何验证服务器上正在使用哪个发行版(有时甚至是服务器的“负责人”不知道)。
是否有一种简单可靠的方法来发现这一点,并且在所有这些方法中都是统一且一致的?
lsb_release -i
可能对你有用。
更多详细信息可通过lsb_release -a
在http://etbe.coker.com.au/2007/08/30/identifying-the-distribution-of-a-linux-system/进行一些讨论
cat /etc/*release
/etc/
大多数发行版都会在(如/etc/redhat-release
、等)中放置一个发布文件,/etc/gentoo-release
其中通常包含您的发行版的版本号。
令人讨厌的是,这是一个比看起来更难的问题。
对于 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 页面上找到有关系统和发行版的一些信息。
您应该问自己是否真的需要知道正在使用哪个发行版(可能是因为您想为这个发行版构建一个特定的包)。在许多其他情况下,这是一个更好的主意,只需测试并查看您需要的功能是否存在。这可能看起来需要做更多的工作,因为您必须逐个测试每个功能,但是这样,您的软件就会变得更加灵活。
您可以使用不同的命令来检查正在使用的发行版。这里我只提到其中的 5 个。
lsb_relase -a
lsb_release
提供特定于分布的信息。而-a
显示有关分布的所有信息。您也可以使用-d
which 仅显示描述。
unname -a
uname
还提供系统信息。而-a
显示所有信息。您可以使用man uname
其他选项。
猫 /etc/*释放
您还可以使用cat
命令从etc文件夹中打印出所有特定的发布信息。该命令实际上是从/etc文件夹中读取lsb-release和os-release文件。
猫 /etc/问题
此命令从/etc文件夹中读取问题文件。
猫 /proc/版本
此命令从/proc文件夹中读取版本文件。/proc文件夹包含有关系统进程的信息。
在我的.cshrc
我有
setenv DISTRO `sed -e 's/.*(//' -e 's/)).*//' /proc/version`
export DISTRO=`sed -e 's/.*(//' -e 's/)).*//' /proc/version`
当然,这可能不适用于您最喜欢的发行版。(我在Oracle 的 Unbreakable Linux上遇到了一些问题,它提供了类似于 Redhat 的东西,但对于我的目的来说已经足够了。)
2016 年 8 月更新我有一段时间没有以这种方式使用 Linux(2008 年是很久以前的事了)。对于我现在拥有的系统,这似乎不再适用。
我发现 /etc/issue 通常与正在使用的发行版有关。
但我不知道它在所有发行版上的可用性。
你可以使用'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 -r
应该打印当前运行的内核版本(至少,它适用于 Linux,不知道它是否与 *BSD 或其他相同)。这与发行版不同,但内核版本通常包含定制的发行版名称,例如“2.6.27-gentoo-r1”或其他内容。
Init 经常在启动时打印一些东西,但是当它运行时这并不是很好。
否则,据我所知,没有任何普遍性。
... 是一个非常专业的BASH 脚本,它应该包含您可能想要的所有信息。
(免责声明:我不隶属于它)
neofetch --stdout | grep '^OS: ' | sed -e 's/OS:[[:space:]]\+//'
可能会给:
Debian GNU/Linux 11(靶心)x86_64
但还有更多信息。
选项:
系统包neofetch
如果不可用,请参阅官方安装说明
或者一次性使用——如果你有信心和互联网连接——你可以使用:
wget 'https://raw.githubusercontent.com/dylanaraps/neofetch/master/neofetch' \
&& bash neofetch --stdout \
&& rm neofetch
尝试uname -a