LinuxのOSバージョンは、ディストリビューション(UbuntuやRocky Linuxなど)なら cat /etc/os-release、カーネルなら uname -r で確認します。 この2つは別々のものを指しているので、「Ubuntu 24.04」と「6.8.0」のように答えが2種類あるのが正しい状態です。どちらを聞かれているのかを最初に区別できると、手順書やパッケージの選び方で迷わなくなります。

この記事では、Ubuntu 24.04.4 LTS で実際にコマンドを実行した結果を載せながら、uname と os-release の違い、OS別の早見表、Dockerコンテナ内やWSL2での見え方、lsb_release が入っていないときの代替、シェルスクリプトでOSを判定して分岐するコードまでを順に説明します。手元で動かせなかったディストリビューションの値は「未実行」と明記しています。

OSバージョン確認コマンドの早見表

知りたいこと コマンド Ubuntu 24.04 での出力(実行結果)
ディストリビューション名とバージョン(まずこれ) cat /etc/os-release PRETTY_NAME="Ubuntu 24.04.4 LTS" ほか
1行だけ欲しい grep PRETTY_NAME /etc/os-release PRETTY_NAME="Ubuntu 24.04.4 LTS"
バージョン番号だけ . /etc/os-release; echo "$VERSION_ID" 24.04
カーネルのバージョン uname -r 6.18.44-fc-v64(検証環境の値)
カーネル名・版・CPUをまとめて uname -srm Linux 6.18.44-fc-v64 x86_64
CPUアーキテクチャ uname -m または arch x86_64
32bitか64bitか getconf LONG_BIT 64
カーネルのビルド情報 cat /proc/version Linux version 6.18.44-fc-v64 (...)
Ubuntu/Debian系の定番 lsb_release -a Description: Ubuntu 24.04.4 LTS ほか
systemdがある環境でまとめて hostnamectl OS名・カーネル・アーキテクチャを一覧表示(今回は未実行)
ログイン画面用の表示 cat /etc/issue Ubuntu 24.04.4 LTS \n \l
glibcのバージョン ldd --version ldd (Ubuntu GLIBC 2.39-0ubuntu8.7) 2.39

迷ったら cat /etc/os-release と uname -r の2つを実行すれば用が足ります。 残りは「1行で欲しい」「スクリプトで使いたい」といった場面に合わせて選びます。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「LinuxのOSバージョン確認コマンド|unameとos-releaseの違い」

カーネルとディストリビューションの違いを図で整理する

Linuxという言葉は、2つの意味で使われます。ひとつはカーネル(ハードウェアとプログラムの間を取り持つ中心部分)、もうひとつはディストリビューション(カーネルにコマンド類・パッケージ管理・設定を組み合わせて配布しているまとまり)です。

flowchart TB
    subgraph D["ディストリビューション(/etc/os-release で確認)"]
        A["アプリ・コマンド類<br>bash / coreutils / systemd"]
        P["パッケージ管理<br>apt / dnf / apk"]
        L["ライブラリ<br>glibc / musl"]
    end
    subgraph K["カーネル(uname -r で確認)"]
        K1["Linux カーネル<br>プロセス・メモリ・ファイル・ネットワーク"]
    end
    H["ハードウェア / 仮想マシン(uname -m でCPUの種類)"]
    D --> K --> H
項目 カーネル ディストリビューション
何を指すか OSの中心部分(Linux本体) カーネル+コマンド類+パッケージ管理のまとまり
確認コマンド uname -r cat /etc/os-release
バージョンの例 6.8.0-xx-generic Ubuntu 24.04.4 LTS
情報の出どころ 動いているカーネル自身(システムコール) ファイル(テキスト)
いつ変わるか カーネル更新後に再起動したとき OSのアップグレードや更新をしたとき
コンテナの中では ホストと同じ値になる コンテナイメージごとの値になる
知りたくなる場面 ドライバ、カーネルの機能、不具合情報との照合 パッケージの入れ方、サポート期限、手順書選び

