ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja ru ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en ja ja en ja en ja ja en ja ja ja ja en ja en ja ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja en ja ja en ja ja vi ja sv eu ja en en hu ja ja en en pl ja ja jbo hbs_lat en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja
Red Hat Enterprise Linux系OSの種類やバージョンを見分ける方法 - 2022-08-16 - ククログ
/etc/os-releaseというファイルに記載されているID_LIKEの値に、rhelが含まれていることを確認する
私のケースでは、前者の方法で十分でした。
前章でも登場した/etc/os-releaseファイルには、プラットフォームの情報が詳細に記載されています。
この中のVERSION_IDの値がOSのバージョンを表しており、ここを見ることでバージョンを見分けることができます。
テクニック: /etc/os-releaseファイルから値を取り出す
ビルドの設定ファイル等で、/etc/os-releaseファイルからバージョンを読ませたい場合、カッコイイ方法があります。
このファイルは、CentOS 7では次のようになっています。
$ cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"
よく見ると、これはシェルスクリプトとしてそのまま実行可能な形式で書かれていますよね! よって、このファイルを実行すると各左辺の変数に各値が代入されて、それらを利用できるのです!
例えば次のようにすることで、VERSION_IDの値を確認できます。
$ . /etc/os-release && echo $VERSION_ID
しかしこの方法だと、現在のシェルにどのような影響を与えるか分かりません。 そのため、実際には次のようにサブシェルの中で実行し、必要な値だけを取り出します。
$ echo $(. /etc/os-release && echo $VERSION_ID)
()で囲うことにより、サブシェル、つまり現在のシェルの中でさらにシェルを立ち上げてコマンドを実行しています。 これにより現在のシェルへの意図しない影響を防ぐことができます。 さらに$を付けることで、サブシェル内の標準出力の内容を取得しています。
以上を踏まえると、次のように/etc/os-releaseからVERSION_IDの値を変数に取得できます。
$ VERSION_ID=$(. /etc/os-release && echo $VERSION_ID)
サブシェルの中のVERSION_ID変数を、現在のシェルのVERSION_ID変数に代入したわけです!
テクニック: メジャーバージョンだけ取り出す
前章で取り出したVERSION_IDですが、OSによってはマイナーバージョンが付いていることがあります。
例えばAlmaLinux 9では、次のように"9.0"という値になっています。
$ cat /etc/os-release NAME="AlmaLinux" VERSION="9.0 (Emerald Puma)" ID="almalinux" ID_LIKE="rhel centos fedora" VERSION_ID="9.0" PLATFORM_ID="platform:el9" PRETTY_NAME="AlmaLinux 9.0 (Emerald Puma)" ANSI_COLOR="0;34" LOGO="fedora-logo-icon" CPE_NAME="cpe:/o:almalinux:almalinux:9::baseos" HOME_URL="https://almalinux.org/" DOCUMENTATION_URL="https://wiki.almalinux.org/" BUG_REPORT_URL="https://bugs.almalinux.org/" ALMALINUX_MANTISBT_PROJECT="AlmaLinux-9" ALMALINUX_MANTISBT_PROJECT_VERSION="9.0" REDHAT_SUPPORT_PRODUCT="AlmaLinux" REDHAT_SUPPORT_PRODUCT_VERSION="9.0"
前章のテクニックと合わせて、次のようにメジャーバージョンだけを取り出すことができます。
$ VERSION_ID=$(. /etc/os-release && echo $VERSION_ID | grep -oE '^[0-9]+')
前章のコマンドのサブシェル内の末尾に、grepコマンドをパイプで繋げています。 このgrepコマンドにより、メジャーバージョンのみを取り出すことができます。
AlmaLinux 9における例
$ VERSION_ID=$(. /etc/os-release && echo $VERSION_ID | grep -oE '^[0-9]+') $ echo $VERSION_ID 9
CentOS 7のようにメジャーバージョンだけ記載されている場合にも、これを共通して利用できます。
仕組みを説明します。 '^[0-9]+'は、先頭から0から9の数字で始まる部分だけにマッチする正規表現になっています。 ^は先頭を表し、[0-9]は0から9の数字のどれかであることを表し、+は1文字以上続くことを表しています。 また、grepは マッチするものがあった行 をデフォルトで抽出するので、oオプションを付けることで マッチした部分のみ を取り出しています。 さらにEオプションを付けることで、先ほどの+の正規表現を利用できるようにしています。 マイナーバージョンの前に.があるため、これによりメジャーバージョンのみ抽出できています。
本記事では、Red Hat Enterprise Linux系OSの種類とバージョンの見分け方を紹介しました。
クリアコードではこのように業務の成果を公開することを重視しています。業務の成果を公開する職場で働きたい人はクリアコードの採用情報をぜひご覧ください。
現在クリアコードではソフトウェア開発者を募集しています! フリーソフトウェア開発での開発の仕方をベースに、成果や知識を公開し共有しながら業務に携われます。
GNU/Linuxの共有ライブラリーのバージョンとアプリケーションバイナリインターフェース(ABI)
Mesonを使ってGObject Introspection対応のビルドシステムを構築する方法
Apache Arrow
milter manager
ククログの記事はCC BY-SA 4.0とGFDLのデュアルライセンスで自由に利用できます。
クリアコードはプログラミングが楽しいソフトウェア開発者を1名募集しています。
クリアコードは「クリアコードをいい感じにする人」を1名募集しています。
クリアコードはフリーソフトウェア開発で培った技術力を提供しています。特にMozilla製品(Mozilla FirefoxとMozilla Thunderbird)とRubyとGroonga(全文検索)に関連した開発を得意としています。