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

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

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

OS(オペレーティングシステム)の中核をなすのがカーネルです。カーネルは、アプリケーションなどのソフトウェアと、CPU・メモリ・ディスク・ネットワークといったハードウェアとのちょうど境目に立ち、プロセスの実行、メモリの割り当て、デバイスの制御、ファイルシステムの管理といった土台の仕事を一手に引き受けています。私たちが普段使う ls や cp のようなコマンドも、ファイルを読み書きする際には最終的にカーネルへ依頼(システムコール)を出して仕事をしてもらっています。Linux という名前は、厳密にはこのカーネルの名前を指します。そして実務でこのカーネルと向き合う最初の一歩が、『いま動いているカーネルは、どのバージョンなのか』を正確に把握することです。

uname でカーネル情報を確認する

動作中のカーネルの情報を調べる基本コマンドが uname(unix name)です。引数なしで uname とだけ打つと、カーネルの名称である『Linux』としか返ってこないので、実務ではオプションを付けて使います。最もよく使うのが 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ビットか』で処理を分けたいときなどに、必要な一片だけを取り出せて便利です。

/proc/version からも読める

実は同じカーネルの情報は、前のトピックで扱った疑似ファイルシステム /proc からも得られます。cat /proc/version と打つと、『Linux version 4.18.0-425.el8.x86_64 ... (gcc version ...) #1 SMP ...』のように、カーネルのバージョンに加えて、それをコンパイルしたコンパイラ(gcc)のバージョンやビルドされた日時までを含む、より詳しい文字列が表示されます。uname がコマンドとして整形された情報を返すのに対し、/proc/version はカーネルが内部に持っている生の文字列をそのまま見せてくれる、という関係です。どちらを使ってもよく、ツールが限られた環境でも cat 一発で確認できるのが /proc/version の強みです。procfs がカーネル内部ののぞき窓である、という前のトピックの話が、ここでも生きてきます。

バージョンを正確に知ることがなぜ重要か

カーネルのバージョン把握は、単なる確認作業ではなく、いくつもの実務判断の出発点になります。第一に、セキュリティです。重大な脆弱性が公表されたとき、自分のカーネルがその影響を受けるバージョンかどうかを、まずこの番号で照合します。第二に、ドライバやモジュールの互換性です。新しいハードウェアのドライバや、特定のカーネルモジュールは『このカーネルバージョン向け』とビルドされていることが多く、バージョンがずれると動きません——前述の uname -r の値は、ドライバを選ぶ際の合鍵になります。第三に、サポートへの問い合わせやトラブル報告のときに、正確なカーネルバージョンとアーキテクチャを添えることが、的確な回答を得る前提になります。

起動時に何を認識したかは dmesg で追う

カーネルのバージョンと並んで押さえておきたいのが dmesg です。カーネルは起動の過程で、どのデバイスを認識したか、どのドライバを読み込んだか、何かエラーがなかったか、といったメッセージを内部のバッファに書き出していきます。これを後から表示するのが dmesg(diagnostic message)で、起動シーケンスのトピックで触れた『カーネルが何を認識したか』を、ログとして時系列で追跡できます。たとえば新しく挿したUSB機器やディスクがうまく使えないとき、dmesg を見ればカーネルがそのデバイスを検出したのか、検出時にエラーが出たのかが分かります。新しいメッセージを追いかけ続けたいときは dmesg -w(--follow)、人間に読みやすい時刻表示にしたいときは dmesg -T を使うと便利です。

よくある誤解と実務の使いどころ

よくある誤解は、ディストリビューションのバージョン(『MiracleLinux 8』のような表記)とカーネルのバージョンを混同してしまうことです。両者は別物で、同じディストリビューションのバージョンでも、アップデートによってカーネルのバージョンは更新されていきます——OSの版数を確認したいなら /etc/os-release を、カーネルの版数を知りたいなら uname -r を見る、と使い分けます。もうひとつ、uname -r が返すリリース番号と、上流のLinuxカーネル本体のバージョン番号がぴったり一致するとは限らない点も知っておくとよいでしょう。ディストリビューションは独自のパッチを当てて番号を付けることがあるからです。実務では、サーバを触り始めたらまず uname -a で素性を確認する、不具合調査の初動で dmesg にエラーが出ていないか目を通す、脆弱性情報が出たら uname -r で自分の番号と照合する——この3つを習慣にしておくと、カーネルまわりの判断で足をすくわれにくくなります。どれも数秒で済む確認ですが、ドライバの選定もセキュリティ対応もサポートへの問い合わせも、すべてここから始まる、という意味で土台中の土台です。

この項目に出てくる用語

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

関連コマンド

unamecatdmesg

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