「OSのバージョンを教えてください」と聞かれたときは、ほとんどの場合ディストリビューションのほうです。カーネルのバージョンが必要なときは「カーネルは?」と明示されることが多いので、両方を控えておくと安心です。

ディストリビューションを確認する(/etc/os-release)

cat /etc/os-release の実行結果

/etc/os-release は、ディストリビューションの名前やバージョンを KEY=値 の形で書いたテキストファイルです。systemd を採用しているディストリビューションを中心に、現在の主要なLinuxのほぼすべてに置かれています。

cat /etc/os-release

実行結果(Ubuntu 24.04.4 LTS):

PRETTY_NAME="Ubuntu 24.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.4 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

各項目の読み方

項目 意味 上の例 使いどころ
PRETTY_NAME 人が読むための表示名 Ubuntu 24.04.4 LTS 報告や問い合わせにそのまま貼る
NAME ディストリビューション名 Ubuntu 表示用
VERSION_ID バージョン番号(機械向け) 24.04 スクリプトでの比較
VERSION バージョンの表示用文字列 24.04.4 LTS (Noble Numbat) 細かい版(ポイントリリース)を知る
VERSION_CODENAME コードネーム noble aptのリポジトリ設定など
ID 小文字の識別子 ubuntu スクリプトでの判定に使う
ID_LIKE 近い系統の識別子(空白区切り) debian 派生ディストリビューションの系統判定

人に伝えるときは PRETTY_NAME、スクリプトで判定するときは ID と VERSION_ID と覚えておくと使い分けやすくなります。VERSION_ID や ID_LIKE は省略されることがあり、たとえば Debian には ID_LIKE がありません(後述の早見表を参照)。

必要な行だけ取り出す

grep -E '^(PRETTY_NAME|ID|VERSION_ID|ID_LIKE|VERSION_CODENAME)=' /etc/os-release

実行結果:

PRETTY_NAME="Ubuntu 24.04.4 LTS"
VERSION_ID="24.04"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian

値だけが欲しいときは、ファイルをシェルに読み込ませるのが手軽です。os-release はシェルの変数代入と同じ書式で書かれているので、.(ドットコマンド)でそのまま読めます。

( . /etc/os-release; echo "$ID $VERSION_ID / $PRETTY_NAME / like=${ID_LIKE:-}" )

実行結果:

ubuntu 24.04 / Ubuntu 24.04.4 LTS / like=debian

丸かっこで囲むとサブシェルの中だけで読み込まれるため、今のシェルの変数を上書きせずに済みます。awk で取り出す書き方も動作を確かめました。

awk -F= '$1=="VERSION_ID"{gsub(/"/,"",$2);print $2}' /etc/os-release
24.04

/etc/os-release の実体は /usr/lib/os-release

ls -l /etc/os-release
dpkg -S /usr/lib/os-release

実行結果:

lrwxrwxrwx 1 root root 21 Feb  6  2026 /etc/os-release -> ../usr/lib/os-release
base-files: /usr/lib/os-release

Ubuntu では /etc/os-release はシンボリックリンクで、実体は base-files パッケージが置いた /usr/lib/os-release です。/etc/os-release が見つからない環境では /usr/lib/os-release を探す、という順番で読むと取りこぼしが減ります(後半のスクリプトでもこの順で読んでいます)。

カーネルを確認する(uname)

uname のオプションと実行結果

uname は、いま動いているカーネルの情報を表示するコマンドです。ファイルを読むのではなく、カーネルに直接問い合わせます。

コマンド 表示するもの 実行結果(検証環境)
uname(-s と同じ) カーネル名 Linux
uname -r カーネルのリリース(バージョン) 6.18.44-fc-v64
uname -v カーネルのビルド情報 #1 SMP PREEMPT_DYNAMIC @0
uname -m CPUアーキテクチャ x86_64
uname -n ホスト名 vm
uname -o OSの種類 GNU/Linux
uname -p / uname -i プロセッサ / ハードウェア(環境により unknown) x86_64 / x86_64
uname -srm よく使う3つをまとめて Linux 6.18.44-fc-v64 x86_64
uname -a すべて 下の実行結果
uname -a
Linux vm 6.18.44-fc-v64 #1 SMP PREEMPT_DYNAMIC @0 x86_64 x86_64 x86_64 GNU/Linux

