Linuxの/proc/modulesとは?ロードされているカーネルモジュール一覧を確認する方法を徹底解説
生徒
「先生、Linuxのシステムを調べていたら/proc/modulesというファイルを見つけました。これには何が書かれているんですか?」
先生
「それは、今現在のLinuxカーネルに読み込まれている『カーネルモジュール』の一覧が記録されている場所ですよ。」
生徒
「カーネルモジュール(読み方はカーネルモジュール)?なんだか難しそうですね。初心者でも中身を見て大丈夫ですか?」
先生
「もちろんです!システムがどのように動いているかを知るための第一歩になります。中身の読み方や、関連するコマンドについても分かりやすく解説していきますね。」
Linuxを初めて学ぶ人や、 OS・プロセス・メモリ管理・仮想マシン・コンテナの仕組みを図解で理解したい人におすすめの定番書籍です。
試して理解 Linuxのしくみを見る※ Amazonアソシエイト広告リンク
1. /proc/modulesとは何か?
Linux(リナックス)を操作していると、/proc(読み方はプロック)というディレクトリを目にすることがあります。これは「仮想ファイルシステム」と呼ばれ、ハードディスクに保存されている実際のファイルではなく、メモリ上にあるシステムの動的な情報をファイルのような形式で見せてくれる特別な場所です。
その中にある/proc/modulesは、現在カーネル(OSの中核となるソフトウェア)にロードされているカーネルモジュールの一覧を表示するためのファイルです。Windowsでいうところの「デバイスマネージャー」で動作しているドライバーの一覧を確認するようなイメージに近いかもしれません。
このファイルを参照することで、今どのような機能やドライバーがシステムに組み込まれているのかをリアルタイムで把握することができます。Linuxのストレージ管理やネットワーク設定、周辺機器の動作状況を確認する際に非常に重要な役割を果たします。
2. カーネルモジュールの基礎知識
ここで、そもそも「カーネルモジュール(読み方はカーネルモジュール)」とは何かを整理しておきましょう。Linuxカーネルは、コンピュータのハードウェアを制御する司令塔ですが、世の中にある全てのハードウェア(キーボード、マウス、ネットワークカード、グラフィックボードなど)の機能を最初から全て盛り込んでしまうと、カーネルのサイズが巨大になりすぎてしまいます。
そこで、必要なときに、必要な機能だけを後から付け足したり外したりできる仕組みが作られました。この「付け足し可能な部品」がカーネルモジュールです。専門用語ではLKM(Loadable Kernel Module:読み方はローダブル・カーネル・モジュール)とも呼ばれます。
例えば、新しいUSBデバイスを接続したときに、そのデバイスを動かすためのドライバーが自動的に読み込まれるのは、このモジュールの仕組みのおかげです。これにより、OSを再起動することなく機能を拡張できるという大きなメリットがあります。
3. /proc/modulesの中身を確認してみよう
それでは、実際にcat(読み方はキャット)コマンドを使って、/proc/modulesの内容を表示させてみましょう。この操作は一般ユーザーでも実行可能です。ターミナルを開いて以下のコマンドを入力してください。
cat /proc/modules
nls_utf8 16384 1 - Live 0xffffffffc0663000
isofs 49152 1 - Live 0xffffffffc0651000
vboxvideo 36864 1 - Live 0xffffffffc0608000
ttm 106496 1 vboxvideo, Live 0xffffffffc059c000
intel_rapl_msr 20480 0 - Live 0xffffffffc050a000
実行すると、上記のように英単語と数字が並んだリストが表示されます。左から順に「モジュール名」「メモリサイズ(バイト単位)」「使用回数」「依存しているモジュール名」「状態」「メモリアドレス」を意味しています。初めて見ると複雑そうですが、まずは一番左の「名前」に注目するだけで十分です。
4. 表示項目の詳しい見方(各列の意味)
/proc/modulesの各行が何を表しているのか、もう少し詳しく見ていきましょう。システム管理やデバッグを行う際には、これらの情報の意味を知っておくと役立ちます。
| 列番号 | 項目名 | 意味 |
|---|---|---|
| 1列目 | Module | カーネルモジュールの名前(例:nls_utf8) |
| 2列目 | Size | そのモジュールが消費しているメモリのサイズ(バイト) |
| 3列目 | Used by | そのモジュールを現在使用しているインスタンスの数 |
| 4列目 | Referenced by | 依存関係にある他のモジュール名。空の場合は「-」 |
| 5列目 | State | モジュールの状態。通常は「Live(稼働中)」 |
| 6列目 | Address | カーネルメモリ内での開始アドレス(セキュリティ上0になることもある) |
例えば、ネットワーク関係のモジュールであれば、通信を行っている間は「Used by(読み方はユーズド・バイ)」の数値が増えることがあります。また、特定のハードウェアドライバーが動かない場合、ここに名前があるかどうかを確認することで、原因の切り分けができます。
5. lsmodコマンドとの違い
Linuxには、ロードされているモジュールを確認するための専用コマンドとしてlsmod(読み方はエルエスモッド)が用意されています。実は、このlsmodコマンドは、裏側で/proc/modulesの情報を読み取って、人間が見やすいように整形して表示してくれているだけなのです。
lsmod
Module Size Used by
nls_utf8 16384 1
isofs 49152 1
vboxvideo 36864 1
ttm 106496 1 vboxvideo
cat /proc/modulesよりも、項目にラベル(見出し)が付いているため、初心者の方にはlsmodの方が分かりやすいでしょう。どちらを使っても得られる情報は基本的に同じですが、システムの生データ(ソースデータ)がどこにあるのかを知っておくことは、Linuxの理解を深めるために大切です。
6. 特定のモジュールを検索する方法
表示されるモジュールの数は非常に多いため、特定の名前を探すのは大変です。そんな時は、以前学習したかもしれないgrep(読み方はグレップ)コマンドを組み合わせて使いましょう。これを「パイプ(読み方はパイプ)」機能といいます。
例えば、ビデオ(video)関連のモジュールだけを抽出したい場合は以下のように入力します。
cat /proc/modules | grep video
vboxvideo 36864 1 - Live 0xffffffffc0608000
uvcvideo 114688 0 - Live 0xffffffffc04bc000
videobuf2_vmalloc 20480 1 uvcvideo, Live 0xffffffffc04b2000
このように絞り込むことで、目的のドライバーが正しくロードされているかを瞬時に判断できます。もし、接続したデバイスが動かないのに、このリストにも名前がない場合は、モジュールがロードされていない(認識されていない)可能性が高いと分かります。
7. モジュール情報を詳しく調べるmodinfo
/proc/modulesで見つけたモジュールが、具体的にどのような役割を持っているのか(制作者は誰か、どんな説明がされているか)を知りたい時は、modinfo(読み方はモッドインフォ)コマンドを使います。ファイル名ではなくモジュール名を指定します。
modinfo vboxvideo
filename: /lib/modules/5.15.0-generic/kernel/drivers/gpu/drm/vboxvideo/vboxvideo.ko
license: GPL and additional rights
description: Oracle VM VirtualBox Graphics Card
author: Oracle Corporation
このコマンドの結果を見ることで、そのモジュールがどのディレクトリにある「.ko(カーネルオブジェクト)」という拡張子のファイルから読み込まれたのかといった、ストレージ上の場所も特定できます。Linuxのディレクトリ構造(読み方はディレクトリコウゾウ)を学ぶ上でも非常に参考になります。
8. 管理者権限でのモジュール操作
モジュールの確認は一般ユーザーでも可能ですが、モジュールの追加(ロード)や削除(アンロード)には、管理者権限(root:読み方はルート)が必要です。例えば、手動でモジュールを読み込むにはmodprobe(読み方はモッドプローブ)というコマンドを使用します。
modprobe dummy
lsmod | grep dummy
dummy 16384 0
このmodprobeは、指定したモジュールが他のモジュールを必要としている場合(依存関係がある場合)、それらもまとめて自動で読み込んでくれる賢いコマンドです。作業が終わって不要になったモジュールを外す際はrmmod(読み方はアールエムモッド)を使いますが、使用中のモジュールは外せないよう安全策が取られています。
9. システムトラブル時のチェックポイント
パソコンの音が鳴らない、インターネットに繋がらないといったトラブルが起きたとき、Linuxエンジニアはまず/proc/modulesやlsmodを確認します。なぜなら、原因が「ハードウェアの故障」なのか、「OSがドライバーを認識していないだけ」なのかを判断する材料になるからです。
もしリストに該当するモジュールがない場合、設定ファイルに不備があるか、そもそもカーネルがそのハードウェアに対応していないといった推測が立てられます。また、モジュールの「Used by」が異常に増え続けている場合は、メモリリーク(メモリが解放されない不具合)などの発見に繋がることもあります。
初心者のうちは、中身を書き換えようとする必要はありません。まずは「今どんな機能が動いているのかな?」と眺めてみるだけで、LinuxというOSが多くの小さな部品(モジュール)によって支えられていることが実感できるはずです。
LPICレベル1の合格を目指している人や、 Linuxコマンド・シェル・ネットワーク・セキュリティの試験対策を効率よく進めたい人におすすめの定番問題集です。
Linux教科書 LPICレベル1 スピードマスター問題集を見る※ Amazonアソシエイト広告リンク
まとめ
Linuxシステムにおける/proc/modules(読み方はプロック・モジュールズ)の役割と活用方法について、詳しく解説してきました。この仮想ファイルは、現在のシステムで稼働しているカーネルモジュール(読み方はカーネルモジュール)のリアルタイムな状態を映し出す鏡のような存在です。ハードウェア制御を司るデバイスドライバーや、特定の通信プロトコル、ファイルシステムといったLinuxカーネルの拡張機能が、メモリ上でどのように管理されているかを一目で確認できる非常に重要なリソースであることを学びました。
Linuxカーネルモジュール管理の要点
今回の学習内容を振り返り、Linuxを効率的に運用・管理するための重要なポイントを整理しましょう。まず、Linuxカーネルは全ての機能を本体に詰め込むのではなく、LKM(Loadable Kernel Module)という仕組みによって、必要な時に必要な機能だけを動的にロード(読み込み)したり、アンロード(切り離し)したりしています。これにより、カーネルの肥大化を防ぎ、柔軟なシステム構成が可能になっています。
/proc/modulesの役割
メモリ上に存在する仮想的なファイルであり、現在ロードされている全モジュールの名前、メモリサイズ、依存関係、動作状態をプレーンテキスト形式で保持しています。
関連コマンドの使い分け
lsmodは/proc/modulesを読みやすく表示し、modinfoは詳細情報を、modprobeは依存関係を考慮したロードを行います。
システム管理に役立つ実践的なテクニック
Linuxのトラブルシューティングにおいて、ドライバーの認識状況を確認することは基本中の基本です。例えば、新しいネットワークインターフェースを追加した際に、期待通りに動作しない場合は、まず/proc/modulesを確認し、該当するモジュールがリストにあるか、あるいは「Used by(読み方はユーズド・バイ)」が正しくカウントされているかをチェックします。
また、特定のモジュールがどのファイルから読み込まれているかを知るには、modinfoコマンドでパス(場所)を確認し、設定の不備がないかを調査します。これらの知識は、LPIC(エルピック)やLinuC(リナック)といったLinuxの技術者認定試験でも頻出の項目であり、エンジニアとしてのスキルアップには欠かせません。
サンプルコード:モジュール情報の抽出と操作
実際の運用でよく使われる、特定のモジュール情報の抽出や、手動でのロード手順をコマンドラインの例で再度確認してみましょう。
# 指定した文字列(例:usb)を含むモジュールのみを表示
cat /proc/modules | grep usb
# モジュールの詳細な依存関係やライセンス情報を表示
modinfo usbcore
# テスト用のモジュールを読み込み、即座に確認する
sudo modprobe dummy
cat /proc/modules | grep dummy
このように、catコマンドとパイプ、そしてgrepを組み合わせることで、膨大なリストの中から必要な情報だけを素早く見つけ出すことができます。Linuxのファイルシステム構造やコマンド操作に慣れることは、サーバー構築やインフラエンジニアへの近道となります。
生徒
「先生、ありがとうございました!/proc/modulesの中身を見るだけで、自分のパソコンの裏側でどんなドライバーが頑張って動いているのかがよく分かりました。特にlsmodがこのファイルを元に作られているっていうのは驚きでした!」
先生
「そうですね。Linuxの面白いところは、ほとんどのシステム情報が『ファイル』として公開されている点です。中身を知ることで、ブラックボックスだったOSの動きが透明になっていくのを感じられるはずですよ。」
生徒
「はい!トラブルが起きた時も、まずはここを見て『ドライバーはちゃんと読み込まれているかな?』と冷静に確認できそうです。あと、依存関係の列にある他のモジュール名を見て、モジュール同士が助け合って動いているのも発見でした。」
先生
「素晴らしい着眼点ですね。その『依存関係』を自動で処理してくれるmodprobeコマンドもセットで覚えておくと、実務でも非常に役立ちます。これからも、仮想ファイルシステムを通じてLinuxの深淵を探求していきましょう!」
生徒
「頑張ります!次は/procの中にある他のファイル、例えばCPUの情報が見れるcpuinfoなんかも覗いてみたいと思います!」