🐧 Linux 総合学習プラットフォーム
OS内部/起動の仕組み ・ 上級

カーネルとバージョン確認

OSの中核であるカーネルは、ハードウェアとソフトウェアの間に立ち、メモリ・プロセス・デバイスを管理します。動作中のカーネルの情報は uname で確認でき、uname -r でカーネルのリリース番号、uname -a でアーキテクチャやホスト名を含む全情報をまとめて表示します。同じ情報は /proc/version からも読み取れます。脆弱性対応やドライバの互換性確認、サポート問い合わせの際には、まずこのバージョンを正確に把握することが出発点になります。起動メッセージは dmesg で、カーネルが何を認識したかを後から追跡できます。

OS(オペレーティングシステム)の中核がカーネルだ。カーネルは、アプリケーションなどのソフトウェアと、CPU・メモリ・ディスク・ネットワークといったハードウェアとのちょうど境目に立つ。

そして、プロセスの実行、メモリの割り当て、デバイスの制御、ファイルシステムの管理といった土台の仕事を一手に引き受けている。

アプリ (ls / cp など)カーネル (Linux)プロセス / メモリ / デバイス / ファイルシステムハードウェア (CPU / メモリ / ディスク)systemcall

私たちが普段使う ls や cp のようなコマンドも、ファイルを読み書きする際には最終的にカーネルへ依頼(システムコール)を出して仕事をしてもらっている。Linux という名前は、厳密にはこのカーネルの名前を指す。

実務でこのカーネルと向き合う最初の一歩が、「いま動いているカーネルは、どのバージョンなのか」を正確に把握することだ。

🏷 いま動くカーネルを一行で言い当てる

動作中のカーネルの情報を調べる基本コマンドが uname(unix name)だ。引数なしで uname とだけ打つと、カーネルの名称である「Linux」としか返ってこないので、実務ではオプションを付けて使う。

uname -r で 4.18.0-425.el8.x86_64 のようなリリース番号が返る。末尾の x86_64 は64ビットのIntel/AMD系CPU向けの意味だ。

最もよく使うのが uname -r で、これは 4.18.0-425.el8.x86_64 のようなカーネルのリリース番号(バージョン)を返す。この文字列はカーネルのバージョンそのものに加え、ビルド番号やディストリビューション、対応アーキテクチャまでを含んでいて、たとえば末尾の x86_64 は64ビットのIntel/AMD系CPU向けであることを示す。

すべての情報をまとめて見たいときは uname -a を使う。これはカーネル名・ホスト名・カーネルのリリース・ビルド日時・マシンのアーキテクチャ(x86_64 など)を一行にまとめて出力してくれるので、システムの素性を一望できる。

コツ個別に取りたいときは uname -m(アーキテクチャ)、uname -n(ホスト名)。スクリプトで32/64ビットを分岐するときなどに、必要な一片だけ取り出せる。

個別に取りたい場合は、アーキテクチャだけなら uname -m、ホスト名だけなら uname -n、といったオプションもある。スクリプトの中で「32ビットか64ビットか」で処理を分けたいときなどに、必要な一片だけを取り出せて便利だ。

📖 コマンドを使わずに同じ情報を読む

同じカーネルの情報は、前のトピックで扱った疑似ファイルシステム /proc からも得られる。

cat /proc/version ……Linux version 4.18.0-425.el8.x86_64 ... (gcc version ...) #1 SMP ... のように、コンパイラやビルド日時まで含む生の文字列が出る。

cat /proc/version と打つと、「Linux version 4.18.0-425.el8.x86_64 ... (gcc version ...) #1 SMP ...」のように、カーネルのバージョンに加えて、それをコンパイルしたコンパイラ(gcc)のバージョンやビルドされた日時までを含む、より詳しい文字列が表示される。

🔗
たとえuname は受付が清書してくれた案内札、/proc/version はカーネルが手元に持っている下書きそのもの。同じ中身を別の見せ方で出している。

uname がコマンドとして整形された情報を返すのに対し、/proc/version はカーネルが内部に持っている生の文字列をそのまま見せてくれる、という関係だ。

