はじめに
この実験では、Linux で特定のカーネル設定オプションが設定されているかどうかを確認するさまざまな方法を探ります。まず、/proc/config.gz ファイルを調べ、そのファイルが存在する場合は zcat を使用してカーネル設定を解凍して表示します。このファイルには、現在実行中のカーネルをビルドするために使用された設定オプションが含まれています。
/proc/config.gz が利用できない場合は、/boot/ ディレクトリ内のカーネル設定ファイルを確認します。具体的には、config-* という名前のファイルを探します。これにより、カーネル設定を検証する別の方法が提供されます。最後に、dmesg の設定ログを調べます。
zcat /proc/config.gz でカーネル設定を確認する
このステップでは、zcat コマンドと /proc/config.gz ファイルを使用してカーネル設定を確認する方法を探ります。カーネル設定は、カーネルに組み込まれる機能を決定し、それを理解することはデバッグやカスタマイズに役立ちます。
まず、/proc/config.gz が何であるかを理解しましょう。これは、現在実行中のカーネルをビルドするために使用されたカーネル設定オプションを含む gzip 圧縮ファイルです。ただし、カーネルのビルド設定によっては、必ずしも存在しない場合があります。
ファイルが存在するかどうかを確認するには、次のコマンドを使用します。
ls -l /proc/config.gz
ファイルが存在する場合、次のような出力が表示されます。
-r-------- 1 root root [占位符: 文件大小] [占位符: 日期] /proc/config.gz
ファイルが存在しない場合、エラーメッセージが表示されます。
ls: cannot access '/proc/config.gz': No such file or directory
ファイルが存在する場合は、zcat を使用してファイルを解凍し、その内容を表示できます。zcat は、gzip 圧縮ファイルを解凍し、出力を標準出力に表示するコマンドラインユーティリティです。
カーネル設定を表示するには、次のコマンドを実行します。
zcat /proc/config.gz | less
このコマンドは、zcat /proc/config.gz の出力を less コマンドにパイプし、設定ファイルをスクロールできるようにします。
CONFIG_ で始まる長い設定オプションのリストが表示されます。例えば:
CONFIG_POSIX_MQUEUE=y
CONFIG_FHANDLE=y
CONFIG_XFRM=y
CONFIG_XFRM_ALGO=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_INTERFACE=y
CONFIG_INET=y
q を押して less を終了します。
/proc/config.gz が存在しない場合は、次のステップに進み、/boot/config-* を確認する必要があります。
/boot/config-* の設定を検証する
このステップでは、/boot/ ディレクトリ内のカーネル設定ファイルを確認します。これは、カーネル設定が保存されるもう一つの一般的な場所です。ファイル名は通常 config-* となっており、* はカーネルバージョンを表します。
まず、/boot/ ディレクトリ内のファイルを一覧表示して、config-* ファイルが存在するかどうかを確認しましょう。次のコマンドを使用します。
ls -l /boot/config-*
次のような出力が表示される場合があります。
-rw------- 1 root root [占位符: 文件大小] [占位符: 日期] /boot/config-[占位符: kernel version]
config-* ファイルが表示された場合、そのファイルにカーネル設定が保存されていることを意味します。config-* ファイルが表示されない場合、カーネル設定が /boot/ の標準的な場所に保存されていないことを意味します。
config-* ファイルの内容を表示するには、cat コマンドを使用できます。[占位符: kernel version] をファイル名の実際のカーネルバージョンに置き換えます。たとえば、ファイル名が /boot/config-5.15.0-76-generic の場合、コマンドは次のようになります。
cat /boot/config-5.15.0-76-generic | less
このコマンドは、cat /boot/config-[占位符: kernel version] の出力を less コマンドにパイプし、設定ファイルをスクロールできるようにします。
CONFIG_ で始まる長い設定オプションのリストが表示されます。例えば:
CONFIG_POSIX_MQUEUE=y
CONFIG_FHANDLE=y
CONFIG_XFRM=y
CONFIG_XFRM_ALGO=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_INTERFACE=y
CONFIG_INET=y
q を押して less を終了します。
複数の config-* ファイルがある場合、uname -r コマンドを使用してカーネルバージョンを確認できます。
uname -r
これにより、システムで現在実行中のカーネルバージョンが出力されます。この情報を使用して、表示する正しい config-* ファイルを選択できます。
dmesg の設定ログを調査する
このステップでは、dmesg コマンドを使用してカーネルログを調査し、カーネル設定に関する情報を見つけます。dmesg は、カーネルのメッセージバッファを表示するコマンドラインユーティリティです。このバッファには、ハードウェア、ドライバ、その他のシステムイベントに関する情報が含まれており、起動時のカーネル設定の詳細も含まれます。
カーネルログを表示するには、次のコマンドを使用します。
dmesg | less
このコマンドは、dmesg の出力を less コマンドにパイプし、ログをスクロールできるようにします。
カーネル設定情報は、通常、起動プロセス中にログの冒頭に表示されます。ログをフィルタリングして設定関連のメッセージを見つけるには、grep コマンドを使用できます。
「config」を含む行を検索するには、次のコマンドを試してみてください。
dmesg | grep config | less
このコマンドは、dmesg の出力を grep config にパイプし、「config」という単語を含む行をフィルタリングし、その結果を less にパイプして簡単に表示できるようにします。
次のような出力が表示される場合があります。
[占位符: 时间戳] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-[占位符: kernel version] root=UUID=[占位符: UUID] ro quiet splash vt.handoff=7
[占位符: 时间戳] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-[占位符: kernel version] root=UUID=[占位符: UUID] ro quiet splash vt.handoff=7
[占位符: 时间戳] DMI: QEMU Standard PC (i440FX + PIIX, 1996), BIOS [占位符: BIOS version] 04/01/2014
特定の設定オプションを検索することもできます。たとえば、CONFIG_EXT4_FS が有効になっているかどうかを確認するには、次のコマンドを使用します。
dmesg | grep CONFIG_EXT4_FS
オプションが有効になっている場合、次のような行が表示されます。
[占位符: 时间戳] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
オプションが有効になっていない場合、何も出力されません。
dmesg の出力を調査することで、カーネル設定を検証し、欠落しているまたは誤った設定オプションに関連する潜在的な問題を特定できます。
q を押して less を終了します。
まとめ
この実験では、Linux でカーネル設定を確認する方法を探りました。まず、zcat /proc/config.gz を使ってカーネル設定にアクセスしようとしました。このファイルには、現在実行中のカーネルをビルドするために使用されたカーネル設定オプションが含まれていますが、その存在はカーネルのビルド設定に依存します。ls -l を使ってその存在を確認し、利用可能な場合は zcat を less にパイプして内容を表示しました。
もし /proc/config.gz が見つからない場合、この実験では次のステップに進むように指示されます。それは、通常 config-* という名前のカーネル設定ファイルを /boot/ ディレクトリで確認することです。



