インフラ

Linuxのバージョン確認:os-releaseとunameの使い分けとコンテナでの注意点

Linuxのバージョン確認:os-releaseとunameの使い分けとコンテナでの注意点

Linuxのバージョン確認は、cat /etc/os-releaseでディストリビューションの版を、uname -rでカーネルの版を見る、という2本立てが基本です。この2つは別の番号で、Ubuntu 24.04のカーネルは6.8系、RHEL 9のカーネルは5.14系というように一致しません。

この記事では、各コマンドの出力の読み方と、Dockerコンテナ内やWSL2で結果が食い違う理由、シェルスクリプトやAnsibleで複数台の版を集める実装を、コピーして動かせる形で扱います。後半では、確認した版からサポート期限を判定し、更新計画に落とすまでの判断基準を示します。

まとめ:Linuxのバージョン確認はOSとカーネルを別コマンドで見る

先に結論です。ディストリビューションの版は/etc/os-release、カーネルの版はuname -rで確かめてください。スクリプトで判定するなら、ディストリビューションごとのreleaseファイルやlsb_releaseではなく、os-releaseのIDとVERSION_IDを読む実装が一番壊れにくい方法です。

  • OSの版:cat /etc/os-release。ほぼ全ての現行ディストリビューションに存在し、書式も仕様で決まっている
  • カーネルの版:uname -r。CPUの種類はuname -mで、x86_64かaarch64かが分かる
  • まとめて見る:systemdが動くサーバーならhostnamectlでOS・カーネル・アーキテクチャが1画面に出る
  • コンテナ内:uname -rはホストのカーネルを返す。イメージの版はos-releaseで見る
  • 期限の判定:OSの期限はディストリビューションの公式表で見る。kernel.orgのLTS表でRHELやUbuntuの標準カーネルの寿命を判定しない

Linuxのバージョン確認で最初に分けるOSの版とカーネルの版の違い

「Linuxのバージョン」という言葉は、2つのものを指します。1つはUbuntu 24.04やRHEL 9といったディストリビューションの版、もう1つはLinuxカーネル自体の版です。ディストリビューションはカーネルにパッケージ管理やライブラリを組み合わせた製品で、その全体像はLinuxの仕組みとディストリビューションを扱った解説で整理しています。

ディストリビューションの版とカーネル番号が一致しない理由と具体例

カーネルはLinus Torvalds氏のメインラインで約9〜10週間ごとに新版が出ます。各ディストリビューションは、その中から1つの系列を選んで固定し、自社で修正を当て続けます。版の数字がずれるのはこのためです。

ディストリビューション os-releaseのVERSION_ID 標準カーネルの系列
Ubuntu 24.04 LTS 24.04 6.8系(GA版)
RHEL 9 9.N(マイナー版まで入る) 5.14系
Amazon Linux 2023 2023 6.1系(6.12系も選択可)

RHEL 9の5.14系は、kernel.orgの長期サポート版(LTS)には含まれない系列です。それでもRed Hatが修正を当てて保守しているので、番号だけを見て「古いカーネルだ」と判断するのは誤りになります。カーネルがOSの中で何を受け持つかは、カーネルの役割と仕組みを実装目線でまとめた記事が前提知識になります。

どちらの版を見るべきかをパッケージ・脆弱性・ドライバの用途別に判断

用途が決まれば、見る版も決まります。迷ったら次の順で判断してください。

  • パッケージの導入手順を選ぶ:OSの版。aptかdnfか、どのリポジトリを足すかはディストリビューションと版で決まる
  • ベンダーの脆弱性情報と照合する:OSの版とパッケージの版。RHELやUbuntuの勧告はカーネルも含めてパッケージ単位で出る
  • ドライバやeBPFなど機能の有無を確かめる:カーネルの版。ただしディストリビューションは新機能を古い系列へ移植することがある

実務ではOSの版を主に、カーネルの版を補助に使う場面が大半です。カーネルの番号だけで対応可否を決めるのは、ドライバの動作要件を確かめるときに限られます。

