結論

Linux のバージョン確認は、OS なら cat /etc/os-release、カーネルなら uname -r です。コンテナの中の uname -r はホストの値です。

この記事でわかること

  • 目的別13パターンの早見表(OS・カーネル・CPU)
  • 14ディストリビューションの os-release の値
  • sh・bash・Python・Ansible の4通りの版の判定

2026年10月16日更新|Ubuntu 24.04.4 LTS・カーネル 6.18.44 で実行確認

「Ubuntu 24.04.4 LTS」と「6.8.0-xx-generic」のように答えが2つ出るのが正常で、「OS のバージョンは?」と聞かれたときに答えるのは前者です。

flowchart TD
    Q[バージョン確認] --> OS[OS の版<br>os-release]
    Q --> K[カーネルの版<br>uname -r]
    OS --> A[Ubuntu<br>24.04.4 LTS]
    K --> B[6.8.0-45<br>-generic]

目的別の早見表です。出力は Ubuntu 24.04 で実行したものです。

知りたいこと コマンド Ubuntu 24.04 での出力
OS(ディストリビューション)と版 cat /etc/os-release PRETTY_NAME="Ubuntu 24.04.4 LTS" など13行
カーネルの版 uname -r 6.18.44-fc-v139
OS 名を1行で grep PRETTY_NAME /etc/os-release PRETTY_NAME="Ubuntu 24.04.4 LTS"
Debian/Ubuntu 系の定番 lsb_release -a Description: Ubuntu 24.04.4 LTS など4行
systemd があれば一括表示 hostnamectl OS・カーネル・CPU・仮想化を一覧
カーネル名・版・CPU をまとめて uname -srm Linux 6.18.44-fc-v139 x86_64
版の番号だけ . /etc/os-release; echo $VERSION_ID 24.04
32bit か 64bit か getconf LONG_BIT 64
CPU アーキテクチャ uname -m(または arch) x86_64
カーネルのビルド情報 cat /proc/version Linux version 6.18.44-fc-v139 (...)
WSL かどうか grep -i microsoft /proc/version 何も出ない=WSL ではない
コンテナかどうか systemd-detect-virt -c docker
仮想マシンかどうか systemd-detect-virt -v kvm

確認環境:Ubuntu 24.04.4 LTS(GNU coreutils 9.4、lsb-release、bash 5.2.21、zsh 5.9、Python 3.11.15、systemd 255、ansible-core 2.19.14)。この Ubuntu は KVM 仮想マシン上のコンテナ型サンドボックスで動いており(systemd-detect-virt は docker、systemd-detect-virt -v は kvm)、カーネルはホスト側の 6.18.44-fc-v139 です。コンテナの中で見える値の実例として、確認環境の出力をそのまま載せています。他のディストリビューションの /etc/os-release は、公開イメージの os-release ファイルを集めた GitHub リポジトリ chef/os_release(2026年7月更新)の内容と、各社の公式ドキュメント(AWS の Amazon Linux 2023 ユーザーガイド、openSUSE の SDB、Red Hat の RHEL 9 導入ガイド、Debian 13 リリースノート、Ubuntu の Kernel FAQ)で確かめました。os-release の仕様は systemd の os-release(5) のソース、WSL2 のカーネル名は microsoft/WSL2-Linux-Kernel のカーネル設定、Arch Linux の os-release は archlinux-docker のビルド定義で確かめました(確認日 2026年10月16日)。

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

(記載例)出典:株式会社RJC「Linuxバージョン確認コマンド|OS別出力とuname・os-release早見表」

Linux のバージョンは2つある:ディストリビューションとカーネル

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

flowchart LR
    subgraph U["ユーザー空間:ディストリビューション/コンテナイメージごとに違う"]
        OSR["/etc/os-release<br>(実体は /usr/lib/os-release)"]
        LSB["lsb_release -a"]
        HC["hostnamectl"]
        ISS["/etc/issue・/etc/*-release"]
    end
    subgraph K["カーネル:コンテナではホストと共有"]
        KV["uname -r / uname -a<br>/proc/version"]
    end
    HW["ハードウェア/仮想マシン<br>uname -m・lscpu・systemd-detect-virt"]
    LSB --> OSR
    HC --> OSR
    HC --> KV
    K --> HW
項目 カーネル ディストリビューション
確認コマンド uname -r cat /etc/os-release
版の例 6.8.0-45-generic Ubuntu 24.04.4 LTS
情報の出どころ 動いているカーネル自身 ルートファイルシステム上のテキストファイル
いつ変わるか カーネル更新後の再起動 OS のアップグレード・更新
コンテナの中では ホストと同じ値 コンテナイメージごとの値
知りたくなる場面 ドライバ・カーネル機能・脆弱性情報との照合 パッケージの入れ方・手順書の選択・サポート期限

lsb_release と hostnamectl は、自分で情報を持っているのではなく /etc/os-release(と uname)を読んで整形しているコマンドです。Ubuntu 24.04 の /usr/bin/lsb_release(lsb-release 12.0-2)は 97 行のシェルスクリプトで、/etc/os-release を . で読み込み、PRETTY_NAME を Description、VERSION_ID を Release、VERSION_CODENAME を Codename として表示しています。そのため、この2つが無い環境でも、元の /etc/os-release と uname -r を見れば同じ情報が得られます。

OS のバージョン確認:cat /etc/os-release

実行結果(Ubuntu 24.04)

cat /etc/os-release
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

/etc/os-release は、freedesktop.org(systemd)の仕様で決まった形式のテキストファイルで、現在の主要なディストリビューションのほぼすべてに置かれています。形式は KEY=値 の行の並びで、仕様では「シェルの変数代入と互換。ただし変数展開などシェルの機能は使えない」と定められているため、.(ドットコマンド)でそのまま読み込めます。

/etc/os-release の全項目の意味

仕様(os-release(5))で定義されている項目のうち、実際のディストリビューションでよく見るものです。仕様ではどの項目も省略でき、NAME・ID・PRETTY_NAME が無いときだけ既定値を使うと決まっています(Python の platform.freedesktop_os_release() もこの3つは必ず返します)。

