Linuxのディストリビューション名とバージョンを確認するには/etc/os-releaseを見る。ディストリビューションを問わず使えるため、まず確認するファイルとして適している。

/etc/os-releaseを見る

/etc/os-releaseにはディストリビューション名とバージョンがキーと値の形式で記載されている。

$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
...

名前とバージョンだけ見たい場合はPRETTY_NAMEを取り出す。

$ grep PRETTY_NAME /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"

主なキーの内容は次のとおり。

キー内容
NAMEディストリビューション名
VERSIONバージョン。コードネームを含む場合がある
VERSION_IDバージョン番号のみ
PRETTY_NAME表示用の名前とバージョン
ID小文字のディストリビューション識別子
ID_LIKE派生元のディストリビューション

すべてのreleaseファイルをまとめて見る

ディストリビューションによっては/etc/os-release以外にも独自の-releaseファイルを持つ。/etc/*-releaseをまとめて表示すると、どれかにディストリビューション名とバージョンが含まれる。

$ cat /etc/*-release

ディストリビューションごとに存在するファイルは次のとおり。

ディストリビューション/etc配下の-releaseファイル
Ubuntu 22.04lsb-releaseos-release
Debian 12os-release
Alpine Linux 3.20alpine-releaseos-release
Amazon Linux 2023amazon-linux-releaseos-releasesystem-release
Rocky Linux 9os-releaseredhat-releaserocky-releasesystem-release

複数のファイルが同じ内容を持つ場合、同じ行が繰り返し表示される。Rocky Linux 9ではredhat-releaserocky-releasesystem-releaseの内容が同一のため、末尾に同じ行が3回並ぶ。

$ cat /etc/*-release
NAME="Rocky Linux"
VERSION="9.8 (Blue Onyx)"
...
Rocky Linux release 9.8 (Blue Onyx)
Rocky Linux release 9.8 (Blue Onyx)
Rocky Linux release 9.8 (Blue Onyx)

シェルスクリプトから利用する

/etc/os-releaseキー=値の形式のため、シェルスクリプトで読み込むと変数として扱える。

$ . /etc/os-release
$ echo "$NAME"
Debian GNU/Linux
$ echo "$VERSION_ID"
12

ディストリビューションごとに処理を分ける場合はIDを使う。

. /etc/os-release
case "$ID" in
  debian|ubuntu) apt-get install -y curl ;;
  rocky|amzn) dnf install -y curl ;;
  alpine) apk add curl ;;
esac

主なディストリビューションのIDID_LIKEは次のとおり。IDはディストリビューション名と一致しない場合がある。

ディストリビューションIDID_LIKE
Ubuntu 22.04ubuntudebian
Debian 12debianなし
Alpine Linux 3.20alpineなし
Amazon Linux 2023amznfedora
Rocky Linux 9rockyrhel centos fedora

派生元をまとめて扱う場合はID_LIKEを見る。UbuntuとDebianを区別せず扱うならID_LIKEdebianかどうかで判定できる。

lsb_releaseコマンド

lsb_release -aでもディストリビューション名とバージョンを確認できる。

$ lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.5 LTS
Release:	22.04
Codename:	jammy

ただしlsb_releaseは標準では導入されていない場合がある。Ubuntu 22.04やDebian 12の公式コンテナイメージには含まれておらず、実行するには別途インストールが必要である。

$ apt-get install -y lsb-release

/etc/lsb-releaseファイルとは別物である点にも注意する。Ubuntuにはlsb_releaseコマンドがなくても/etc/lsb-releaseは存在する。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS"

導入状況に左右されないため、/etc/os-releaseを読むほうが確実である。

カーネルのバージョンを確認する

ディストリビューションのバージョンとカーネルのバージョンは別である。カーネルのバージョンはuname -rで確認する。

$ uname -r
6.8.0-50-generic

uname -aではホスト名やアーキテクチャも含めて表示される。

コンテナ内でuname -rを実行するとホスト側のカーネルバージョンが表示される。コンテナはホストのカーネルを共有するためである。コンテナ内のディストリビューションを確認する場合は/etc/os-releaseを見る。