os-releaseファイルでディストリビューションの版を確認する手順

os-release(5)のマニュアルは、このファイルを/etc/os-releaseと/usr/lib/os-releaseの2か所に置くと定め、前者を優先し、無いときだけ後者を読むよう求めています。中身はシェル変数と同じキー=値の書式です。

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.N LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.N LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian

上は出力の形式を示すための抜粋で、点リリースの番号(N)は環境によって変わります。

ID・VERSION_ID・ID_LIKEの意味とUbuntu・RHEL系での出力例

画面で読むならPRETTY_NAME、プログラムで判定するならIDとVERSION_IDを使います。IDは小文字の識別子で、Ubuntuならubuntu、RHELならrhel、Amazon Linuxならamznです。

ID_LIKEは、パッケージやAPIが近い親筋のディストリビューションを空白区切りで並べる項目です。UbuntuはdebianをAlmaLinuxやRocky LinuxはrhelやfedoraをID_LIKEに書くので、派生版をまとめて扱う分岐に使えます。RHEL系のVERSION_IDは9.6のようにマイナー版まで入り、Ubuntuは24.04のように年月で表す、という違いもあります。

lsb_releaseや各社のreleaseファイルを後回しにする理由

古い手順書にはcat /etc/redhat-releaseやlsb_release -aがよく出てきます。前者はRHEL系にしか無く、後者はコマンドを含むパッケージが最小構成のサーバーやコンテナイメージに入っていないことが多いため、手順書の共通コマンドには向きません。

