确定 OEL linux 机器的操作系统版本?

bha*_*avs 4 linux redhat operating-system

确定操作系统版本的常用方法似乎正在查看

/etc/*-release file 
Run Code Online (Sandbox Code Playgroud)

*这里是特定版本的操作系统所属的家族。但是在 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)
Run Code Online (Sandbox Code Playgroud)

仅在上述文件不返回有效值的情况下才使用下面提到的替代方法:

lsb_release -a returns the same output as returned by enterprise-release 
Run Code Online (Sandbox Code Playgroud)

更新 1:执行上下文

/etc/*-release 文件作为编程解决方案的一部分进行检查,* 的值由一个虚拟文件提供,该文件可以具有以下值:

asianux,enterprise,mandrake,redhat,UnitedLinux,Suse,SuSE

取决于上述场景中的出现顺序,因为企业首先出现 /etc/enterprise-release 文件被查询以查找操作系统版本 如果排序是在企业 /etc/redhat-release 之前出现的其他顺序,则将使用企业 /etc/redhat-release。

这似乎不是一个可行的解决方案,因此寻求其他更明确的方法来确定操作系统的版本。

Ian*_*osh 7

lsb_release -a
Run Code Online (Sandbox Code Playgroud)

请参阅Linux 标准基础文档

根据您的问题,您提到这是一种替代方法,以防上述方法不起作用。您应该lsb_release先使用,因为它是标准。

此外,它应该返回比enterprise-release命令更多的信息,特别是 LSB 版本行(例如,lsb_release -v

  • 顺便提一下, lsb_release 默认没有安装在 CentOS 上,它来自 redhat-lsb-core 包。如果一开始不起作用,OP 将不得不尝试其他选项。 (2认同)

eww*_*ite 5

Mandrake、AsianUX 和 UnitedLinux 是否仍然足以证明新软件的兼容性?

请务必查看以下建议:我使用的是哪个版本的 RHEL?

但除此之外,看facter如果你有一些控制系统这个软件将上部署。如果这是将在您不管理的系统上交付和运行的软件,那么您可能必须处理操作系统检测。如果你的公司/环境,facter是最干净的方法。

在处理 RHEL 及其衍生产品时,重要的是要知道分发生命周期努力维护次要版本之间的兼容性。例如,软件应该能够在 *EL5.4、5.8 和 5.10 上运行。不过,我认为这不是您的问题,因为您可能只关心操作系统“家庭”。

查看facter以下三个系统的输出。

# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => RedHat
operatingsystemmajrelease => 5
operatingsystemrelease => 5.8
osfamily => RedHat
Run Code Online (Sandbox Code Playgroud)

# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => CentOS
operatingsystemmajrelease => 5
operatingsystemrelease => 5.9
osfamily => RedHat
Run Code Online (Sandbox Code Playgroud)

# facter operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily
operatingsystem => CentOS
operatingsystemmajrelease => 6
operatingsystemrelease => 6.5
osfamily => RedHat
Run Code Online (Sandbox Code Playgroud)

它们是 CentOS 和 RHEL,版本 5.8、5.9 和 6.5。但我认为您可能只关心它们是 RedHat 的衍生产品。我会使用的osfamily,也许是operatingsystemmajrelease事实。

看看facter使用...的操作系统检测例程... https://github.com/puppetlabs/facter/blob/master/lib/facter/operatingsystem/linux.rb

剪断

      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
Run Code Online (Sandbox Code Playgroud)

剪断

  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"
    }
Run Code Online (Sandbox Code Playgroud)

简而言之,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
Run Code Online (Sandbox Code Playgroud)

所以你这样做是正确的,或者至少是同样的方式facter