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

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

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

/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 文件作为程序解决方案的一部分进行检查,* 的值由虚拟文件提供,该文件可以具有以下值:

Asianux、企业、Mandrake、Redhat、UnitedLinux、Suse、SuSE

取决于上述场景中的出现顺序,因为 enterprise 首先出现,所以会查询 /etc/enterprise-release 文件来查找操作系统版本,如果顺序不同,即 redhat 出现在 enterprise 之前,则会使用 /etc/redhat-release。

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

答案1

lsb_release -a

Linux 标准基础文档

根据您的问题,您提到这是在上述方法无效时的替代方案。您应该lsb_release首先使用,因为它是标准。

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

答案2

Mandrake、AsianUX 和 UnitedLinux 是否还能保证新软件的兼容性?

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

但除此之外,看看因素如果您对该软件将部署的系统有一定的控制权。如果该软件将在您不管理的系统上发布和运行,那么您可能需要处理操作系统检测。如果您的公司/环境,facter是最清洁的方法。

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

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

# 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

剪掉

      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

剪掉

  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

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

答案3

没有适用于所有主要发行版的明确/标准方法。您必须使用额外的代码来尽您所知找出答案(根据您对每个发行版的了解,提供此信息)。

如果这是安装脚本,请让用户选择手动指定。如果你想表现得非常好,请尝试自己弄清楚并直接要求确认。

如果这是一个要检查事物的程序(因此需要查看不同的位置来找到它们),请提供配置文件或命令行选项来指定正在使用哪个发行版。

提供的其他解决方案也很棒,但您将依赖于可能并非随处可用的代码/包(尤其是 facter,它是迄今为止用于收集有关环境的信息的最完整的工具)。

答案4

uname -a 

(打印所有信息)

uname -r 

(打印内核名称)

cat /etc/issue
cat /etc/redhat-release
lsb_release –a
tail /etc/redhat-releas

相关内容