項目 意味 無いときの扱い Ubuntu 24.04 の値
PRETTY_NAME 人に見せるための表示名。版やコードネームを含んでよい 既定値 "Linux" Ubuntu 24.04.4 LTS
NAME 版を含まない OS 名(表示用) 既定値 Linux Ubuntu
ID 小文字の識別子(0-9 a-z . _ - のみ)。スクリプトの判定に使う 既定値 linux ubuntu
ID_LIKE 近い系統の ID を近い順に空白区切りで。ID を知らないときの判定用 任意(Debian・Alpine などは無い) debian
VERSION_ID 機械向けの版番号(コードネームを含まない)。スクリプトの比較に使う 任意(Arch は無い) 24.04
VERSION 表示用の版文字列。ポイントリリースやコードネームを含む 任意(Alpine・Arch は無い) 24.04.4 LTS (Noble Numbat)
VERSION_CODENAME 小文字のコードネーム。apt のリポジトリ設定などに使う 任意(Fedora は空、RHEL 系は無い) noble
VARIANT / VARIANT_ID エディション(Workstation・Server・Container など)の表示名/識別子 任意(Fedora にある) (無し)
BUILD_ID インストール時のイメージを識別する文字列。ローリングリリースで使う 任意(Arch は rolling) (無し)
CPE_NAME NIST の CPE 名。脆弱性情報との照合に使う 任意(RHEL 系・Fedora・AL2023 にある) (無し)
SUPPORT_END サポート終了日(YYYY-MM-DD。その日からサポート対象外) 任意(Rocky・AlmaLinux・AL2023・Fedora にある) (無し)
HOME_URL など *_URL 公式サイト・ドキュメント・サポート・バグ報告・プライバシーポリシーの URL 任意 https://www.ubuntu.com/ ほか
LOGO / ANSI_COLOR アイコン名/端末で OS 名を表示するときの色 任意 ubuntu-logo /(無し)
VENDOR_NAME / VENDOR_URL OS を作っている組織の名前と URL 任意(RHEL 10・AlmaLinux 10・AL2023 にある) (無し)

仕様の「Notes」には、スクリプトでの判定には ID と VERSION_ID(ID_LIKE を ID の代替に)、人への表示には PRETTY_NAME を使うと明記されています。UBUNTU_CODENAME(Ubuntu)、PLATFORM_ID・REDHAT_SUPPORT_PRODUCT(RHEL 系)、DEBIAN_VERSION_FULL(Debian 13)のように、ディストリビューション独自の項目が足されていることもあります。

必要な行だけ取り出す

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

値だけが欲しいときは、ファイルをシェルに読み込ませます。丸かっこで囲むとサブシェルの中だけで読み込まれ、今のシェルの NAME や VERSION などの変数を上書きしません。

( . /etc/os-release; echo "$ID $VERSION_ID $VERSION_CODENAME" )
awk -F= '$1=="VERSION_ID"{gsub(/"/,"",$2);print $2}' /etc/os-release
sed -n 's/^ID=//p' /etc/os-release
grep -oP '^PRETTY_NAME="\K[^"]+' /etc/os-release
ubuntu 24.04 noble
24.04
ubuntu
Ubuntu 24.04.4 LTS

実体は /usr/lib/os-release(読む順番)

ls -l /etc/os-release /usr/lib/os-release
lrwxrwxrwx 1 root root  21 Feb  6  2026 /etc/os-release -> ../usr/lib/os-release
-rw-r--r-- 1 root root 400 Feb  6  2026 /usr/lib/os-release

仕様では、/etc/os-release があればそれだけを使い、無いときだけ /usr/lib/os-release を読む(両方を混ぜない)と決まっています。ベンダーが置く本体は /usr/lib/os-release で、/etc/os-release は互換のための相対シンボリックリンクです。Ubuntu では base-files パッケージが /usr/lib/os-release を置いています(dpkg -S /usr/lib/os-release の結果は base-files: /usr/lib/os-release)。

ディストリビューション別の出力(Ubuntu・Debian・RHEL・CentOS ほか)

主要なディストリビューションの /etc/os-release の値です。Ubuntu 24.04 は手元の実行結果、それ以外は公開イメージの os-release を集めた GitHub リポジトリ(chef/os_release)と各社のドキュメントで確かめた値です。

ディストリビューション ID ID_LIKE VERSION_ID PRETTY_NAME
Ubuntu 24.04 LTS ubuntu debian 24.04 Ubuntu 24.04.4 LTS
Debian 13 debian (無し) 13 Debian GNU/Linux 13 (trixie)
RHEL 9.6 rhel fedora 9.6 Red Hat Enterprise Linux 9.6 (Plow)
RHEL 10.0 rhel centos fedora 10.0 Red Hat Enterprise Linux 10.0 (Coughlan)
Rocky Linux 9.3 rocky rhel centos fedora 9.3 Rocky Linux 9.3 (Blue Onyx)
AlmaLinux 9.6 / 10.0 almalinux rhel centos fedora 9.6 / 10.0 AlmaLinux 9.6 (Sage Margay) / AlmaLinux 10.0 (Purple Lion)
CentOS Stream 9 centos rhel fedora 9 CentOS Stream 9
CentOS Linux 7 centos rhel fedora 7 CentOS Linux 7 (Core)
Amazon Linux 2023 amzn fedora 2023 Amazon Linux 2023.8.20250915
Amazon Linux 2 amzn centos rhel fedora 2 Amazon Linux 2
Fedora 43 fedora (無し) 43 Fedora Linux 43 (Container Image)
openSUSE Leap 16.0 opensuse-leap suse opensuse 16.0 openSUSE Leap 16.0
Alpine Linux 3.22 alpine (無し) 3.22.1 Alpine Linux v3.22
Arch Linux arch (無し) (無し。BUILD_ID=rolling) Arch Linux

この表から分かることが3つあります。

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

Ubuntu のバージョン確認

Ubuntu には /etc/os-release のほかに、lsb_release と /etc/lsb-release があります。

lsb_release -a
cat /etc/lsb-release
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.4 LTS
Release:    24.04
Codename:   noble
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.4 LTS"
知りたいこと 見る場所 24.04 の値
版(24.04) VERSION_ID、lsb_release -rs 24.04
ポイントリリース(.4) VERSION、PRETTY_NAME、lsb_release -ds 24.04.4 LTS (Noble Numbat)
コードネーム VERSION_CODENAME、lsb_release -cs noble
LTS かどうか VERSION に LTS が付く LTS

/etc/debian_version は Ubuntu の版ではありません。 Ubuntu 24.04 では trixie/sid と表示され、これはもとになった Debian の系列名です。

cat /etc/debian_version
trixie/sid

Ubuntu のカーネルは、同じ 24.04 でもインストール時期や HWE(Hardware Enablement)の有無で版が変わります。Ubuntu のカーネルライフサイクルのページでは、24.04 の GA カーネルは 6.8、24.04.4 の HWE カーネルは 6.17、24.04.5 の HWE は 7.0 です。OS の版だけでなく uname -r も控えておくと、問い合わせのときに食い違いが起きません。パッケージ側の操作は関連記事「aptコマンド一覧|updateとupgradeの違い・apt-getとの違い」で扱っています。

Debian のバージョン確認

Debian 13(trixie)の os-release は次の形です。ID_LIKE は無く、Debian 13 からは DEBIAN_VERSION_FULL にポイントリリースまでの番号が入ります。

PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.1
ID=debian

VERSION_ID は 13 のように大きな版だけで、ポイントリリース(13.1)は DEBIAN_VERSION_FULL か /etc/debian_version で見ます。Debian 13 のカーネルは 6.12 系です(Debian 13 リリースノート)。

