有没有办法找出使用的Linux发行版?

3

我想在我的程序中向用户展示一些特定操作的帮助,例如:

请键入“apt-get install foobar”以安装 foobar 功能。

有没有什么方法可以做到这一点,还是我必须让用户自己选择 Red Hat、Suse、Debian/Ubuntu、Mandriva、Slackware、Gentoo 等十几个选项?

7个回答

6

cat /etc/lsb-release

root@pierr-desktop:~# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.10
DISTRIB_CODENAME=intrepid
DISTRIB_DESCRIPTION="Ubuntu 8.10"

不是这样的。Suse 给了我以下信息: “Linux linux-kiste 2.6.27.7-9-default #1 SMP 2008-12-04 18:10:04 +0100 x86_64 x86_64 x86_64 GNU/Linux” 同样,在这里没有关于发行版的指示,而且我认为 /etc/lsb-release 甚至不在 LSB 规范中。至少我在 3.2 版本中没有看到过它。 - Lothar
2
不要直接读取该文件,而是使用 lsb_release -a(或者明确请求所需的属性,例如 lsb_release -i -r -c -d)。 - ephemient

5

在 Debian 及其衍生版本中,可以使用 lsb_release -a 命令来获取帮助。


这似乎是答案 - 我会等几天再标记它。 - Lothar
2
在Debian上,如果没有安装lsb-release软件包,则不存在该软件包。该软件包未标记为“essential”并且不能保证存在。 - ephemient
又是那个老旧的Linux问题 - 我讨厌它,他们只配拥有1%的桌面市场份额。 - Lothar

3
没有通用的方法可以找出你正在运行的Linux发行版。
lsb_release命令,该命令在Linux标准库规范中指定。但是显然,此命令仅存在于符合LSB的发行版中,许多较小或专业化的发行版不符合LSB。(例如,我在FritzBox路由器上运行的分发版就不符合LSB。)
如果您已经假设使用符合LSB的发行版,那为什么不将您的应用程序打包为LSB软件包呢?这样它就可以在所有符合LSB的发行版上都能正常工作。

2

你可以提供

cat /etc/issue

尝试也是一种进步


2

鉴于Linux可以从一个系统构建并转变为另一个系统,您可能无法准确地确定当前是哪个系统。如果发行版符合LSB标准,则提供lsb工具,这可能有所帮助。

一些发行版提供/etc/dist-release文件。例如,我有一个空的/etc/arch-release文件。

您还可以执行以下操作:

uname -a

这可能表明内核构建的发行版,但这可能是一个猜测。我的Arch Linux内核没有提到Arch,但我相信我的Gentoo安装显示“Gentoo Linux”。

一些工具可以表明发行版,例如apt-get、rpm、emerge,但通常也可以在其他发行版上安装这些工具。


0

对于大多数知名的发行版(Redhat、Fedaora、Gentoo、Suse、Debian、Ubuntu),你可以这样做,这些发行版都有特殊的文件来识别分发和版本,例如/etc/debian_version

但是如果你真的想更加用户友好,那么列出所有的包和东西将会是一项繁琐的任务。


-1

尝试使用cat命令:

cat /proc/version

但是使用uname命令可能更好:

uname -a

我能否真的期望/proc/version中包含发行版的名称?至少对于主要的发行版是这样吗? uname没有给我任何提示,表明我在SUSE上。我得到: Linux linux-kiste 2.6.27.7-9-default #1 SMP 2008-12-04 18:10:04 +0100 x86_64 x86_64 x86_64 GNU/Linux - Lothar
在Ubuntu上运行:Linux版本2.6.31-14-generic(buildd@rothera)(gcc版本4.4.1(Ubuntu 4.4.1-4ubuntu8))#48-Ubuntu SMP Fri Oct 16 14:04:26 UTC 2009。那么uname -a是什么? - cupakob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接