内核普遍检测到的是uname
:
$ uname -or
2.6.18-128.el5 GNU/Linux
的内核,真的没有一个跨发行版的方法来确定你所处的发行版和版本。曾经有人尝试过让这一点保持一致,但很遗憾的是,最终还是有差异。LSB工具提供了这些信息,但讽刺的是,并不是每个地方都会默认安装。在Ubuntu 9.04系统上安装了lsb-release
包的例子:
$ lsb_release -irc
Distributor ID: Ubuntu
Release: 9.04
Codename: jaunty
否则,最接近的方法是检查/etc/something-release
文件。这些文件存在于大多数常见的平台上,以及它们的衍生产品(如:。Red Hat和CentOS)。
以下是一些例子。
Ubuntu有/etc/lsb-release
:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"
但Debian有/etc/debian_version
:
$ cat /etc/debian_version
5.0.2
但Fedora、Red Hat和CentOS有:
Fedora: $ cat /etc/fedora-release
Fedora release 10 (Cambridge)
Red Hat/older CentOS: $ cat /etc/redhat-release
CentOS release 5.3 (Final)
newer CentOS: $ cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)
Gentoo有:
$ cat /etc/gentoo-release
Gentoo Base System release 1.12.11.1
Gentoo有:
$ cat /etc/*{release,version}
我目前没有SUSE系统的可用,但我相信是/etc/SuSE-release
。
Slackware有/etc/slackware-release
和/或/etc/slackware-version
。
Mandriva有/etc/mandriva-release
。
对于大多数流行的发行版来说,
&001
最常见。
另外,你可以使用两个第三方程序来自动获取这些信息,它们是 Ohai 和 Facter 。
注意,很多发行版在/etc/issue
或/etc/motd
中都有这样的信息,但一些安全策略和最佳实践表明,这些文件应该包含访问通知横幅。
你也可以试试:
$ cat /etc/issue
通常会告诉你(不一定)你使用的是什么发行版。
lsb_release -a && uname -r
这个问题也可以用*Python与platform
模块*解决:
使用platform()
函数:
python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-amd64-x86_64-with-debian-9.6
上面的命令_返回一个识别底层平台的字符串,并尽可能多地包含有用的信息。 _
或使用uname()
函数:
python -c 'import platform; print platform.uname()'
# ('Linux', 'debian', '4.9.0-8-amd64', '#1 SMP Debian 4.9.130-2 (2018-10-27)', 'x86_64', '')
上述命令_返回一个包含六个属性的namedtuple()
:system
, node
, release
, version
, machine
, processor
, 和dist()
。 _
或者使用&007函数:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
最后一条命令试图确定Linux操作系统的发行版名称,但它是自Python 3.5以来的解密,并且_将在Python 3.8中被删除。