どちらを使ってもよく、ツールが限られた環境でも cat 一発で確認できるのが /proc/version の強みである。procfs がカーネル内部ののぞき窓である、という前のトピックの話が、ここでも生きてくる。

🔐 たかが番号と侮れない理由

カーネルのバージョン把握は、単なる確認作業ではなく、いくつもの実務判断の出発点になる。

💡
ポイントバージョン番号は、脆弱性の影響有無の照合、ドライバ・モジュールの互換性判断、サポート問い合わせの3つの実務判断の出発点になる。

第一に、セキュリティだ。重大な脆弱性が公表されたとき、自分のカーネルがその影響を受けるバージョンかどうかを、まずこの番号で照合する。

第二に、ドライバやモジュールの互換性だ。新しいハードウェアのドライバや、特定のカーネルモジュールは「このカーネルバージョン向け」とビルドされていることが多く、バージョンがずれると動かない。前述の uname -r の値は、ドライバを選ぶ際の合鍵になる。

第三に、サポートへの問い合わせやトラブル報告のときに、正確なカーネルバージョンとアーキテクチャを添えることが、的確な回答を得る前提になる。番号ひとつが、これだけの判断を支えているわけだ。

🩺 起動時にカーネルが見たものはどこに残るか

カーネルのバージョンと並んで押さえておきたいのが dmesg だ。カーネルは起動の過程で、どのデバイスを認識したか、どのドライバを読み込んだか、何かエラーがなかったか、といったメッセージを内部のバッファに書き出していく。

これを後から表示するのが dmesg(diagnostic message)で、起動シーケンスのトピックで触れた「カーネルが何を認識したか」を、ログとして時系列で追跡できる。

dmesg ……新しく挿したUSB機器やディスクが使えないとき、カーネルがそれを検出したか、検出時にエラーが出たかが分かる。

たとえば新しく挿したUSB機器やディスクがうまく使えないとき、dmesg を見ればカーネルがそのデバイスを検出したのか、検出時にエラーが出たのかが分かる。

コツ新しいメッセージを追い続けるなら dmesg -w(--follow)、人間に読みやすい時刻表示なら dmesg -T が便利だ。

新しいメッセージを追いかけ続けたいときは dmesg -w(--follow)、人間に読みやすい時刻表示にしたいときは dmesg -T を使うと便利だ。

⚠ OSの版数とカーネルの版数を混同しない

つまずきディストリのバージョン(MiracleLinux 8 など)とカーネルのバージョンは別物。OSの版数は /etc/os-release、カーネルの版数は uname -r で見る。

よくある誤解は、ディストリビューションのバージョン(「MiracleLinux 8」のような表記)とカーネルのバージョンを混同してしまうことだ。

両者は別物で、同じディストリビューションのバージョンでも、アップデートによってカーネルのバージョンは更新されていく。OSの版数を確認したいなら /etc/os-release を、カーネルの版数を知りたいなら uname -r を見る、と使い分ける。

もうひとつ、uname -r が返すリリース番号と、上流のLinuxカーネル本体のバージョン番号がぴったり一致するとは限らない点も知っておくとよい。ディストリビューションは独自のパッチを当てて番号を付けることがあるからだ。

実務では、サーバを触り始めたらまず uname -a で素性を確認する、不具合調査の初動で dmesg にエラーが出ていないか目を通す、脆弱性情報が出たら uname -r で自分の番号と照合する。この3つを習慣にしておくと、カーネルまわりの判断で足をすくわれにくくなる。

どれも数秒で済む確認だが、ドライバの選定もセキュリティ対応もサポートへの問い合わせも、すべてここから始まる。土台中の土台だ。

この項目に出てくる用語

カーネルかーねる
OSの中核。ハードウェアとソフトウェアの間に立ち、メモリ・プロセス・デバイスを管理する。
procfs (/proc)ぷろっくえふえす
ディスクに実体を持たない疑似ファイルシステム。カーネルやプロセスの情報をファイルとして見せる。

関連コマンド

unamecatdmesg

▶ 学習アプリでこの続きを学ぶ・演習する