OSのバージョンを確認する通常の方法は表示されているようです
/etc/*-release file
*ここに、OSの特定のバージョンが属するファミリがあります。しかし、OELシステムでは、次のファイルが存在し、それらすべてが有効なリリースバージョンを返しているようです。このような状況では、OSリリースバージョンの詳細を決定する明確な方法があります。
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、エンタープライズ、マンドラケ、redhat、UnitedLinux、Suse、SuSE
エンタープライズが最初に表示されるため、上記のシナリオの出現順序に応じて/ etc/enterprise-releaseファイルが照会され、OSのバージョンが検索されます。
これは実行可能な解決策ではないようです。そのため、OSのバージョンを決定するためのより明確な方法を模索しています。
lsb_release -a
Linux Standard Baseドキュメントを参照してください
あなたの質問によれば、あなたは上記がうまくいかない場合の代替としてこれを言及します。これは標準なので、最初にlsb_release
を使用する必要があります。
また、enterprise-release
コマンドよりも多くの情報、具体的にはLSBバージョン行(たとえば、lsb_release -v
)を返す必要があります。
(Mandrake、AsianUX、およびUnitedLinuxは、まだ新しいソフトウェアとの互換性を証明するのに十分ですか?)
提案を必ず確認してください: 使用しているRHELのバージョンは?
ただし、このソフトウェアの展開先のシステムをある程度制御している場合は、 facter を参照してください。これが出荷され、管理していないシステムで実行されるソフトウェアである場合は、OS検出を処理する必要がある可能性があります。それがである場合会社/環境の場合、facter
が最もクリーンな方法です。
RHELとその派生物を扱う場合、ディストリビューションのライフサイクルがマイナーリリース間の互換性を維持するよう努めていることを理解することが重要です。したがって、ソフトウェアは、たとえば* EL5.4、5.8、および5.10で実行できる必要があります。ただし、OSの「ファミリ」のみを気にするので、ここではそれはあなたの問題ではないと思います。
次の3つのシステムからの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
が使用するOS検出ルーチンを見てみましょう... 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
つまり、これは正しい方法、または少なくともfacter
と同じ方法です。
すべての主要なディストリビューションで機能する確定的/標準的な方法はありません。 (各ディストリビューションがどのようにこの情報を利用可能にするかを理解する方法に基づいて)知識を最大限に活用するには、追加のコードを使用する必要があります。
これがインストールスクリプトの場合は、ユーザーが手動で指定するオプションを提供します。あなたがスーパーニースになりたい場合は、それを自分で理解して、確認を求めてください。
これが物事をチェックする(したがって、それらを見つけるために別の場所を調べる必要がある)プログラムの場合は、構成ファイルのオプションまたはコマンドラインオプションを指定して、使用するディストリビューションを指定します。
提供される他のソリューションは素晴らしいですが、どこでも利用できるわけではないコード/パッケージ(特に、環境に関する情報を収集するための最も完全なツールであるfacter)に依存します。
uname -a
(すべての情報を印刷)
uname -r
(カーネル名を出力)
cat /etc/issue
cat /etc/redhat-release
lsb_release –a
tail /etc/redhat-releas