Команды Linux · 3 min read · Sep 14, 2025
Учебник по команде Linux nm для начинающих (10 примеров)

Если вы пользователь Linux, который также интересуется программированием и разработкой системного программного обеспечения, вы можете оказаться в ситуациях, когда вам нужна информация, связанная с символами в объектном файле. Вам будет приятно узнать, что существует утилита командной строки - названная nm - которую вы можете использовать в таких ситуациях.
В этом учебнике мы обсудим основы этого инструмента, используя несколько простых для понимания примеров. Но прежде чем мы это сделаем, стоит упомянуть, что все примеры здесь были протестированы на машине с Ubuntu 22.04 LTS.
Команда Linux nm
Утилита командной строки nm в основном перечисляет символы из объектных файлов. Вот синтаксис инструмента:
nm [OPTIONS] OBJECT-FILENAMEА вот как страница man команды объясняет это:
GNU nm lists the symbols from object files objfile.... If no object
files are listed as arguments, nm assumes the file a.out.Следующие примеры в формате вопросов и ответов дадут вам лучшее представление о том, как работает nm.
Вопрос 1. Как работает команда nm?
Основное использование этой команды очень простое - все, что вам нужно сделать, это выполнить команду ‘nm’ и передать имя объектного файла в качестве входных данных. Например, я использовал команду nm с бинарным файлом ‘apl’:
nm aplСледующий скриншот показывает, какой вывод произвела вышеуказанная команда:

Три столбца, полученные в выводе, представляют собой значение символа, тип символа и имя символа соответственно. Существует несколько типов символов - чтобы узнать полные детали, перейдите на страницу man команды nm.
Вопрос 2. Как сделать так, чтобы имена файлов предшествовали каждому символу в выводе?
Это можно сделать с помощью опции командной строки -A.
nm -A [obj-file]Например:
nm -A apl
Таким образом, вы можете видеть, что имя файла было добавлено в начале каждой строки.
Вопрос 3. Как заставить nm отображать символы отладчика?
Чтобы заставить nm отображать символы отладчика в выводе, используйте опцию командной строки -a.
nm -a [obj-filename]Например:
nm -a aplВышеуказанная команда отобразит все символы, включая символы только для отладчика, которые обычно не перечисляются.
Вопрос 4. Как заставить nm декодировать имена низкоуровневых символов?
Если вы хотите, вы можете даже заставить nm декодировать имена низкоуровневых символов в имена уровня пользователя. Это можно сделать с помощью опции командной строки -C.
nm -C [obj-file]Например:
nm -C aplВот что страница man говорит об этой опции:
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.Вопрос 5. Как заставить nm отображать только динамические символы?
Если вы хотите, чтобы nm отображал только динамические символы, а не обычные символы, используйте опцию командной строки -D.
nm -D [obj-file]Например:
nm -D apl
Таким образом, вы можете видеть, что nm произвел только динамические символы в выводе.
Вопрос 6. Как использовать разные форматы вывода nm?
Чтобы включить разные форматы вывода, используйте опцию командной строки -f. По умолчанию вывод производится в формате bsd, однако, если вы хотите, вы можете включить форматы ‘sysv’ и ‘posix’ также.
nm -f [format] [obj-filename]Например:
nm -f posix apl
Обратите внимание на изменение формата сейчас.
Вопрос 7. Как заставить nm отображать только внешние символы?
Это можно достичь с помощью опции -g.
nm -g [obj-file]Например:
nm -g apl
Вопрос 8. Какие сортировочные опции предоставляет nm?
По умолчанию символы сортируются в алфавитном порядке. Однако, если вы хотите, вы можете отсортировать их численно по их адресам, используя опцию командной строки -n.
nm -n [objfile]Например:
nm -n apl
Таким образом, вы можете видеть, что вывод теперь отсортирован по адресам.
Если вы не хотите, чтобы nm применял какую-либо сортировку (включая ту, которую он использует по умолчанию), используйте опцию -p. Далее, чтобы обратить любую существующую сортировку, используйте опцию -r.
Вопрос 9. Как заставить nm отображать только неопределенные символы?
Это можно сделать с помощью опции командной строки -u.
nm -u [obj-file]Например:
nm -u apl
Вопрос 10. Как заставить nm отображать только определенные символы?
Чтобы заставить nm отображать только определенные символы, используйте опцию командной строки –defined-only.
nm --defined-only [obj-file]Например:
nm --defined-only apl
Заключение
Согласен, команда nm имеет нишевую аудиторию, но мой личный опыт говорит, что даже если вы не считаете себя частью этой аудитории, имейте в виду, что такой инструмент существует. А для тех, кто хочет использовать эту утилиту, после практики всех примеров здесь, перейдите на страницу man nm, чтобы узнать больше.
Get new posts in your inbox
No spam. Unsubscribe anytime.