RHEL・Rocky Linux・AlmaLinux・CentOS のバージョン確認

RHEL 系は /etc/os-release に加えて、1行だけの /etc/redhat-release があります(/etc/system-release は同じ内容へのリンク。Rocky には /etc/rocky-release、AlmaLinux には /etc/almalinux-release、CentOS には /etc/centos-release もあります)。

cat /etc/os-release
cat /etc/redhat-release
rpm -q redhat-release   # Rocky は rocky-release、AlmaLinux は almalinux-release

RHEL 9.6 の os-release(抜粋):

NAME="Red Hat Enterprise Linux"
VERSION="9.6 (Plow)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="9.6"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Red Hat Enterprise Linux 9.6 (Plow)"
CPE_NAME="cpe:/o:redhat:enterprise_linux:9::baseos"

Rocky Linux 9.3 の os-release(抜粋)。ID_LIKE に rhel が入り、SUPPORT_END でサポート終了日が分かります。

NAME="Rocky Linux"
VERSION="9.3 (Blue Onyx)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Rocky Linux 9.3 (Blue Onyx)"
SUPPORT_END="2032-05-31"

/etc/redhat-release は、同じ RHEL 9 系でもディストリビューションごとに書き方が違います。 とくに CentOS Stream にはマイナー版(9.6 のような番号)が無く、os-release の VERSION_ID も 9 だけです。

ディストリビューション /etc/redhat-release の形(ドキュメント) VERSION_ID
RHEL 9.6 Red Hat Enterprise Linux release 9.6 (Plow) 9.6
Rocky Linux 9.3 Rocky Linux release 9.3 (Blue Onyx) 9.3
AlmaLinux 9.6 AlmaLinux release 9.6 (Sage Margay) 9.6
CentOS Stream 9 CentOS Stream release 9(マイナー版なし) 9
CentOS Linux 7.9 CentOS Linux release 7.9.2009 (Core) 7

PLATFORM_ID="platform:el9" は RHEL 9 互換であることを示す項目で、Rocky・AlmaLinux・CentOS Stream・RHEL で共通です。「el9 向けのパッケージが入るか」を判定するならこの値が使えます。RHEL 9 では lsb_release が使えません(後述)。

Amazon Linux 2023(EC2)のバージョン確認

AWS のドキュメントに載っている AL2023 の os-release は次のとおりです(抜粋)。PRETTY_NAME の末尾がリリース日(2023.8.20250721 の形)で、SUPPORT_END にサポート終了日が入ります。

NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023.8.20250721"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
SUPPORT_END="2029-06-30"

AWS のドキュメントでは、AL2023 かどうかは ID(amzn)と VERSION_ID(2023。AL2 は 2、Amazon Linux AMI は 2018.03 のような日付)で判定するとされています。AL2023 には /etc/system-release と、それへのリンクである /etc/amazon-linux-release があり、このファイルの存在だけで Amazon Linux と分かります。lsb_release コマンドと system-lsb-core パッケージは AL2023 には含まれません。カーネルは kernel.org の LTS から選ばれ、6.1・6.12・6.18 の系列が提供されています。

Fedora・openSUSE・Alpine・Arch Linux のバージョン確認

ディストリビューション os-release の特徴 固有のファイル・コマンド
Fedora 43 VARIANT="Container Image"・VARIANT_ID=container でエディションが分かる。RELEASE_TYPE=stable、SUPPORT_END=2026-12-02 あり /etc/fedora-release、rpm -q fedora-release
openSUSE Leap 16.0 ID="opensuse-leap"、ID_LIKE="suse opensuse"。SDB では cat /usr/lib/os-release を案内 rpm -q openSUSE-release
Alpine Linux 3.22 ID=alpine、VERSION_ID=3.22.1、PRETTY_NAME="Alpine Linux v3.22"。VERSION・ID_LIKE・VERSION_CODENAME は無い /etc/alpine-release(3.22.1 の1行)
Arch Linux ID=arch、BUILD_ID=rolling。版番号は無く、公式 Docker イメージはビルド時に VERSION_ID(作成日ベース)を書き足す pacman -Q linux でカーネルパッケージの版

openSUSE の SDB は、openSUSE か SUSE 系かを見分けるには ID ではなく ID_LIKE を使うことを勧めています。Alpine は glibc ではなく musl を使うため、ldd --version の表示も glibc とは異なります(musl の版は apk list --installed musl で分かります)。

カーネルのバージョン確認:uname -r と uname -a

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

uname の全オプションと出力

オプション 長い形 表示するもの 確認環境の出力
(なし)/-s --kernel-name カーネル名 Linux
-n --nodename ホスト名 vm
-r --kernel-release カーネルのリリース(いわゆる版) 6.18.44-fc-v139
-v --kernel-version カーネルのビルド番号・日時 #1 SMP PREEMPT_DYNAMIC @0
-m --machine ハードウェア名(CPU アーキテクチャ) x86_64
-p --processor プロセッサの種類(環境により unknown) x86_64
-i --hardware-platform ハードウェアプラットフォーム(同上) x86_64
-o --operating-system OS の種類 GNU/Linux
-a --all 上のすべてを -s -n -r -v -m -p -i -o の順に 下の出力
uname -a
Linux vm 6.18.44-fc-v139 #1 SMP PREEMPT_DYNAMIC @0 x86_64 x86_64 x86_64 GNU/Linux

uname --help(coreutils 9.4)では、-a は「-p と -i が unknown のときはそれらを省いて」全項目を表示すると説明されています。uname -a の出力には Ubuntu のようなディストリビューション名は含まれません(ビルド情報にディストリビューション名が入る環境もありますが、決まりではありません)。ディストリビューションは /etc/os-release で見ます。

カーネルの版の読み方(6.18.44 とは何か)

uname -r の文字列は「kernel.org の版」と「ディストリビューションが付けた枝番」に分かれます。kernel.org の説明では、ダッシュ(-)より後ろに何か付いていれば、それはディストリビューション(またはビルドした人)のカーネルです。

部分 例 6.18.44-fc-v139 意味
メジャー.マイナー 6.18 kernel.org の系列。9〜10週ごとに新しい mainline が出る
パッチレベル 44 その系列の stable/longterm の修正版の回数
ダッシュ以降 -fc-v139 ビルド側が付けた文字列(Ubuntu なら ABI 番号と種類)

主なディストリビューションの uname -r の形です(Ubuntu の形は Ubuntu Kernel FAQ、RHEL は Red Hat のリリース一覧、WSL2 は Microsoft のカーネルソースの設定で確かめました)。

