是否有一种简单可靠的方法来发现它,一种在所有服务器上都统一且一致的方法?
cat /etc/*release
大多数发行版都会在 /etc/
目录下放置一个发行版文件(例如 /etc/redhat-release
, /etc/gentoo-release
等),其中通常包含你的发行版版本号。
cat
对我有用lsb_release -i
可能适用于您。
使用 lsb_release -a
可以获得更详细的信息。
在此处讨论:http://etbe.coker.com.au/2007/08/30/identifying-the-distribution-of-a-linux-system/
很不幸,这是一个比看起来更难的问题。
对于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
你应该问自己是否真的需要知道正在使用哪个发行版(也许是因为你想为这个发行版构建一个特定的软件包)。在许多其他情况下,更好的做法是只需测试并查看您需要的功能是否存在。这可能看起来像更多的工作,因为您必须逐个测试每个功能,但这样,您的软件变得更加灵活。
cat /proc/version
将返回有关版本的信息。 - Henrikcd
到目录中以读取其中的文件,并且通常不需要这样做(尽管在交互式 shell 中,它可以节省您输入长路径的时间;但是脚本通常很少需要cd
)。 - tripleeeUbuntu 16.04.1 LTS \n \l
"版本。是的,\n和\l是字面值(不是ASCII 13和10)。 - Peter Mortensen.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是很久以前的事了)。看起来现在对我现有的系统不再适用。
...是一个非常专业的BASH脚本,应该包含您可能需要的所有信息。
(免责声明:我与此无关)
neofetch --stdout | grep '^OS: ' | sed -e 's/OS:[[:space:]]\+//'
可能会返回:
Debian GNU/Linux 11 (bullseye) x86_64
但还有更多信息。
选项:
系统包 neofetch
如果没有,可以参考官方安装说明进行安装。
或者使用一个 hacky 的一次性方法(如果你有信心和互联网连接),可以使用以下命令:
wget 'https://raw.githubusercontent.com/dylanaraps/neofetch/master/neofetch' \
&& bash neofetch --stdout \
&& rm neofetch
uname -r
应该打印当前正在运行的内核版本(至少对于Linux是这样,不知道*BSD或其他操作系统是否相同)。这与发行版不同,但内核版本通常包括发行版名称,如果它被定制了,比如“2.6.27-gentoo-r1”或类似的内容。
Init在启动时通常会打印一些内容,但在运行时没有什么用处。
否则据我所知并没有普适的方法。