web-dev-qa-db-ja.com

使用しているRHELのバージョンを確認するにはどうすればよいですか?

私は、マシンをRed Hat Enterprise Linux 5からRHEL 6に徐々に移行している環境で働いています。

RHEL6マシンでRHEL5マシンで現在実行されているものと微妙に異なる何かを実行するには、スクリプトの一部が必要です。

実用的なソリューションは、実行時にチェックし、RHEL5でいくつかのコマンドを実行し、RHEL6で他のコマンドを実行し、両方でいくつかのコマンドを実行することです。

この実用的な例は、環境モジュールを使用していて、_.bashrcmodule load git行が含まれていることですが、RHEL6マシンでは次のコマンドエラーが発生します。

RHEL6 system, git should be installed - not loading module

Modulefileを見ると、次のコードが見つかります。

set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
  puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
  ...
}

これは私がやりたいことをしているようですが、もっと短いものを望んでいました。

では、bashスクリプトでRHEL6からRHEL5を識別する最も簡単な方法は何ですか?

理想的には、さまざまなメジャーバージョン間で堅牢である必要がありますが、マイナーリリース番号の変動には耐性があります。

14
Mark Booth

lsb_releaseコマンドを使用することもできます。 RHELであることが既にわかっている場合は、メジャーバージョン番号を取得します。

majversion=$(lsb_release -rs | cut -f1 -d.)
10
if grep -q -i "release 6" /etc/redhat-release
then
  echo "running RHEL 6.x"
fi

これは私が考えることができる最も簡単な方法でしょう。

15
MelBurslan

使用する rpm -q |grep redhat-release-server

/etc/redhat-releaseファイルは、実際のOSアップグレードを実行せずにサードパーティソフトウェアをインストールしようとしている管理者によって編集された可能性があります。

4
BillMal

/etc/issueファイルの代わりに/etc/redhat-releaseファイルを使用して、複数のLinuxディストリビューションでこれを拡張できます。

2
Brian W
major_version=$(rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$)

rpm -q --queryformat '%{RELEASE}' rpm25.el7のようなものを出力します。次に、最後の桁を取るだけです。 RHEL 5、6、7およびFedora 24でテスト済み。

他の人が指摘したように、lsb-versionがインストールされていない可能性があります。さらに、redhat-release-serverパッケージがインストールされていないRHEL5システムが少なくとも1つあります。

2
user7610

これは、この結果を得る別のより正確な方法です。 RHELのカーネルパッケージには文字列「elN」が含まれています。NはOSのメジャーバージョンを表します。したがって、次のコマンドを実行してRHELのバージョンを特定できます。

# uname -r | sed 's/^.*\(el[0-9]\+\).*$/\1/'

これは、指定されたホスト上の一致する文字列に応じて、文字列「el5」、「el6」、または「el7」を返します。

1
Brād Axe

ここで説明する方法はすべてテキストファイルに依存しているため、誤解を招く可能性があります。正しいアクセス権を持つ誰かが/ etc/redhat-releaseや/ etc/issueなどの内容を変更して、この情報を単に難読化することさえあります。より信頼できる方法は、RHELの各バージョンでRed Hatが通常提供するカーネルリリースを知ることです。

  • RHEL4はカーネル2.6.9-Xを使用します
  • RHEL5はカーネル2.6.18-Xを使用します
  • RHEL6はカーネル2.6.32-Xを使用します
  • RHEL7はカーネル3.10.0-Xを使用します

現在まで常に、uname -rを実行すると、実行中のカーネルリリースを確認できます。あなたはの線に沿って何かを実行することにより、より精巧になるかもしれません

uname -r | awk -F- '{print $1}'

これにより、上記の表のように、カーネルに関する特定の情報が得られます。他のディストリビューションがカーネルリリースを一貫して使用している場合は、他のディストリビューションへの並列処理を実行できる可能性があります。

0
Brād Axe

RHEL 6以降、最も簡潔な方法は次のようになります。

cat /etc/system-release-cpe | cut -d ':' -f5
0
trinth

モジュールファイルをコンテキストベースで管理することをさらに意図している場合は、EasyBuildといくつかの関連ロジックをチェックして、Python形式で確認することをお勧めします。

0
fgeorgatos

RHEL 6は/ etc/system-release-cpeファイルを追加しました。これには:で区切られた文字列。

# cat /etc/system-release-cpe
cpe:/o:redhat:enterprise_linux:6computenode:ga:computenode

RHELバージョンとRHELバリアントを取得するには、フィールド$ 5と$ 7をプルするだけで十分です。

# will be 7 or 6, does not work for 5 as file is missing there
RHEL_VERSION_MAJOR=$(cat /etc/system-release-cpe | awk -F: '{ print $5 }' | grep -o ^[0-9]*)
RHEL_VARIANT=$(cat /etc/system-release-cpe | awk -F: '{ print $7 }')
0
user7610

私は jordanm sの答えを使用することになりましたが、自分のひねりを加えました。

すべてのrhel6コマンドとすべてのrhel5コマンドを一緒にしたくはなかったが、独自のセクション内にインターリーブし、切り替えを待つたびにこのコードを複製する必要がなかったので、代わりにこれを行いました:

if   grep -q -i "release 6" /etc/redhat-release ; then
  rhel6only=1
Elif grep -q -i "release 5" /etc/redhat-release ; then
  rhel5only=1
else
  echo "Running neither RHEL6.x nor RHEL 5.x !"
fi

そうすれば、次のようなことができます。

# JDK
[ $rhel5only ] && module load Java/6
[ $rhel6only ] && module load Java/7

# Eclipse
module load Eclipse

# Python
[ $rhel5only ] && module load python/2
[ $rhel6only ] && module load python/3

等.

0
Mark Booth