今回の検証環境は仮想マシン上の Ubuntu 24.04 で、カーネルは環境側が用意したもの(6.18.44-fc-v64)です。通常の Ubuntu 24.04 では 6.8.0-xx-generic のように、末尾にディストリビューション固有の文字列が付きます(この一般的な値は今回未実行です)。

uname -r の読み方

uname -r の文字列は、おおまかに「カーネルのバージョン」と「ディストリビューションが付けた枝番・種類」に分かれます。

例(代表的な形・未実行) 読み方
6.8.0-45-generic Ubuntu。6.8.0 がカーネル、45 がUbuntu側の更新番号、generic が種類
6.12.xx+deb13-amd64 Debian 13。deb13 が Debian 13 向けのビルド
5.14.0-xxx.el9_x.x86_64 RHEL 9 系。el9 が Enterprise Linux 9
6.1.xx-xx.amzn2023.x86_64 Amazon Linux 2023
x.x.x-microsoft-standard-WSL2 WSL2(Windows上のLinux)

uname -r の末尾を見ると、ディストリビューションの見当が付くこともありますが、コンテナの中ではホストのカーネルが見えるため、判定には使わず /etc/os-release を見るのが確実です。

/proc/version でも同じ情報が見られる

cat /proc/version
Linux version 6.18.44-fc-v64 (builder@sandboxing) (gcc (GCC) 15.3.0, GNU ld (GNU Binutils) 2.46) #1 SMP PREEMPT_DYNAMIC @0

uname コマンドが入っていない最小構成の環境でも、/proc/version や /proc/sys/kernel/osrelease を cat すればカーネルのバージョンがわかります。

OS別早見表(主要ディストリビューションの値)

Ubuntu 24.04 の行は今回の実行結果、それ以外の行は各ディストリビューションで一般に知られている代表的な値で、今回は未実行です(コンテナイメージを取得できない検証環境のため)。手元の環境では、表のコマンドを実行して実際の値を確認してください。

ディストリビューション ID ID_LIKE VERSION_ID の形 PRETTY_NAME の例 標準のカーネル系列 パッケージ管理 確認
Ubuntu 24.04 LTS ubuntu debian 24.04 Ubuntu 24.04.4 LTS 6.8 系 apt 実行結果(カーネル系列を除く)
Debian 13 debian (なし) 13 Debian GNU/Linux 13 (trixie) 6.12 系 apt 未実行
RHEL 9 rhel fedora 9.x Red Hat Enterprise Linux 9.x (Plow) 5.14 系 dnf 未実行
RHEL 10 rhel fedora 10.x Red Hat Enterprise Linux 10.x (Coughlan) 6.12 系 dnf 未実行
Rocky Linux 9 / 10 rocky rhel centos fedora 9.x / 10.x Rocky Linux 9.x (Blue Onyx) RHELと同系列 dnf 未実行
AlmaLinux 9 / 10 almalinux rhel centos fedora 9.x / 10.x AlmaLinux 9.x (...) RHELと同系列 dnf 未実行
Amazon Linux 2023 amzn fedora 2023 Amazon Linux 2023.x.yyyymmdd 6.1 系ほか dnf 未実行
Alpine Linux alpine (なし) 3.xx.x Alpine Linux v3.xx LTS系列 apk 未実行

この表から読み取れるポイントは3つあります。

  • ID は小文字で、ディストリビューションごとに決まった値です。スクリプトの分岐はこの値で行います。
  • RHEL互換のディストリビューションは ID_LIKE に rhel を含みます。 ID を1つずつ列挙しなくても、ID_LIKE を見ればまとめて扱えます。
  • VERSION_ID の形はばらばらです(24.04、13、9.6、2023、3.22.1)。数値として比べるときは、メジャー番号だけを取り出すと扱いやすくなります。