環境 uname -r の形 読み方
Ubuntu 24.04 6.8.0-45-generic 6.8.0 が基になる版、45 が ABI 番号、generic が種類(flavour)。パッケージ版は 6.8.0-45.45 のように upload 番号が付く
RHEL 9.6 5.14.0-570.12.1.el9_6.x86_64 5.14.0 が基になる版、570.12.1 が Red Hat のビルド番号、el9_6 が RHEL 9.6
RHEL 10.0 6.12.0-55.9.1.el10_0.x86_64 同上。el10_0 が RHEL 10.0
Amazon Linux 2023 6.1.x-x.x.amzn2023.x86_64 など amzn2023 が AL2023 向けのビルド。6.1・6.12・6.18 の系列がある
WSL2 6.18.54.1-microsoft-standard-WSL2 Microsoft の設定 CONFIG_LOCALVERSION="-microsoft-standard-WSL2" が末尾に付く

kernel.org の 2026年10月15日時点の系列は、mainline 7.3-rc7、stable 7.2.11、longterm 6.18・6.12・6.6・6.1・5.15・5.10 です(7.0 は 6.19 の次の版です)。longterm の保守予定は 6.18 と 6.12 が 2028年12月、6.6 と 6.1 が 2027年12月、5.15 と 5.10 が 2026年12月までです。ただし、ディストリビューションのカーネル(RHEL の 5.14.0 など)は kernel.org とは別にベンダーが保守しているため、kernel.org の終了日はそのまま当てはまりません。

/proc/version と /proc/sys/kernel/osrelease

uname コマンドが入っていない最小構成の環境でも、/proc を読めばカーネルの版が分かります。

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

/proc/version には、uname -r と uname -v に加えて、ビルドしたユーザーとコンパイラの版が入ります。

lsb_release の使い方と「command not found」のとき

lsb_release の出力とオプション

lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.4 LTS
Release:    24.04
Codename:   noble
オプション 意味 Ubuntu 24.04 の出力
-a 全項目 上の4行
-d Description Description: Ubuntu 24.04.4 LTS
-r Release Release: 24.04
-c Codename Codename: noble
-i Distributor ID Distributor ID: Ubuntu
-s ラベルを付けず値だけ(他と組み合わせる) lsb_release -rs → 24.04

lsb_release -cs は、apt のリポジトリ設定($(lsb_release -cs) でコードネームを埋める書き方)でよく登場します。Ubuntu 24.04 の lsb_release は、出力先が端末のときだけ No LSB modules are available. を標準エラー出力に出します(スクリプトから使うときは出ません)。

lsb_release の入れ方と、入らない環境

lsb_release は Ubuntu では lsb-release パッケージのコマンドです(dpkg -S /usr/bin/lsb_release の結果は lsb-release: /usr/bin/lsb_release)。最小構成のコンテナイメージや RHEL 系では入っていないことがあり、そのときは次の表示になります。

bash: lsb_release: command not found
環境 入れ方 備考
Debian / Ubuntu sudo apt install lsb-release Ubuntu の通常インストールには最初から入っている
RHEL 8 / CentOS 8 系 sudo dnf install redhat-lsb-core LSB 関連のパッケージ
RHEL 9 以降 / Rocky 9 / AlmaLinux 9 提供されていない Red Hat の RHEL 9 導入ガイドに「lsb-release バイナリーは redhat-lsb パッケージに含まれていたが RHEL 9 では削除された」とある
Amazon Linux 2023 提供されていない AWS のドキュメントに「lsb_release も system-lsb-core も含まれない」とある

os-release での代替(パッケージを足さずに同じ値を得る)

lsb_release の書き方 os-release での代替 Ubuntu 24.04 の結果
lsb_release -is . /etc/os-release; echo "$NAME" 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

Red Hat も AWS も、lsb_release の代わりに /etc/os-release を読む形へ移行することを案内しています。新しく書く手順やスクリプトでは os-release を読む形にしておくと、どのディストリビューションでもそのまま動きます。

hostnamectl でまとめて確認する(systemd の環境)

hostnamectl(引数なし、または hostnamectl status)は、systemd の systemd-hostnamed から OS 名・カーネル・アーキテクチャ・仮想化の種類をまとめて表示します。systemd のソース(hostnamectl.c)で表示される順に並べると次のとおりです。

行 内容 値の元
Static hostname 設定されたホスト名 /etc/hostname
Icon name / Chassis アイコン名/筐体の種類(vm、container、server など) 検出結果
Machine ID / Boot ID マシン ID と今回の起動 ID /etc/machine-id など
Virtualization 仮想化の種類(kvm、docker など) systemd-detect-virt と同じ判定
Operating System OS 名 /etc/os-release の PRETTY_NAME
CPE OS Name / OS Support End CPE 名/サポート終了日(残り日数つき) CPE_NAME、SUPPORT_END
Kernel カーネル名と版 uname -s と uname -r
Architecture アーキテクチャ(x86-64 のようにハイフン表記) uname -m 相当
Hardware Vendor / Hardware Model ハードウェアのベンダーとモデル DMI(SMBIOS)情報
Firmware Version / Firmware Date ファームウェアの版と日付 DMI 情報

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 に切り替えると同じ情報が得られます。systemd そのものの版は systemctl --version で分かります(確認環境の値は systemd 255 (255.4-1ubuntu8.17))。

/etc/issue・/proc/version などの違いと優先順位

バージョンが書いてあるファイルは複数ありますが、役割が違います。