ファイル名が分からない環境ではgrep -H "" /etc/*releaseで一覧を出す方法もありますが、これは調査用です。grepの-Hでファイル名を付けて出す使い方は、grepコマンドのオプションとログ検索を扱った記事で詳しく触れています。手順書と自動化にはos-releaseだけを書く、と決めておくと、ディストリビューションが増えても手順が分岐しません。

unameコマンドでカーネルのリリース番号とアーキテクチャを確かめる方法

uname(1)のマニュアルによると、-rがカーネルのリリース番号、-vがカーネルのビルド情報、-mがマシンのハードウェア名で、-aは不明な項目を除いて全てを並べます。オプションなしでは-sと同じくLinuxとだけ表示されます。

$ uname -r
6.8.0-NN-generic
$ uname -m
x86_64
$ cat /proc/version
Linux version 6.8.0-NN-generic (buildd@...) (gcc ...) #NN-Ubuntu SMP ...

/proc/versionは、proc_version(5)で定義されたカーネル自身が返す文字列で、ビルドに使ったコンパイラの版まで分かります。

uname -rの番号の読み方とディストリ独自の後置部分の意味

6.8.0-NN-genericのうち、先頭の6.8.0が元にしたカーネルの系列、ハイフン以降がディストリビューション側のビルド番号と種類です。RHEL 9なら5.14.0-NNN.el9_N.x86_64、Amazon Linux 2023なら6.1.NNN-NNN.amzn2023.x86_64のように、末尾の記号で配布元が分かります。

脆弱性の修正が入ったかどうかは、先頭の系列ではなくハイフン以降の番号で決まります。同じ5.14.0でも、後ろの番号が古ければ修正前のカーネルです。

hostnamectlでOSとカーネルとアーキテクチャを1回で表示する方法

systemdで動くサーバーなら、hostnamectlだけでOSの名前、カーネル、アーキテクチャが並びます。hostnamectl(1)には--json=prettyや--json=shortでJSON出力する指定もあり、監視ツールへ渡すときに扱いやすくなります。

$ hostnamectl
 Operating System: Ubuntu 24.04.N LTS
           Kernel: Linux 6.8.0-NN-generic
     Architecture: x86-64

表記はx86-64とハイフンで、uname -mのx86_64とは違います。スクリプトで文字列を比較する場合は、どちらのコマンドの値かをそろえてください。

コンテナとWSL2でLinuxのバージョン確認結果が食い違う原因と対処

開発環境でよく起きるのが、「os-releaseはUbuntuなのに、カーネル番号が見慣れない」という食い違いです。原因は、コンテナとWSL2のどちらも、中のディストリビューションと外のカーネルが別物である点にあります。

Dockerコンテナ内のunameがホストのカーネル番号を返す仕組み

コンテナは仮想マシンと違い、ホストのカーネルを共有する仕組みです。そのためコンテナ内でuname -rを打つと、イメージの中身に関係なく、ホストで動いているカーネルの番号が返ります。Amazon Linux 2023のホスト上でubuntu:24.04のイメージを動かせば、os-releaseはUbuntu、unameはamzn2023のカーネル、という結果になります。

$ docker run --rm ubuntu:24.04 sh -c 'grep ^VERSION_ID /etc/os-release; uname -r'
VERSION_ID="24.04"
6.1.NNN-NNN.amzn2023.x86_64

コンテナの中からホストのOSを知りたい場合、os-release(5)は、コンテナの実行環境がホストのos-releaseを/run/host/os-releaseとして渡してよいと定めています。ただし置くかどうかは実行環境しだいで、Dockerの既定では存在しません。

WSL2のmicrosoft-standard表記とホスト側OS情報の見分け方

WSL2では、Microsoftが配布する専用カーネルの上で各ディストリビューションが動きます。uname -rの末尾にmicrosoft-standard-WSL2と付くのはそのためで、インストールしたUbuntuやFedoraの標準カーネルではありません。

WSL2のカーネルはWindows側のwsl --updateで更新され、中のディストリビューションでapt upgradeをしても変わりません。カーネル起因の不具合を調べるときは、Windows側のwsl --versionでカーネルの版を確かめるのが先です。

シェルスクリプトとAnsibleで複数サーバーのバージョンを判定する実装

サーバーが数台を超えると、1台ずつログインして確かめる方法は続きません。版の確認を自動化する2つの型を示します。

os-releaseを読み込みID_LIKEで分岐するシェルスクリプトの例

os-release(5)のマニュアルにある読み込み例をもとに、OS・カーネル・アーキテクチャを1行で出し、系統で分岐するスクリプトです。os-releaseをシェルで読み込めるのは、書式がシェル変数と互換だからです。

#!/bin/sh
# OSとカーネルの版を1行で出し、Debian系かRHEL系かを判定する
if [ -e /etc/os-release ]; then f=/etc/os-release; else f=/usr/lib/os-release; fi
. "$f"
echo "os=${ID} ${VERSION_ID} kernel=$(uname -r) arch=$(uname -m)"
case " ${ID} ${ID_LIKE:-} " in
  *" debian "*) echo "family=debian" ;;
  *" rhel "*|*" fedora "*) echo "family=rhel" ;;
  *) echo "family=other" ;;
esac

空白で囲んでから比較しているのは、ID_LIKE="rhel centos fedora"のような複数値の中から単語単位で探すためです。ID自体も判定に含めているので、ID_LIKEを持たないDebian本体やFedora本体も正しく分かれます。

Ansibleのsetupモジュールで全台の版とカーネルを一覧化する手順

構成管理にAnsibleを使っているなら、新しいスクリプトは要りません。ansible.builtin.setupモジュールのfilterは、シェルと同じワイルドカードで返す項目を絞れます。

$ ansible all -m ansible.builtin.setup -a 'filter=ansible_distribution*'
$ ansible all -m ansible.builtin.setup -a 'filter=ansible_kernel'

1本目でansible_distribution(Ubuntu等)とansible_distribution_versionが、2本目でカーネルのリリース番号が全台分返ります。棚卸しの表を作るときは、この結果をそのまま台帳に取り込むと、手作業の転記ミスがなくなります。

確認した版からサポート期限を判定し更新計画へつなげる判断基準

版を確かめる目的の多くは、「このサーバーはいつまで修正を受けられるか」を知ることです。期限は必ず配布元の公式表で照合してください。

Ubuntu LTSとLinuxカーネルLTSの期限を公式表で照合する手順

Ubuntuのリリースサイクルの公式ページによると、LTSは2年ごとに出て5年間の標準セキュリティ保守を受けます。2026年9月時点の表では、22.04が2027年5月、24.04が2029年5月、26.04が2031年5月に標準保守を終え、Ubuntu Proの延長保守でさらに5年延びます。

カーネル単体の期限はkernel.orgのリリース一覧に載っています。2026年9月時点では6.18・6.12が2028年12月、6.6・6.1が2027年12月、5.15・5.10が2026年12月に保守終了の予定です。この表が意味を持つのは、カーネルを自分でビルドする場合や、系列をそのまま使う組み込み機器の場合です。ディストリビューションの標準カーネルは配布元が保守するので、OSの期限を正とします。最新の系列で何が変わったかは、Linuxカーネル6.19の新機能とサポート終了を扱った記事にまとめています。

os-releaseには期限をSUPPORT_END=YYYY-MM-DDで書く項目も定義されていますが、記載するディストリビューションは一部です。値が無ければ、公式表を見に行ってください。

期限切れのOSを放置してよい場面と更新作業を外部へ任せるべき条件

判断は言い切ります。インターネットから到達できず、データも持たない検証用の仮想マシンなら、期限切れのまま使い捨てにしてかまいません。作り直す手間のほうが大きいからです。

一方、外部に公開しているWebサーバーや、個人情報を扱う業務システムの土台で標準保守が切れているなら、次の更新計画を先送りしてはいけません。とくに、同じ台帳の中にRHEL系とUbuntu系が混ざり、アプリの動作確認まで含めた移行が必要な場合は、社内の担当者1人で抱えると止まりがちです。OSの更新とアプリの移行を一体で計画し、クラウド上に作り直す選択肢まで比べたいときは、一創のインフラ構築(AWS・Google Cloud・Azure)で、現行の版の棚卸しから移行後の保守まで相談できます。

よくある質問

Linuxのバージョン確認について、検索でよく調べられている疑問に答えます。

Linuxのバージョンを一度に確認できるコマンドはありますか?

systemdが動いている環境ならhostnamectlで、OSの名前、カーネルの版、アーキテクチャがまとめて表示されます。systemdが無いコンテナなどでは、cat /etc/os-release; uname -rと2つを続けて打つのが確実です。この2つはほぼ全ての現行ディストリビューションで追加のパッケージなしに使えます。

CentOSやAlmaLinuxのバージョンはどう確認しますか?

cat /etc/os-releaseでVERSION_IDを見てください。RHEL系は9.6のようにマイナー版まで入ります。/etc/redhat-releaseや/etc/almalinux-releaseでも1行で表示できますが、ディストリビューションごとにファイル名が違うので、手順書にはos-releaseを書くほうが後から困りません。

uname -rとuname -aの違いは何ですか?

uname -rはカーネルのリリース番号だけを表示します。uname -aはカーネル名、ホスト名、リリース番号、ビルド情報、アーキテクチャなどを1行に並べます。スクリプトで版を比較するなら、余分な情報が無い-rを使ってください。どちらもディストリビューションの版は表示しない点に注意が要ります。

lsb_releaseがcommand not foundになるのはなぜですか?

lsb_releaseは、それを含むパッケージが入っているときだけ使えるコマンドです。最小構成のサーバーやコンテナイメージには入っていないことが多く、エラーになります。パッケージを追加すれば使えますが、同じ情報は/etc/os-releaseにあるので、追加せずにそちらを読むほうが手早く済みます。

Linuxが32bitか64bitかはどう確認しますか?

uname -mを実行し、x86_64なら64bitのIntel・AMD系、aarch64なら64bitのArm系です。i686やarmv7lなら32bitです。AWSのGravitonなどArm系のサーバーではaarch64になるので、配布されているバイナリのアーキテクチャと合っているかを、ここで確かめてから導入してください。

関連記事

お気に入りに入れた記事の一覧

資料請求

RELATED POSTS 関連記事

目次