ディストリビューション固有のファイル

os-release のほかに、系統ごとの確認用ファイルもあります。

系統 ファイル 内容 確認
Debian / Ubuntu /etc/debian_version Debianのバージョン。Ubuntu 24.04 では trixie/sid 実行結果
Ubuntu /etc/lsb-release DISTRIB_RELEASE=24.04 など 実行結果
RHEL系 /etc/redhat-release Rocky Linux release 9.x (Blue Onyx) のような1行 未実行
Amazon Linux /etc/system-release Amazon Linux release 2023... のような1行 未実行
Alpine /etc/alpine-release 3.xx.x のような番号だけ 未実行
共通 /etc/issue ログイン画面用の表示 実行結果

Ubuntu 24.04 での実行結果は次のとおりです。

cat /etc/debian_version
cat /etc/lsb-release
ls /etc/*release /etc/*version
trixie/sid
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.4 LTS"
/etc/debian_version
/etc/lsb-release
/etc/os-release

Ubuntu の /etc/debian_version は Ubuntu 自身の番号ではなく、もとになった Debian の系列名を示します。 Ubuntu のバージョンを知りたいときは os-release か lsb-release を見ます。どのファイルがあるかわからないときは、ls /etc/*release と打つと一覧できます。

lsb_release と hostnamectl の使い方

lsb_release -a

lsb_release -a

実行結果:

Distributor ID: Ubuntu
Description:    Ubuntu 24.04.4 LTS
Release:    24.04
Codename:   noble

短く取り出すオプションも便利です。

コマンド 実行結果
lsb_release -d Description: Ubuntu 24.04.4 LTS
lsb_release -rs 24.04
lsb_release -cs noble

lsb_release -cs は、aptのリポジトリ設定を書く手順でよく登場します。

lsb_release がないときの代替

lsb_release は lsb-release パッケージに含まれるコマンドで(dpkg -S /usr/bin/lsb_release の結果は lsb-release: /usr/bin/lsb_release)、最小構成のコンテナイメージやRHEL系では入っていないことがあります。その場合は command not found と表示されます。パッケージを追加しなくても、os-release から同じ値が取れます。

lsb_release での書き方 os-release を使った代替 Ubuntu 24.04 での結果
lsb_release -is . /etc/os-release; echo "$ID" ubuntu(lsb_release は Ubuntu)
lsb_release -rs . /etc/os-release; echo "$VERSION_ID" 24.04
lsb_release -cs . /etc/os-release; echo "$VERSION_CODENAME" noble
lsb_release -ds . /etc/os-release; echo "$PRETTY_NAME" Ubuntu 24.04.4 LTS

新しく書く手順やスクリプトでは、os-release を読む形にしておくと、どのディストリビューションでもそのまま動きます。

hostnamectl

hostnamectl は、systemd が動いている環境でOS名・カーネル・アーキテクチャ・仮想化の種類を一度に表示するコマンドです。一般的なサーバーやデスクトップでは次のような項目が並びます(書式の例・今回は未実行)。

 Static hostname: web01
Operating System: Ubuntu 24.04.4 LTS
          Kernel: Linux 6.8.0-xx-generic
    Architecture: x86-64

今回の検証環境は systemd が PID 1 で動いていないため、実行すると次の表示になりました。コンテナの中でも同じ表示になることがあります。

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

この表示が出たときは、cat /etc/os-release と uname -r に切り替えれば同じ情報が得られます。

Dockerコンテナの中では uname がホストのカーネルを返す

コンテナは、ホストのカーネルを共有して動きます。そのため、コンテナの中でカーネルのバージョンを調べると、ホストと同じ値が返ってきます。Docker で確かめた結果です(イメージは検証用の最小構成のもの)。

# ホスト側
uname -r
# コンテナの中
docker run --rm mini:1 cat /proc/sys/kernel/osrelease
docker run --rm mini:1 cat /proc/version

実行結果:

6.18.44-fc-v64
6.18.44-fc-v64
Linux version 6.18.44-fc-v64 (builder@sandboxing) (gcc (GCC) 15.3.0, GNU ld (GNU Binutils) 2.46) #1 SMP PREEMPT_DYNAMIC @0

ホストとコンテナで同じ 6.18.44-fc-v64 が表示されました。一方で、ディストリビューションの情報はコンテナイメージごとに決まります。今回のイメージは最小構成のため、os-release も uname コマンドも入っていませんでした。

docker run --rm mini:1 cat /etc/os-release
docker run --rm mini:1 sh -c 'uname -r'
docker run --rm mini:1 ls /.dockerenv
cat: /etc/os-release: No such file or directory
sh: 1: uname: not found
/.dockerenv
調べるもの コンテナの中で見える値
uname -r、/proc/version ホストのカーネル
/etc/os-release コンテナイメージのディストリビューション(最小構成のイメージには無いこともある)
/.dockerenv Docker のコンテナ内に置かれる目印のファイル

「Ubuntu 22.04 のホストで Alpine のコンテナを動かす」といった組み合わせでは、/etc/os-release は Alpine、uname -r は Ubuntu のカーネルという結果になります。コンテナの中でパッケージを入れるときは os-release、カーネルの機能に関わる調査ではホスト側の値を見る、と分けて考えると整理しやすくなります。

WSL2 での見え方

WSL2(Windows上でLinuxを動かす仕組み)では、ディストリビューションは自分で選んだもの(Ubuntu など)、カーネルは Microsoft が用意したものが使われます。そのため、cat /etc/os-release は Ubuntu の内容、uname -r は x.x.x-microsoft-standard-WSL2 という形になります(一般に知られた形で、今回は未実行)。

スクリプトで WSL かどうかを見分けるときは、/proc/version に microsoft という文字が含まれるかを調べる方法がよく使われます。

grep -qi microsoft /proc/version && echo "WSL" || echo "WSLではない"

今回の検証環境(WSLではない仮想マシン)では WSLではない 側に分岐することを確かめました。Windows 側からは wsl -l -v で、各ディストリビューションが WSL1 と WSL2 のどちらで動いているかを確認できます(未実行)。

シェルスクリプトでOSを判定して分岐する

インストール手順をスクリプトにまとめるときは、OSごとにパッケージ管理コマンドを切り替えたくなります。os-release を読み込んで ID で分岐し、知らない ID は ID_LIKE で系統を判定する形にすると、派生ディストリビューションにも対応できます。

os.sh(POSIX sh で動きます):

#!/bin/sh
# OSを判定して分岐する(POSIX sh で動く)
if [ -r /etc/os-release ]; then
    . /etc/os-release
elif [ -r /usr/lib/os-release ]; then
    . /usr/lib/os-release
else
    ID=unknown
    VERSION_ID=unknown
fi

case "$ID" in
    ubuntu|debian)                 FAMILY=debian; PKG="apt-get" ;;
    rhel|rocky|almalinux|centos|fedora|amzn) FAMILY=rhel; PKG="dnf" ;;
    alpine)                        FAMILY=alpine; PKG="apk" ;;
    *)
        case " ${ID_LIKE:-} " in
            *" debian "*)          FAMILY=debian; PKG="apt-get" ;;
            *" rhel "*|*" fedora "*) FAMILY=rhel; PKG="dnf" ;;
            *)                     FAMILY=unknown; PKG="" ;;
        esac ;;
esac

MAJOR=${VERSION_ID%%.*}
echo "ID=$ID VERSION_ID=$VERSION_ID MAJOR=$MAJOR FAMILY=$FAMILY PKG=$PKG"
echo "KERNEL=$(uname -r) ARCH=$(uname -m)"

if grep -qi microsoft /proc/version 2>/dev/null; then
    echo "ENV=WSL"
elif [ -f /.dockerenv ] || [ -f /run/.containerenv ]; then
    echo "ENV=container"
else
    echo "ENV=host-or-vm"
fi

実行結果(Ubuntu 24.04、sh os.sh):

ID=ubuntu VERSION_ID=24.04 MAJOR=24 FAMILY=debian PKG=apt-get
KERNEL=6.18.44-fc-v64 ARCH=x86_64
ENV=host-or-vm

他のディストリビューションでの分岐は、os-release の内容をまねたテスト用ファイルを読み込ませて確かめました(実機ではなく、判定ロジックの確認です)。

読み込ませた内容 実行結果(1行目)
ID=debian、VERSION_ID="13" ID=debian VERSION_ID=13 MAJOR=13 FAMILY=debian PKG=apt-get
ID="rocky"、VERSION_ID="9.6"、ID_LIKE="rhel centos fedora" ID=rocky VERSION_ID=9.6 MAJOR=9 FAMILY=rhel PKG=dnf
ID=alpine、VERSION_ID=3.22.1 ID=alpine VERSION_ID=3.22.1 MAJOR=3 FAMILY=alpine PKG=apk
ID=linuxmint、VERSION_ID="22"、ID_LIKE="ubuntu debian" ID=linuxmint VERSION_ID=22 MAJOR=22 FAMILY=debian PKG=apt-get

最後の行は、case に書いていない linuxmint が ID_LIKE によって debian 系と判定された例です。

スクリプトを書くときのポイント

ポイント 理由 書き方
ID はそのまま比較する 小文字の決まった値なので揺れがない case "$ID" in ubuntu) ...
ID_LIKE は空白区切りの一覧として扱う 複数の値が入る(rhel centos fedora) case " $ID_LIKE " in *" rhel "*)
省略される項目に備える ID_LIKE や VERSION_ID が無い場合がある ${ID_LIKE:-} で空文字を既定にする
バージョン比較はメジャー番号で 24.04 や 9.6 は整数比較ができない MAJOR=${VERSION_ID%%.*} のあと [ "$MAJOR" -ge 9 ]
uname -r で判定しない コンテナではホストの値になる os-release を使う
変数の上書きに注意する os-release は NAME や VERSION などを定義する サブシェル ( . /etc/os-release; ... ) の中で読む

Amazon Linux は世代によってパッケージ管理が異なる(2023 は dnf)ため、複数の世代を扱う場合は VERSION_ID でさらに分けると丁寧です。

Python から確認する

Python 3.10 以降には、os-release を辞書として読む関数が標準で入っています。

python3 -c "import platform;print(platform.freedesktop_os_release()['PRETTY_NAME'], platform.release(), platform.machine())"

実行結果(Python 3.11):

Ubuntu 24.04.4 LTS 6.18.44-fc-v64 x86_64

アーキテクチャとビット数を確認する

パッケージやバイナリをダウンロードするときは、OSのバージョンに加えてCPUの種類も必要になります。

uname -m
arch
getconf LONG_BIT

実行結果:

x86_64
x86_64
64
uname -m の値 意味 ダウンロード時によく見る表記
x86_64 Intel / AMD の64bit amd64、x64
aarch64 ARM の64bit(Graviton、Raspberry Pi 4以降の64bit OSなど) arm64
armv7l ARM の32bit armhf
i686 Intel / AMD の32bit i386、x86

x86_64 と amd64、aarch64 と arm64 は同じものを指す別名です。配布ページの表記と uname -m の値が違って見えても、この対応で読み替えられます。

サポート期限(EOL)を調べる

バージョンがわかったら、そのバージョンがいつまで更新を受けられるかも確認しておくと、移行の計画が立てやすくなります。サポート期限はコマンドの出力には含まれないため、各ディストリビューションの公式のライフサイクルページで確認します。

ディストリビューション 目安(一般に公表されている内容・今回は公式ページ未確認) 確認先
Ubuntu 24.04 LTS 標準サポートは2029年まで Ubuntu のリリースサイクルのページ
Debian 13 通常サポートのあと、LTSによる延長あり Debian のリリース情報・LTSのページ
RHEL 9 / 10 と互換OS メジャーバージョンごとに約10年 Red Hat、Rocky Linux、AlmaLinux の各ライフサイクルページ
Amazon Linux 2023 標準サポートと保守期間の2段階 Amazon Linux 2023 のリリース情報
Alpine Linux リリース系列ごとに約2年 Alpine のリリース一覧ページ

日付は改定されることがあるため、この記事では目安にとどめています。実際の計画には公式ページの最新の日付を使ってください。 Ubuntu では pro status や hwe-support-status、ubuntu-distro-info といった確認用コマンドも用意されていますが、今回の検証環境には入っておらず未実行です。

うまく表示されないときの対処

表示・状況 理由 対処
lsb_release: command not found lsb-release パッケージが入っていない cat /etc/os-release を使う
System has not been booted with systemd as init system hostnamectl は systemd が必要 cat /etc/os-release と uname -r を使う
cat: /etc/os-release: No such file or directory 最小構成のコンテナイメージなど /usr/lib/os-release、ls /etc/*release、/etc/issue を順に探す
uname: not found 最小構成のイメージに coreutils が無い cat /proc/version または cat /proc/sys/kernel/osrelease
更新したのに uname -r が変わらない 新しいカーネルは再起動後に有効になる 再起動後にもう一度確認する
コンテナ内の uname -r がイメージと合わない コンテナはホストのカーネルを共有する 仕様どおり。ディストリビューションは os-release で見る
/etc/debian_version が trixie/sid Ubuntu では基になった Debian の系列名が入る Ubuntu のバージョンは os-release で見る

今回確認したコマンドは、どれも一般ユーザーの権限で実行できます。sudo は不要です。

人に伝えるときのコピペ用コマンド

問い合わせや報告で環境を伝えるときは、次の3行をまとめて実行し、出力を貼り付けると情報がそろいます。

grep PRETTY_NAME /etc/os-release
uname -srm
getconf LONG_BIT

実行結果:

PRETTY_NAME="Ubuntu 24.04.4 LTS"
Linux 6.18.44-fc-v64 x86_64
64

よくある質問

Q. uname -a に「Ubuntu」と出ないのはなぜですか? A. uname はカーネルの情報を返すコマンドだからです。カーネルのビルド情報にディストリビューション名が含まれる環境もありますが、決まりではありません。ディストリビューション名は cat /etc/os-release で確認します。

Q. /etc/os-release と /etc/redhat-release はどちらを見ればよいですか? A. どちらでも人が読む分には同じ情報が得られます。スクリプトで扱うなら、KEY=値 の形で項目が分かれていて、ディストリビューションをまたいで同じ書式の os-release が向いています。

Q. コンテナの中のカーネルを新しくできますか? A. コンテナはホストのカーネルを使うため、コンテナイメージを替えてもカーネルは変わりません。カーネルを更新したいときは、ホスト側(またはホストの仮想マシン)を更新します。

Q. VERSION_ID と VERSION の違いは何ですか? A. VERSION_ID は 24.04 のような機械向けの番号、VERSION は 24.04.4 LTS (Noble Numbat) のような表示用の文字列です。ポイントリリース(.4 の部分)まで知りたいときは VERSION か PRETTY_NAME を見ます。

まとめ

  • ディストリビューションは cat /etc/os-release、カーネルは uname -r。この2つは別のものを指す
  • 人に伝えるときは PRETTY_NAME、スクリプトでは ID と VERSION_ID を使う
  • RHEL互換OSや派生ディストリビューションは ID_LIKE で系統を判定できる
  • コンテナの中の uname -r はホストのカーネル。ディストリビューションはイメージごとに os-release で確認する
  • lsb_release や hostnamectl が使えないときは os-release に切り替える。無ければ /usr/lib/os-release や /proc/version を見る
  • アーキテクチャは uname -m。x86_64 は amd64、aarch64 は arm64 と同じ
  • サポート期限はコマンドでは出ないので、公式のライフサイクルページで確認する

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「LinuxのOSバージョン確認コマンド|unameとos-releaseの違い」

株式会社RJCでは、LinuxのOSバージョン確認のような基本操作を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?