ファイル 中身 役割・由来 使いどころ
/etc/os-release KEY=値 形式の OS 情報 freedesktop.org の仕様。ほぼ全ディストリビューションにある 第一候補。人にもスクリプトにも
/etc/*-release(redhat-release など) 1行の表示名、または独自形式 ディストリビューションごとの旧来のファイル 系統固有の手順書・ツールが読む
/etc/lsb-release DISTRIB_ID= 形式 LSB の仕様。Ubuntu など一部にある 以前の lsb_release の情報源(Ubuntu 24.04 の lsb_release は os-release を読む)
/etc/debian_version Debian の版(Ubuntu では系列名) Debian の base-files Debian でポイントリリースを知る
/etc/issue ログイン前に表示する文字列 getty が表示。\n(ホスト名)などのエスケープを含む 管理者が書き換えることがある
/proc/version 動いているカーネルの版とビルド情報 カーネルが生成 uname が無い環境でカーネルを知る

確認環境(Ubuntu 24.04)での中身です。

cat /etc/issue
cat /etc/issue.net
ls /etc/*release
Ubuntu 24.04.4 LTS \n \l

Ubuntu 24.04.4 LTS
/etc/lsb-release
/etc/os-release

読む順番は、/etc/os-release → /usr/lib/os-release → 系統固有の /etc/*-release → /etc/issue です。/etc/issue は管理者が自由に書き換えられるファイルなので、判定には使いません。どのファイルがあるか分からないときは ls /etc/*release /etc/*version で一覧できます。

スクリプトでOSの版を判定する

POSIX sh の完成形:ID で分岐し、知らない ID は ID_LIKE で判定する

osinfo.sh:

#!/bin/sh
# ディストリビューションを判定して、パッケージ管理コマンドを決める(POSIX sh)
# 使い方: sh osinfo.sh                  … 自分の環境を判定
#         sh osinfo.sh <os-releaseのパス> … 別のファイルで判定だけ試す
f="${1:-}"
if [ -z "$f" ]; then
    if [ -r /etc/os-release ]; then f=/etc/os-release
    elif [ -r /usr/lib/os-release ]; then f=/usr/lib/os-release
    fi
fi
if [ -n "$f" ]; then
    . "$f"
else
    ID=linux; VERSION_ID=unknown
fi

case "$ID" in
    ubuntu|debian)                            FAMILY=debian; PKG=apt-get ;;
    rhel|rocky|almalinux|centos|fedora|amzn)  FAMILY=rhel;   PKG=dnf ;;
    opensuse-leap|opensuse-tumbleweed|sles)   FAMILY=suse;   PKG=zypper ;;
    alpine)                                   FAMILY=alpine; PKG=apk ;;
    arch)                                     FAMILY=arch;   PKG=pacman ;;
    *)  # 知らない ID は ID_LIKE(空白区切り)で系統を判定する
        case " ${ID_LIKE:-} " in
            *" debian "*)            FAMILY=debian; PKG=apt-get ;;
            *" rhel "*|*" fedora "*) FAMILY=rhel;   PKG=dnf ;;
            *" suse "*)              FAMILY=suse;   PKG=zypper ;;
            *)                       FAMILY=unknown; PKG="" ;;
        esac ;;
esac

MAJOR=${VERSION_ID%%.*}
# RHEL 7 系・CentOS 7・Amazon Linux 2 は dnf ではなく yum
if [ "$FAMILY" = rhel ]; then
    case "$ID:$MAJOR" in amzn:2|*:7|*:6) PKG=yum ;; esac
fi

printf 'ID=%s VERSION_ID=%s MAJOR=%s FAMILY=%s PKG=%s\n' \
    "$ID" "${VERSION_ID:-}" "${MAJOR:-}" "$FAMILY" "$PKG"

手元の Ubuntu での実行結果:

ID=ubuntu VERSION_ID=24.04 MAJOR=24 FAMILY=debian PKG=apt-get

判定ロジックは、公開イメージから集めた各ディストリビューションの os-release ファイル(GitHub の chef/os_release)を引数に渡して確かめました。

読み込ませた os-release 実行結果
Debian 13 ID=debian VERSION_ID=13 MAJOR=13 FAMILY=debian PKG=apt-get
RHEL 10.0 ID=rhel VERSION_ID=10.0 MAJOR=10 FAMILY=rhel PKG=dnf
Rocky Linux 9.3 ID=rocky VERSION_ID=9.3 MAJOR=9 FAMILY=rhel PKG=dnf
CentOS Stream 9 ID=centos VERSION_ID=9 MAJOR=9 FAMILY=rhel PKG=dnf
CentOS Linux 7 ID=centos VERSION_ID=7 MAJOR=7 FAMILY=rhel PKG=yum
Amazon Linux 2 ID=amzn VERSION_ID=2 MAJOR=2 FAMILY=rhel PKG=yum
Amazon Linux 2023 ID=amzn VERSION_ID=2023 MAJOR=2023 FAMILY=rhel PKG=dnf
openSUSE Leap 16.0 ID=opensuse-leap VERSION_ID=16.0 MAJOR=16 FAMILY=suse PKG=zypper
Alpine 3.22.1 ID=alpine VERSION_ID=3.22.1 MAJOR=3 FAMILY=alpine PKG=apk
Linux Mint 22(ID_LIKE="ubuntu debian") ID=linuxmint VERSION_ID=22 MAJOR=22 FAMILY=debian PKG=apt-get
Raspberry Pi OS 11(ID_LIKE=debian) ID=raspbian VERSION_ID=11 MAJOR=11 FAMILY=debian PKG=apt-get

最後の2行は、case に書いていない linuxmint・raspbian が ID_LIKE によって debian 系と判定された例です。systemd の os-release(5) に載っている公式の例も同じ考え方で、[ "${ID:-linux}" = "debian" ] || [ "${ID_LIKE#*debian*}" != "${ID_LIKE}" ] のように ID と ID_LIKE の両方を見ています。case 文の書き方そのものは関連記事「シェルスクリプトcase文の書き方|複数パターン・ワイルドカード早見表」で扱っています。

bash で版を比較する

24.04 や 9.6 のような文字列は整数として比較できません。メジャー番号だけを取り出すか、sort -V(版番号順の並べ替え)を使います。

. /etc/os-release
if [ "${VERSION_ID%%.*}" -ge 22 ]; then echo "22.04 以上: $VERSION_ID"; fi
req=22.04
if [ "$(printf '%s\n%s\n' "$req" "$VERSION_ID" | sort -V | head -n1)" = "$req" ]; then
    echo "$VERSION_ID >= $req"
fi
dpkg --compare-versions 24.04 ge 22.04 && echo "dpkg: 24.04 ge 22.04"
22.04 以上: 24.04
24.04 >= 22.04
dpkg: 24.04 ge 22.04

dpkg --compare-versions は Debian 系だけで使えます。${VERSION_ID%%.*} のような変数展開は関連記事「bash変数展開の一覧|${var:-default}と文字列の置換・切り出し」で扱っています。

Python:platform.freedesktop_os_release()

Python 3.10 以降には、os-release を辞書として読む platform.freedesktop_os_release() があります(/etc/os-release が無ければ /usr/lib/os-release を読み、どちらも無ければ OSError)。

import platform, os

info = platform.freedesktop_os_release()
ids = [info["ID"]] + info.get("ID_LIKE", "").split()   # 近い順に並ぶ
print("ids:", ids)
print("pretty:", info["PRETTY_NAME"], "/ version_id:", info["VERSION_ID"])
print("kernel:", platform.release())
print("machine:", platform.machine())
print("libc:", platform.libc_ver())
print("uname:", os.uname().sysname, os.uname().release)

実行結果(Python 3.11.15):

ids: ['ubuntu', 'debian']
pretty: Ubuntu 24.04.4 LTS / version_id: 24.04
kernel: 6.18.44-fc-v139
machine: x86_64
libc: ('glibc', '2.39')
uname: Linux 6.18.44-fc-v139

Python のドキュメントも、「NAME・VERSION・VARIANT は表示用。判定には ID・ID_LIKE・VERSION_ID・VARIANT_ID を使う」と書いています。

Ansible:facts で判定する

Ansible は setup モジュール(gather_facts)で os-release と uname を読み、ansible_facts に入れます。

ansible localhost -m setup -a 'filter=ansible_distribution*,ansible_os_family,ansible_kernel,ansible_architecture,ansible_pkg_mgr,ansible_virtualization_type'
localhost | SUCCESS => {
    "ansible_facts": {
        "ansible_architecture": "x86_64",
        "ansible_distribution": "Ubuntu",
        "ansible_distribution_file_parsed": true,
        "ansible_distribution_file_path": "/etc/os-release",
        "ansible_distribution_file_variety": "Debian",
        "ansible_distribution_major_version": "24",
        "ansible_distribution_release": "noble",
        "ansible_distribution_version": "24.04",
        "ansible_kernel": "6.18.44-fc-v139",
        "ansible_os_family": "Debian",
        "ansible_pkg_mgr": "apt",
        "ansible_virtualization_type": "docker"
    },
    "changed": false
}

ansible_distribution_file_path が /etc/os-release になっており、Ansible も同じファイルを読んでいることが分かります。playbook では when で分岐します。

- name: OS の版を facts で確かめる
  hosts: localhost
  gather_facts: true
  tasks:
    - name: 主な facts を表示
      ansible.builtin.debug:
        msg: >-
          {{ ansible_facts['distribution'] }}
          {{ ansible_facts['distribution_version'] }}
          (major={{ ansible_facts['distribution_major_version'] }},
          family={{ ansible_facts['os_family'] }},
          kernel={{ ansible_facts['kernel'] }},
          arch={{ ansible_facts['architecture'] }},
          pkg_mgr={{ ansible_facts['pkg_mgr'] }})

    - name: Debian 系なら apt の処理
      ansible.builtin.debug:
        msg: "apt を使う"
      when: ansible_facts['os_family'] == 'Debian'

    - name: RHEL 系の 9 以上なら dnf の処理
      ansible.builtin.debug:
        msg: "dnf を使う"
      when:
        - ansible_facts['os_family'] == 'RedHat'
        - ansible_facts['distribution_major_version'] | int >= 9

実行結果(ansible-core 2.19.14):

TASK [主な facts を表示] *******************************************************
ok: [localhost] => {
    "msg": "Ubuntu 24.04 (major=24, family=Debian, kernel=6.18.44-fc-v139, arch=x86_64, pkg_mgr=apt)"
}

TASK [Debian 系なら apt の処理] ************************************************
ok: [localhost] => {
    "msg": "apt を使う"
}

TASK [RHEL 系の 9 以上なら dnf の処理] *****************************************
skipping: [localhost]

distribution_major_version は文字列なので、数値比較には | int を付けます。os_family は Ubuntu なら Debian、Rocky や AlmaLinux なら RedHat にまとめられるため、ID_LIKE と同じ役割を果たします。playbook の基本は関連記事「Ansible入門|playbookの書き方を実行結果つきで解説」で扱っています。

WSL・Docker コンテナ・EC2・仮想マシンで確かめるときの注意

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

コンテナはホストのカーネルを共有して動くため、コンテナの中の uname -r はホストの値になります。この記事の確認環境がまさにその状態で、Ubuntu 24.04 のコンテナなのに Ubuntu のカーネルパッケージは1つも入っておらず、uname -r はホスト側のカーネル(6.18.44-fc-v139)を返しています。

systemd-detect-virt        # 最も内側の仮想化
systemd-detect-virt -c     # コンテナだけを判定
systemd-detect-virt -v     # 仮想マシンだけを判定
uname -r
dpkg -l 'linux-image*'
grep PRETTY_NAME /etc/os-release
docker
docker
kvm
6.18.44-fc-v139
dpkg-query: no packages found matching linux-image*
PRETTY_NAME="Ubuntu 24.04.4 LTS"
調べるもの コンテナの中で見える値
uname -r、/proc/version ホストのカーネル
/etc/os-release コンテナイメージのディストリビューション(最小構成のイメージには無いこともある)
hostnamectl systemd が PID 1 でないため動かない
systemd-detect-virt docker・podman・lxc などコンテナの種類。-v を付けると外側の仮想マシンの種類
/.dockerenv、/run/.containerenv Docker/Podman が置く目印のファイル(確認環境にはどちらも無く、/run/systemd/container の docker から判定された)

「Ubuntu 22.04 のホストで Alpine のコンテナを動かす」という組み合わせでは、/etc/os-release は Alpine、uname -r は Ubuntu のカーネルという結果になります。コンテナの中でパッケージを入れるときは os-release、カーネルの機能や脆弱性に関わる調査ではホスト側の値を見ると分けて考えると整理できます。Docker 側の操作は関連記事「Dockerコマンド早見表|よく使う操作とつながらない時の対処」で扱っています。

WSL:ディストリビューションは自分で選んだもの、カーネルは Microsoft のもの

WSL2 では、cat /etc/os-release はインストールしたディストリビューション(Ubuntu など)の内容、uname -r は Microsoft がビルドしたカーネルの版になります。Microsoft のカーネルソース(GitHub の microsoft/WSL2-Linux-Kernel)では、既定ブランチ linux-msft-wsl-6.18.y の Makefile が 6.18.54.1、カーネル設定の CONFIG_LOCALVERSION が "-microsoft-standard-WSL2" なので、uname -r は 6.18.54.1-microsoft-standard-WSL2 の形です。複数のディストリビューションを入れても、カーネルはすべて同じものを使います。

知りたいこと 実行する場所 コマンド
WSL の中かどうか Linux 側 grep -qi microsoft /proc/version && echo WSL(systemd-detect-virt は wsl と答える)
ディストリビューションの版 Linux 側 cat /etc/os-release
WSL のカーネルの版 Linux 側 uname -r
WSL 本体・カーネルの版 Windows 側(PowerShell) wsl --version(WSL の各コンポーネントの版)
WSL1 か WSL2 か Windows 側 wsl -l -v(各ディストリビューションの状態と WSL の版)
既定のディストリビューションとカーネル Windows 側 wsl --status
カーネルを更新する Windows 側 wsl --update

systemd のドキュメントでは、WSL は「Linux コンテナではなく、Windows カーネルの上で Linux ユーザー空間を動かす環境」だが、実用上はコンテナとして扱うとされています。環境構築の手順は関連記事「WSL2環境構築|Ubuntu開発環境をコマンドだけで整える手順」で扱っています。

EC2:Amazon Linux の識別とインスタンスの確認

EC2 では OS の版(cat /etc/os-release)に加えて、「本当に EC2 上か」「どのインスタンスか」を確かめたくなることがあります。AWS のドキュメントに載っている方法です。

知りたいこと コマンド 結果の見方
Amazon Linux かどうか ls /etc/amazon-linux-release AL2023 にあるファイル(/etc/system-release へのリンク)
AL2023 / AL2 の区別 . /etc/os-release; echo $VERSION_ID 2023 が AL2023、2 が AL2
EC2 かどうか(Nitro) cat /sys/devices/virtual/dmi/id/board_asset_tag i-0af01c0123456789a のようなインスタンス ID
EC2 かどうか(Xen 世代) cat /sys/hypervisor/uuid 先頭が ec2
システム UUID sudo dmidecode --string system-uuid 先頭が EC2(リトルエンディアンの環境では一致しないことがある)
インスタンス ID(IMDSv2) TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") のあと curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id インスタンス ID

systemd-detect-virt -v は、EC2 の Nitro 世代では amazon、KVM 系では kvm と答えます(systemd-detect-virt(1) の一覧)。接続の方法は関連記事「Session ManagerでEC2に接続する方法|SSH鍵なしの手順」で扱っています。

仮想マシンか物理マシンかを見分ける

方法 コマンド 確認環境の出力
systemd の判定 systemd-detect-virt -v kvm
CPU フラグ grep -o -m1 -w hypervisor /proc/cpuinfo hypervisor(仮想マシン上で立つフラグ)
lscpu lscpu | grep -i hypervisor Hypervisor vendor: KVM
DMI(SMBIOS) cat /sys/class/dmi/id/product_name または sudo dmidecode -s system-product-name 仮想化製品名(KVM、VMware Virtual Platform など。コンテナの中では /sys/class/dmi 自体が無いことがある)

systemd-detect-virt(引数なし)は「最も内側」の仮想化だけを答えます。コンテナを仮想マシン上で動かしている場合は docker のようにコンテナ側が返るので、外側の仮想マシンを知りたいときは -v を付けます。

アーキテクチャ・glibc・シェル・パッケージの版を確かめる

OS とカーネルの版が分かったあと、バイナリの配布ページや手順書を選ぶときに合わせて必要になる情報です。

CPU アーキテクチャと 32bit/64bit

uname -m
arch
getconf LONG_BIT
dpkg --print-architecture
x86_64
x86_64
64
amd64
uname -m の値 意味 配布ページでよく見る表記
x86_64 Intel / AMD の 64bit amd64、x64
aarch64 ARM の 64bit(Graviton、Apple シリコン上の VM、Raspberry Pi 4 以降の 64bit OS) arm64
armv7l ARM の 32bit armhf
i686 Intel / AMD の 32bit i386、x86

x86_64 と amd64、aarch64 と arm64 は同じものの別名です。Debian 系のパッケージ名では dpkg --print-architecture の表記(amd64)が使われます。

glibc・シェル・主要コマンドの版

知りたいこと コマンド 確認環境の出力
glibc の版 ldd --version | head -1 ldd (Ubuntu GLIBC 2.39-0ubuntu8.7) 2.39
glibc の版(短く) getconf GNU_LIBC_VERSION glibc 2.39
今動いているシェル ps -p $$ -o comm= zsh
ログインシェルの設定 echo $SHELL /usr/bin/zsh
bash の版 bash --version | head -1 GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
zsh の版 zsh --version zsh 5.9 (x86_64-ubuntu-linux-gnu)
/bin/sh の実体 readlink -f /bin/sh /usr/bin/dash
OpenSSL の版 openssl version OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
Python の版 python3 --version Python 3.11.15

$SHELL はログインシェルの設定値で、今のシェルとは限りません(確認環境では一致しています)。Ubuntu の /bin/sh は bash ではなく dash なので、#!/bin/sh のスクリプトでは bash 独自の書き方が使えません。シェルの設定ファイルは関連記事「Linux環境変数PATHの設定方法|exportと.bashrcの使い分け早見表」で扱っています。

パッケージの版

系統 コマンド 確認環境の出力(Ubuntu)
Debian / Ubuntu dpkg -l bash ii bash 5.2.21-2ubuntu4 amd64 GNU Bourne Again SHell
Debian / Ubuntu(版だけ) dpkg-query -W -f='${Version}\n' bash 5.2.21-2ubuntu4
Debian / Ubuntu(入手できる版も) apt policy bash Installed: 5.2.21-2ubuntu4 / Candidate: 5.2.21-2ubuntu4
RHEL 系 rpm -q bash、dnf list installed bash (RHEL 系で使う)
Alpine apk list --installed bash (Alpine で使う)
Arch Linux pacman -Q bash (Arch で使う)

5.2.21-2ubuntu4 の 5.2.21 が bash 本体の版、2ubuntu4 が Ubuntu 側のパッケージ更新番号です。入っているカーネルパッケージは Ubuntu なら dpkg -l 'linux-image*'、RHEL 系なら rpm -q kernel で一覧でき、uname -r と見比べると「更新したが再起動していない」状態が分かります。

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

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

grep PRETTY_NAME /etc/os-release
uname -srm
getconf LONG_BIT
systemd-detect-virt
PRETTY_NAME="Ubuntu 24.04.4 LTS"
Linux 6.18.44-fc-v139 x86_64
64
docker

ネットワークの障害では、これに加えて IP アドレスやポートの状態を求められます。関連記事「Linuxネットワークコマンド一覧|ip/ss/ncで障害切り分け」で扱っています。

よくある落とし穴(症状 → 原因 → 対処)

症状・状況 原因 対処
uname -a に Ubuntu などの名前が出ない uname はカーネルの情報だけを返す cat /etc/os-release を見る
lsb_release: command not found lsb-release パッケージが無い。RHEL 9 以降と AL2023 では提供されない cat /etc/os-release、または apt install lsb-release
System has not been booted with systemd as init system (PID 1) hostnamectl は systemd が必要。コンテナの中など cat /etc/os-release と uname -r
cat: /etc/os-release: No such file or directory 最小構成のイメージ、または極端に前の版の OS /usr/lib/os-release、ls /etc/*release、/etc/issue の順に探す
uname: not found 最小構成のイメージに coreutils が無い cat /proc/version、cat /proc/sys/kernel/osrelease
コンテナ内の uname -r がイメージの OS と合わない コンテナはホストのカーネルを共有する 仕様どおり。ディストリビューションは os-release、カーネルはホストで確認
/etc/redhat-release に 9.6 のような番号が無い CentOS Stream にはマイナー版が無い(CentOS Stream release 9) VERSION_ID は 9。細かい版は rpm -q centos-stream-release や dnf の更新日で見る
/etc/debian_version が trixie/sid Ubuntu では基になった Debian の系列名が入る Ubuntu の版は os-release か lsb_release
更新したのに uname -r が変わらない 新しいカーネルは再起動後に有効になる dpkg -l 'linux-image*'(RHEL 系は rpm -q kernel)で入っている版を見て、再起動
VERSION_ID を数値比較するとエラー 24.04 や 9.6 は整数ではない ${VERSION_ID%%.*} でメジャー番号だけ取り出す、または sort -V
. /etc/os-release のあと $NAME や $VERSION が変わった os-release が NAME・VERSION などを定義する サブシェル ( . /etc/os-release; ... ) の中で読む
ID_LIKE が無くて ${ID_LIKE} でエラー(set -u のとき) Debian・Alpine・Fedora などは ID_LIKE を持たない ${ID_LIKE:-} で空文字を既定にする

よくある質問

Q. Linux のバージョン確認は何を打てばよいですか? A. OS(ディストリビューション)は cat /etc/os-release、カーネルは uname -r です。1行で欲しければ grep PRETTY_NAME /etc/os-release が使えます。冒頭の早見表に目的別のコマンドをまとめています。

Q. uname とは何ですか? uname -a の見方は? A. 動いているカーネルの情報を表示するコマンドです。uname -a は「カーネル名 ホスト名 リリース ビルド情報 マシン プロセッサ プラットフォーム OS」の順で、uname -r がカーネルの版です。ディストリビューション名は出ません。全オプションは「uname の全オプションと出力」の表にあります。

Q. Linux kernel のバージョン確認は? A. uname -r です。uname が無い環境では cat /proc/version か cat /proc/sys/kernel/osrelease で分かります。6.18.44-fc-v139 なら、6.18 が kernel.org の系列、44 が修正版の回数、ダッシュ以降がビルド側の文字列です。

Q. Ubuntu のバージョン確認は? A. lsb_release -a または cat /etc/os-release です。24.04 が版、24.04.4 がポイントリリース、noble がコードネームです。/etc/debian_version は Ubuntu の版ではありません。

Q. CentOS のバージョン確認は? A. cat /etc/redhat-release(または /etc/centos-release)と cat /etc/os-release です。CentOS Linux 7 は CentOS Linux release 7.9.2009 (Core) のようにマイナー版まで出ますが、CentOS Stream は CentOS Stream release 9 のように大きな版だけです。

Q. cat /etc/os-release の PRETTY_NAME とは? A. 人に見せるための OS の表示名です(Ubuntu 24.04.4 LTS など)。報告や問い合わせにはこの値を貼り、スクリプトの判定には ID と VERSION_ID を使います。

Q. lsb_release が command not found になります。 A. lsb-release パッケージが入っていない状態です。Debian/Ubuntu なら sudo apt install lsb-release で入ります。RHEL 9 以降と Amazon Linux 2023 では提供されていないので、cat /etc/os-release で同じ値を取ります(対応表は「os-release での代替」)。

Q. hostnamectl で OS のバージョンは分かりますか? A. systemd が動いている環境なら、Operating System の行に /etc/os-release の PRETTY_NAME、Kernel の行に uname -r が出ます。コンテナの中などでは System has not been booted with systemd になるので、元の2つのコマンドを使います。

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

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

Q. top コマンドで Ubuntu の版は分かりますか? A. top は CPU・メモリ・プロセスの状態を表示するコマンドで、OS の版は出ません。版は cat /etc/os-release で確認します。top の見方は関連記事「Linux topコマンドの見方 全項目の意味と操作キー早見表」で扱っています。

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

まとめ

  • ディストリビューションは cat /etc/os-release、カーネルは uname -r。この2つは別のものを指す
  • 人に伝えるときは PRETTY_NAME、スクリプトでは ID と VERSION_ID。知らない ID は ID_LIKE で系統を判定する
  • /etc/os-release が無ければ /usr/lib/os-release、次に /etc/*-release、/etc/issue の順。uname が無ければ /proc/version
  • lsb_release は RHEL 9 以降と Amazon Linux 2023 には無い。os-release を読めば同じ値が取れる
  • uname -r のダッシュ以降はディストリビューションが付けた文字列。Ubuntu は -45-generic、RHEL は .el9_6、WSL2 は -microsoft-standard-WSL2
  • コンテナの中の uname -r はホストのカーネル。systemd-detect-virt(-c/-v)でコンテナか仮想マシンかを見分けられる
  • /etc/redhat-release は CentOS Stream にマイナー版が無いなど、同じ RHEL 系でも書き方が違う。判定は ID・VERSION_ID・PLATFORM_ID で

参考・出典

確認日はいずれも 2026年10月16日です。

  • systemd os-release(5) のソース(systemd/systemd の man/os-release.xml と check-os-release.sh):https://github.com/systemd/systemd/blob/main/man/os-release.xml
  • systemd hostnamectl のソース(表示項目):https://github.com/systemd/systemd/blob/main/src/hostname/hostnamectl.c
  • systemd systemd-detect-virt(1) のソース(判定される仮想化の一覧):https://github.com/systemd/systemd/blob/main/man/systemd-detect-virt.xml
  • GNU coreutils uname:https://www.gnu.org/software/coreutils/uname
  • 公開イメージの os-release を集めたリポジトリ chef/os_release:https://github.com/chef/os_release
  • AWS「Using the os-release standard」(Amazon Linux 2023):https://docs.aws.amazon.com/linux/al2023/ug/ident-os-release.html
  • AWS「Naming and versioning」(Amazon Linux 2023):https://docs.aws.amazon.com/linux/al2023/ug/naming-and-versioning.html
  • AWS「Comparing AL2 and AL2023」(lsb_release が無いこと):https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html
  • AWS「AL2023 kernel changes from AL2」(6.1・6.12・6.18 系列):https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2-kernel.html
  • AWS「Identify EC2 Linux instances」:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify_ec2_instances.html
  • AWS「Retrieve instance metadata」(IMDSv2):https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
  • Red Hat「RHEL 9 の導入における検討事項」22.2 コマンドラインツールの主な変更点(lsb-release の削除):https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/considerations_in_adopting_rhel_9/ref_notable-changes-to-command-line-tools_assembly_shells-and-command-line-tools
  • Red Hat「Red Hat Enterprise Linux Release Dates」(各リリースのカーネル版):https://access.redhat.com/articles/3078
  • Debian 13 リリースノート「What's new」:https://www.debian.org/releases/trixie/release-notes/whats-new.en.html
  • Ubuntu Kernel FAQ「What does a specific Ubuntu kernel version number mean?」:https://wiki.ubuntu.com/Kernel/FAQ/GeneralVersionMeaning
  • Ubuntu kernel lifecycle and enablement stack:https://ubuntu.com/kernel/lifecycle
  • openSUSE SDB:Find openSUSE version:https://en.opensuse.org/SDB:Find_openSUSE_version
  • Alpine Linux Wiki「Alpine Package Keeper」:https://wiki.alpinelinux.org/wiki/Alpine_Package_Keeper
  • archlinux-docker(Dockerfile.template の VERSION_ID 追加):https://github.com/archlinux/archlinux-docker
  • microsoft/WSL2-Linux-Kernel(arch/x86/configs/config-wsl の CONFIG_LOCALVERSION):https://github.com/microsoft/WSL2-Linux-Kernel
  • Microsoft Learn「Basic commands for WSL」:https://learn.microsoft.com/en-us/windows/wsl/basic-commands
  • kernel.org「Releases」(mainline・stable・longterm の説明と保守予定):https://www.kernel.org/category/releases.html
  • Python ドキュメント platform.freedesktop_os_release:https://docs.python.org/3/library/platform.html#platform.freedesktop_os_release

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

(記載例)出典:株式会社RJC「Linuxバージョン確認コマンド|OS別出力とuname・os-release早見表」

株式会社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で一緒に開発しながら、 成長を楽しみませんか?