#!/bin/bash
get_distribution_type()
{
local dtype
# Assume unknown
dtype="unknown"
# First test against Fedora / RHEL / CentOS / generic Redhat derivative
if [ -r /etc/rc.d/init.d/functions ]; then
source /etc/rc.d/init.d/functions
[ zz`type -t passed 2>/dev/null` == "zzfunction" ] && dtype="redhat"
# Then test against SUSE (must be after Redhat,
# I've seen rc.status on Ubuntu I think? TODO: Recheck that)
elif [ -r /etc/rc.status ]; then
source /etc/rc.status
[ zz`type -t rc_reset 2>/dev/null` == "zzfunction" ] && dtype="suse"
# Then test against Debian, Ubuntu and friends
elif [ -r /lib/lsb/init-functions ]; then
source /lib/lsb/init-functions
[ zz`type -t log_begin_msg 2>/dev/null` == "zzfunction" ] && dtype="debian"
# Then test against Gentoo
elif [ -r /etc/init.d/functions.sh ]; then
source /etc/init.d/functions.sh
[ zz`type -t ebegin 2>/dev/null` == "zzfunction" ] && dtype="gentoo"
# For Slackware we currently just test if /etc/slackware-version exists
# and isn't empty (TODO: Find a better way :)
elif [ -s /etc/slackware-version ]; then
dtype="slackware"
fi
echo $dtype
}
没有交叉分发的方式。然而:
等等。一般来说,检查
/etc/*-release
和/etc/*-version
。编辑:发现我的一个旧的(1 年以上)bash 脚本,多年来我必须拼凑在一起(它有一个令人印象深刻的 CVS 日志可以追溯到 6 年。)它可能不再按原样正常工作,我可以不必费心寻找已安装的发行版进行测试,但它应该为您提供一个良好的起点。它在 CentOS、Fedora 和 Gentoo 上运行良好。gyaresu在 Debian Lenny 上成功测试了它。
请注意,这可能只会在 Bash 中正常工作。您可以为其他外壳重写它。
话虽如此,您可能想要测试功能,而不是发行版。我不再使用它只是因为它成为维护负担。依赖交叉分发工具和解决方案更容易。
从概念上讲,它的作用是按顺序:
编辑以防您尝试将其作为直接脚本运行:该脚本应该从其他脚本中获取或包含。如果您按原样运行它,它不会自行输出任何内容。要对其进行测试,请获取它,然后调用该函数,例如:
在 bash 提示符下。
编辑:请注意,此脚本不需要 root 权限。我敦促您不要以 root 身份运行它。不应该伤害任何东西,但没有必要。
在 CVS 日志中找到相关邮件列表帖子的链接。在解开初始化脚本意大利面条时应该很有用。
不要试图根据发行版做出关于你能做什么和不能做什么的假设,因为那样会很疯狂(另见“用户代理检测”)。相反,检测是否支持您想要执行的操作,以及您想要使用的任何命令或文件位置是如何完成的。
例如,如果你想安装一个软件包,你可以通过检查 dpkg 或 rpm 的存在来检测你是在一个类 Debian 系统还是一个类 RedHat 系统上(首先检查 dpkg,因为 Debian 机器可以有它们上的 rpm 命令...)。以此为基础来决定要做什么,而不仅仅是根据它是 Debian 还是 RedHat 系统。这样,您将自动支持您没有明确编程的任何衍生发行版。哦,如果您的包需要特定的依赖项,那么也要测试这些并让用户知道他们缺少什么。
另一个例子是摆弄网络接口。根据是否有 /etc/network/interfaces 文件或 /etc/sysconfig/network-scripts 目录确定要做什么,然后从那里开始。
是的,这需要更多的工作,但除非你想重犯 Web 开发人员在过去十年或更长时间里犯下的所有错误,否则你会从一开始就以聪明的方式去做。
你可以通过运行找到内核版本
uname -a
,找到发行版是依赖于发行版的。在 Ubuntu 和其他一些操作系统上,您可以运行
lsb_release -a
或阅读 /etc/lsb_releaseDebian 将版本存储在 /etc/debian_version
大多数发行版都有一种确定特定发行版的独特方法。
例如:
有一个标准被称为Linux Standard Base或LSB。它定义应该有一个名为 /etc/lsb-release 的文件或一个名为 lsb_release 的程序,它将回显有关您的 linux 发行版的信息。
代码: http ://hg.python.org/cpython/file/2.7/Lib/platform.py
除了其他答案:如果您只想解析一个文件,大多数发行版通过 /etc/issue 个性化 tty 登录,例如:
是的,我知道这是次优的。:)
facter对于这种发现来说是一个方便的工具,尽管它可能使用了上面详述的一些方法,并且需要 Ruby。
您需要做的就是
uname -a
在您最喜欢的 shell 中键入。这将打印出内核名称和版本。您还可以通过以下方式获取版本
o/p:
我发现这
cat /etc/*release*
几乎总是有效的。