确定操作系统版本的常用方法似乎是查看
/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
根据您的问题,您提到这是在上述方法无效时的替代方案。您应该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