Linux, コマンド · 1 min read · Sep 14, 2025

初心者のためのLinux nmコマンドチュートリアル(10の例)

Linuxユーザーで、コーディングやシステムレベルのソフトウェア開発にも興味がある場合、オブジェクトファイルに関連するシンボル情報が必要になる状況に直面することがあるでしょう。そんな時に使えるコマンドラインユーティリティが存在することを知って嬉しく思うでしょう。それがnmと呼ばれるものです。

このチュートリアルでは、いくつかのわかりやすい例を使ってこのツールの基本を説明します。しかしその前に、ここでのすべての例はUbuntu 22.04 LTSマシンでテストされていることをお伝えしておきます。

Linux nmコマンド

nmコマンドラインユーティリティは、基本的にオブジェクトファイルからシンボルをリストします。ツールの構文は以下の通りです:

nm [OPTIONS] OBJECT-FILENAME

以下は、コマンドのマニュアルページがそれをどのように説明しているかです:

       GNU nm lists the symbols from object files objfile....  If no object  
       files are listed as arguments, nm assumes the file a.out.

以下は、nmの動作をより良く理解するためのQ&Aスタイルの例です。

Q1. nmコマンドはどのように機能しますか?

このコマンドの基本的な使い方は非常に簡単です。実行する必要があるのは’nm’コマンドを実行し、オブジェクトファイルの名前を入力として渡すことだけです。例えば、私は’nm’コマンドを’apl’バイナリファイルで使用しました:

nm apl

以下のスクリーンショットは、上記のコマンドが生成した出力の種類を示しています:

出力に生成された3つの列は、それぞれシンボル値、シンボルタイプ、シンボル名を表しています。シンボルのタイプは複数あります。完全な詳細を知りたい場合は、nmコマンドのマニュアルページを参照してください。

Q2. 出力の各シンボルの前にファイル名を表示するには?

これは-Aコマンドラインオプションを使用して行うことができます。

nm -A [obj-file]

例えば:

nm -A apl

これで、各行の先頭にファイル名が追加されたことがわかります。

Q3. nmにデバッガシンボルも表示させるには?

出力にデバッガシンボルも表示させるには、-aコマンドラインオプションを使用します。

nm -a [obj-filename]

例えば:

nm -a apl

上記のコマンドは、通常はリストされないデバッガ専用のシンボルを含むすべてのシンボルを表示します。

Q4. nmに低レベルのシンボル名をデコードさせるには?

必要であれば、nmに低レベルのシンボル名をユーザーレベルの名前にデコードさせることもできます。これは、-Cコマンドラインオプションを使用して行います。

nm -C [obj-file]

例えば:

nm -C apl

このオプションについてマニュアルページは次のように述べています:

           Besides removing any initial underscore prepended by the system,  
           this makes C++ function names readable. Different compilers have  
           different mangling styles. The optional demangling style argument  
           can be used to choose an appropriate demangling style for your  
           compiler.

Q5. nmに動的シンボルのみを表示させるには?

nmに通常のシンボルではなく動的シンボルのみを表示させたい場合は、-Dコマンドラインオプションを使用します。

nm -D [obj-file]

例えば:

nm -D apl

これで、nmが出力に動的シンボルのみを生成したことがわかります。

Q6. nmの異なる出力形式を使用するには?

異なる出力形式を有効にするには、-fコマンドラインオプションを使用します。デフォルトでは、出力はbsd形式で生成されますが、希望すれば’sysv’や’posix’形式も有効にできます。

nm -f [format] [obj-filename]

例えば:

nm -f posix apl

形式の変更を観察してください。

Q7. nmに外部シンボルのみを表示させるには?

これは-gコマンドラインオプションを使用して達成できます。

nm -g [obj-file]

例えば:

nm -g  apl

Q8. nmが提供するソートオプションは?

デフォルトでは、シンボルはアルファベット順にソートされます。しかし、希望すれば、-nコマンドラインオプションを使用してアドレスによって数値的にソートすることもできます。

nm -n [objfile]

例えば:

nm -n apl

これで、出力がアドレスによってソートされたことがわかります。

nmにデフォルトのソートを含むいかなるソートも適用させたくない場合は、-pコマンドラインオプションを使用します。既存のソートを逆にするには、-rコマンドラインオプションを使用します。

Q9. nmに未定義のシンボルのみを表示させるには?

これは-uコマンドラインオプションを使用して行うことができます。

nm -u [obj-file]

例えば:

nm -u apl

Q10. nmに定義されたシンボルのみを表示させるには?

nmに定義されたシンボルのみを表示させるには、–defined-onlyコマンドラインオプションを使用します。

nm --defined-only [obj-file]

例えば:

nm --defined-only apl

結論

確かに、nmコマンドにはニッチなオーディエンスがありますが、私の個人的な経験では、自分がそのオーディエンスの一部だと考えなくても、こういったツールが存在することを心に留めておくべきです。このユーティリティを使用したい方は、ここでのすべての例を練習した後、nmのマニュアルページにアクセスしてさらに詳しく知ってください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。