如何知道我正在使用哪个Linux发行版?

25

转移到https://superuser.com/questions/80251/how-to-know-which-linux-distribution-im-using

如何知道我正在使用哪个Linux发行版?

uname -a 命令输出为: Linux xxxxxx.net 2.6.9-42.0.3.EL.wh1smp #1 SMP Fri Aug 14 15:48:17 MDT 2009 i686 i686 i386 GNU/Linux 那么如何知道这是Ubuntu/Debian/Fedora还是Redhat呢?

我使用 /etc/init.d/serviced restart 命令来重启服务,似乎并不是Redhat系列的。

更新:

[~]$ cat /etc/issue
cat: /etc/issue: No such file or directory
[~]$ cat /etc/issue.net
cat: /etc/issue.net: No such file or directory
[~]$ lsb_release -a
-sh: lsb_release: command not found
[~]$ cat /etc/*-release
cat: /etc/*-release: No such file or directory
[~]$ cat /etc/*-version
cat: /etc/*-version: No such file or directory
[~]$ cat /etc/*release
cat: /etc/*release: No such file or directory
[~]$ cat /etc/*_release
cat: /etc/*_release: No such file or directory
[~]$ cat /etc/*version
cat: /etc/*version: No such file or directory
[~]$

你是通过终端连接的吗? - pcp
如果您正在寻找一种可靠的方法,使您的程序在任何给定的发行版上都能够按照预期运行,我建议在迁移之前更新您的问题。 - Tim Post
我不想编写任何程序,我只是想获取发行版信息以安装软件包。 - Mithun Sreedharan
在/etc/redhat_release中使用下划线而不是连字符。尝试使用/etc/redhat*。 - Peter Cordes
不使用下划线没有效果吗?试一下 rpm -qa | less,看看已安装的软件包中是否有任何线索。 - Peter Cordes
显示剩余5条评论
6个回答

47

试试这个:

cat /etc/*-release
你也可以尝试使用 /etc/*-version。

1
[itflux][]$ cat /etc/-release cat: /etc/-release: 没有那个文件或目录 [itflux][]$ cat /etc/-version cat: /etc/-version: 没有那个文件或目录 - Mithun Sreedharan
1
cat /etc/*[_-]release 更好:一些发行版使用下划线而不是连字符。 - Peter Cordes
请问您能否解释一下在这种情况下cat是如何工作的? - user2188550

21

如果你有 lsb_release 命令,

lsb_release -a

你可以使用lsb_release -i命令来查询,或者直接告诉你。

lsb_release包含在Linux标准基础核心规范中。

编辑:看起来你正在使用Red Hat系统。根据你的uname输出推测如此,当然这并不是编程方式!


2
$ lsb_release -a-命令未找到:lsb_release - Mithun Sreedharan
从你的回答来看,似乎你使用的是一个非常老的Linux系统。 - Alok Singhal
lsb_release是为了方便在程序内部轻松确定发行版而创建的。许多系统在野外仍在使用,但完全缺乏这一功能。 - Tim Post
你说得对。如果有人使用那么老的发行版,第一步应该是升级到更近期的版本! :-) - Alok Singhal

11

/etc/issue或/etc/issue.net是很好的线索。新的发行版提供了/etc/lsb-release,使得确定确切字符串更加容易,例如发行版名称/主要和次要版本/网站等。

在没有/etc/lsb-release的情况下,这将变得更加困难,因此创建了lsb-release。

正如Alok所说,看起来你正在使用一个相当古老(或极其稀缺)的系统。我认为这不是一个可以(可靠地)通过几行代码进行自动确定的情况。

如果其他一切都失败了,请检查正在使用的软件包管理器类型(apt / rpm / 其他),检查/etc/init.d是否是符号链接(rpm / RH发行版)或目录(基于debian的发行版)...然后你就有了一个关于根文件系统中预期结构的很好的线索。

不能取悦每个人 :)


Debian及其衍生版(Ubuntu)也有/etc/lsb-release。它们还有lsb_release程序,可以提供特定信息(您无需解析文本文件)。 - MichaelM
@MichaelM:无论如何,您都在读取文件..无论是直接打开/etc/lsb-release还是抓取lsb_release的输出(无论如何,即使是stdout),如果以编程方式执行此操作,则最好自己解析文件(imho)..较少的移动部件可能存在或不存在 :) - Tim Post
[itflux][]$ cat /etc/issue cat: /etc/issue: 没有那个文件或目录 [itflux][]$ cat /etc/issue.net cat: /etc/issue.net: 没有那个文件或目录 [itflux][~]$ lsb_release -a -sh: lsb_release: 找不到命令 - Mithun Sreedharan
我使用 /etc/init.d/serviced restart 命令来重启服务,但似乎它不是 Redhat 家族的系统。 但是,无论是 apt-get 还是 rpm 都提示找不到命令。 - Mithun Sreedharan

7

看起来这里有一些信息:

> cat /etc/issue
Welcome to SUSE LINUX Enterprise Server 9 (i586) - Kernel \r (\l).

> uname -a
Linux boxname 2.6.5-7.244-smp #1 SMP Mon Dec 12 18:32:25 UTC 2005 i686 athlon i386 GNU/Linux

> cat /etc/*-release
SUSE LINUX Enterprise Server 9 (i586)
VERSION = 9
PATCHLEVEL = 3

哇喔,有人不喜欢这个答案,让我们听听你的意见...我经常尝试弄清楚在一个盒子上运行的是什么,以下是我查看的一些内容,它会告诉你内核版本,有时甚至是发行版名称... - stefanB
[itflux][]$ cat /etc/issue cat: /etc/issue: 没有那个文件或目录 [itflux][]$ cat /etc/issue.net cat: /etc/issue.net: 没有那个文件或目录 [itflux][]$ lsb_release -a -sh: lsb_release: 找不到命令 [itflux][]$ cat /etc/-release cat: /etc/-release: 没有那个文件或目录 [itflux][]$ cat /etc/-version cat: /etc/-version: 没有那个文件或目录 [itflux][]$ - Mithun Sreedharan
好的,所以你有一个不太标准的Linux系统,这并不是什么新鲜事,但我假设至少uname -a会给你一些响应... - stefanB
“一些回应”是吗?但是有用的回应吗?通常不是。 - tripleee

2
以下是最常见发行版的发布文件名列表: 发布文件 以下是可能对您有帮助的函数: Shell脚本

1

在这种情况下,EL代表企业版Linux,因此我认为是RedHat或其克隆版(如CentOS)。我不知道以编程方式找出您所使用的发行版的好方法;每个发行版都有一些不同的线索。

cat  /etc/redhat_release
cat /etc/debian_version

这是一个不错的开始。(请注意,当Ubuntu从Debian拉取更改时,它不会修改/etc/debian_version,因此我的Ubuntu Karmic系统在debian_version中有squeeze/sid。)

编辑:忘记了LSB。Tim Post和Alok提出了很好的建议。LSB的整个目的就是提供独立于发行版的方法来完成任务。


[itflux][]$ cat /etc/redhat_release cat: /etc/redhat_release: 没有那个文件或目录 [itflux][]$ cat /etc/debian_version cat: /etc/debian_version: 没有那个文件或目录 - Mithun Sreedharan
EL 也可以是 SuSE 的企业版 Linux,又称为 SLES。它使用像 RedHat 一样的 RPM 包管理器。我不记得如何检查它了。 - Peter Cordes
哦,是的,Suse在rpm之上有一些命令。 如果您有yast2或yum,则是SuSE。 在/etc/中查找susenovell - Peter Cordes
在 /etc 目录下没有 suse 或 novell 文件夹。 [itflux][~]$ yum -sh: yum: 命令未找到 - Mithun Sreedharan
应该是 /etc/redhat-release/etc/debian-version(连字符,而不是下划线)。 - Cocowalla
显示剩余2条评论

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