- Linux
Linuxバージョン確認コマンド|OS別出力とuname・os-release早見表
結論
Linux のバージョン確認は、OS なら cat /etc/os-release、カーネルなら uname -r です。コンテナの中の uname -r はホストの値です。
この記事でわかること
- 目的別13パターンの早見表(OS・カーネル・CPU)
- 14ディストリビューションの os-release の値
- sh・bash・Python・Ansible の4通りの版の判定
「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/versionlsb_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期連続の黒字決算。