【发布时间】:2010-09-20 19:51:27
【问题描述】:
有时我需要访问一些运行 Linux 的服务器(或者可能是另一个类似 Unix 的 SO),但我不知道如何验证服务器上正在使用哪个 distribution(有时甚至“负责“服务器的人不知道)。
是否有一种简单可靠的方法来发现这一点,并且在所有这些方法中都是一致且一致的?
【问题讨论】:
-
@Peter:真的有必要把‘distro’改成‘distribution’吗?
有时我需要访问一些运行 Linux 的服务器(或者可能是另一个类似 Unix 的 SO),但我不知道如何验证服务器上正在使用哪个 distribution(有时甚至“负责“服务器的人不知道)。
是否有一种简单可靠的方法来发现这一点,并且在所有这些方法中都是一致且一致的?
【问题讨论】:
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 等)中放置一个发布文件,其中通常包含您的发行版的版本号。
【讨论】:
- bash: lsb_release: command not found 但cat 为我工作
烦人的是,这个问题比看起来更难。
对于 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 系统。
您应该问自己是否真的需要知道正在使用哪个发行版(可能是因为您想为这个发行版构建一个特定的包)。在许多其他情况下,这是一个更好的主意,只需测试并查看您需要的功能是否存在。这可能看起来需要做更多的工作,因为您必须逐个测试每个功能,但这样一来,您的软件就会变得更加灵活。
【讨论】:
您可以使用不同的命令来检查正在使用的发行版。这里我只提到其中的 5 个。
lsb_relase -a
lsb_release 提供特定于发行版的信息。而-a 显示有关分发的所有信息。您也可以使用仅显示描述的-d。
uname -a
uname 还提供系统信息。而-a 显示所有信息。您可以将man uname 用于其他选项。
cat /etc/*release
您也可以使用cat 命令从etc 文件夹中打印出所有具体的发布信息。该命令实际上是从 /etc 文件夹中读取 lsb-release 和 os-release 文件。
cat /etc/issue
此命令从 /etc 文件夹中读取 issue 文件。
cat /proc/version
此命令从 /proc 文件夹中读取 version 文件。 /proc 文件夹包含有关系统进程的信息。
【讨论】:
【讨论】:
cat /proc/version 将返回有关版本的信息。
cd /proc 本身没有任何用处。您不必cd 到一个目录来读取那里的文件,通常不需要(尽管在交互式shell 中,它使您免于输入长路径;但脚本通常很少需要cd)。
proc 中的许多文件使用 C 字符串,因此它们在技术上不是纯文本。尝试tr '\000' '\012' <file 用换行符替换空值。
我发现 /etc/issue 通常与正在使用的发行版有关。
但我不知道它在所有发行版上的可用性。
【讨论】:
Ubuntu 16.04.1 LTS \n \l”。是的,\n 和 \l 是文字(不是 ASCII 13 和 10)。
在我的.cshrc 我有
setenv DISTRO `sed -e 's/.*(//' -e 's/)).*//' /proc/version`
export DISTRO=`sed -e 's/.*(//' -e 's/)).*//' /proc/version`
当然,这可能不适用于您最喜欢的发行版。 (我对 Oracle's Unbreakable Linux 提供类似于 Redhat 的东西有意见,但对于我的目的来说已经足够了。)
2016 年 8 月更新 我已经有一段时间没有以这种方式使用 Linux(2008 年是很久以前的事了)。对于我现在拥有的系统,这似乎不再适用了。
【讨论】:
你可以使用'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
如果不可用,请参阅official installation instructions
或用于一次性使用 - 如果您有信心并有互联网连接 - 您可以使用:
wget 'https://raw.githubusercontent.com/dylanaraps/neofetch/master/neofetch' \
&& bash neofetch --stdout \
&& rm neofetch
【讨论】:
试试uname -a
【讨论】: