确定操作系统版本的常用方法似乎正在查看
/etc/*-release file
*这里是特定版本的操作系统所属的系列。 但是在OEL系统上,下面的文件是存在的,它们都似乎是返回有效的发行版本,在这种情况下是否有一个明确的方法来确定操作系统发行版本的细节:
cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.8 (Tikanga) cat /etc/enterprise-release Enterprise Linux Enterprise Linux Server release 5.8 (Carthage) cat /etc/oracle-release Oracle Linux Server release 5.8 cat /etc/*release* Enterprise Linux Enterprise Linux Server release 5.8 (Carthage) Oracle Linux Server release 5.8 Red Hat Enterprise Linux Server release 5.8 (Tikanga)
使用下面提到的替代方法仅在上述文件不返回有效值的情况下使用:
lsb_release -a returns the same output as returned by enterprise-release
更新1:执行的上下文
/ etc / * – release文件作为编程解决scheme的一部分进行检查,*的值由一个可以具有以下值的虚拟文件提供:
Asianux的,企业,Mandrake的,红帽,UnitedLinux的,SUSE的SuSE
根据上面的场景中出现的顺序,因为企业出现在第一个/ etc /企业版本文件被查询find操作系统版本如果sorting否则在企业/ etc / redhat-release之前出现的红帽会被使用。
这似乎不是一个可行的解决scheme,因此寻求其他更确定的方法来确定操作系统的版本。
lsb_release -a
请参阅Linux标准库文档
根据你的问题,你提到这是一个替代的情况下,上述不起作用。 你应该首先使用lsb_release因为它是标准的。
还应该返回比enterprise-release命令更多的信息,特别是LSB版本行(例如, lsb_release -v )
( Mandrake,AsianUX和UnitedLinux仍然足以certificate新软件的兼容性? )
绝对检查build议: 我正在使用什么版本的RHEL?
但是,除此之外,看看这个软件部署的系统是否有一定的控制权。 如果这是将在您不pipe理的系统上运行并运行的软件,那么您可能必须处理操作系统检测。 如果是你的公司/环境, facter是最干净的方法。
在处理RHEL及其衍生产品时,知道分发生命周期努力保持次要版本之间的兼容性非常重要。 所以软件应该可以在* EL5.4,5.8和5.10上运行。 不过,我认为这不是你的问题,因为你可能只关心操作系统的“家庭”。
看看以下三个系统的输出。
# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily operatingsystem => RedHat operatingsystemmajrelease => 5 operatingsystemrelease => 5.8 osfamily => RedHat
和
# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily operatingsystem => CentOS operatingsystemmajrelease => 5 operatingsystemrelease => 5.9 osfamily => RedHat
和
# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily operatingsystem => CentOS operatingsystemmajrelease => 6 operatingsystemrelease => 6.5 osfamily => RedHat
他们是CentOS和RHEL,版本5.8,5.9和6.5。 但是我想你可能只关心他们是RedHat衍生物。 我会使用osfamily ,也许是operatingsystemmajrelease事实。
看看facter使用的操作系统检测程序… https://github.com/puppetlabs/facter/blob/master/lib/facter/operatingsystem/linux.rb
SNIP
if FileTest.exists?("/etc/enterprise-release") if FileTest.exists?("/etc/ovs-release") operatingsystem = "OVS" else operatingsystem = "OEL" end elsif FileTest.exists?("/etc/redhat-release") operatingsystem = get_redhat_operatingsystem_name
SNIP
def get_redhat_operatingsystem_name txt = File.read("/etc/redhat-release") matches = { "CentOS" => "centos", "Scientific" => "Scientific", "CloudLinux" => "^cloudlinux", "PSBM" => "^Parallels Server Bare Metal", "Ascendos" => "Ascendos", "XenServer" => "^XenServer", "XCP" => "XCP" }
简而言之,Oracle Enterprise Linux检测完全取决于/etc/enterprise-release 。
[root@xt ~]# facter osfamily RedHat [root@xt ~]# facter operatingsystem CentOS [root@xt ~]# touch /etc/enterprise-release [root@xt ~]# facter operatingsystem OEL
所以你这样做是正确的,或者至less是以相同的方式。
没有明确的/标准的方法可以在所有的主要分布中使用。 您将不得不使用额外的代码来充分了解您的知识(根据您如何理解每个发行版使此信息可用)。
如果是用于安装脚本,请给予用户手动指定的选项。 如果你想要超好的话,试着弄清楚自己,然后请求确认。
如果这是一个将要检查的程序(因此需要查看不同的位置来查找它们),请提供configuration文件或命令行选项的选项,以指定正在使用哪个发行版。
提供的其他解决scheme非常好,但是您将依赖于可能无处不在的代码/包(尤其是facter,这是迄今为止收集有关环境的最完整工具)。
uname -a
(打印所有信息)
uname -r
(打印内核名称)
cat /etc/issue cat /etc/redhat-release lsb_release –a tail /etc/redhat-releas