Поиск по сайту:

Как использовать lsmod в Linux (с практическим примером)


Ядро Linux — загадка для большинства, но это не обязательно! Добро пожаловать в захватывающий мир lsmod, инструмента, который позволяет вам посмотреть, какие модули использует ядро, и многое другое!

Что такое lsmod?

Чтобы объяснить lsmod, инструмент, который позволяет составлять список модулей в ядре Linux, нужно сначала понять, что такое модуль. Модуль Linux — это модульный фрагмент кода (работающий в скомпилированном формате), который можно по желанию загружать или выгружать из ядра Linux. Основным преимуществом использования таких модулей является их модульность и детализация.

Вы можете думать о модулях ядра как о плагинах в другом программном обеспечении. Всякий раз, когда вам нужна конкретная — менее распространенная или не универсальная — функциональность, она будет доступна в виде плагина или, в случае ядра Linux, в виде модуля. Существует небольшая разница между плагином в другом программном обеспечении и модулями ядра Linux. Однако уровень, на котором они работают, гораздо ближе к аппаратному обеспечению и основному операционному программному обеспечению, а не к концу стека на пользовательском уровне.

Например, драйвер вашей видеокарты, особенно если вы используете драйверы NVidia, загружается как модуль ядра. Когда вы устанавливаете драйвер, модуль ядра настраивается и загружается (возможно, при следующем перезапуске вашей системы).

Возвращаясь к lsmod, который должен быть включен в установку по умолчанию вашей операционной системы Linux, этот инструмент выведет обзор модулей ядра, доступных в настоящее время.

lsmod: первый взгляд

Интересно, что lsmod — это инструмент, который преобразует содержимое (виртуального) файла /proc/modules в более удобочитаемый контент.

Файл /proc/modules — это виртуальный файл размером 0 байт, который при просмотре с помощью, например, cat или vi будет содержать (или лучше рендерить) список модулей, доступных в настоящее время для ядра Linux в системе, где выполняется lsmod.

Начнем с проверки содержимого файла /proc/modules на наличие модуля ядра Linux AHCI (Advanced Host Controller Interface):

cat /proc/modules | grep ahci

Здесь мы используем cat для отображения (рендеринга) содержимого /proc/modules, а затем используем grep для grep для модуля AHCI. Обратите внимание, что мы не указали параметр -i (который будет выполнять поиск без учета регистра) для grep, так как полный список модулей /proc/modules только в нижнем регистре.

Из вывода видно, какие модули AHCI Linux Kernel доступны в настоящее время. В противном случае вывод выглядит немного загадочным и не очень описательным. Давайте сейчас попробуем lsmod.

lsmod | grep -E '^Module|ahci'

Здесь мы использовали lsmod, инструмент без параметров, и использовали grep для получения нескольких интересующих результатов. Параметр -E для grep позволяет нам создать список селекторов/выборов (строки) элементов, которые мы хотим видеть, разделенных одним или несколькими символами вертикальной черты (|) .

Таким образом, здесь мы ищем любые вхождения ahci (во второй строке селектора/выборки) и любые вхождения ^Module (во первой строке селектора/выборки), где ^ – это регулярное выражение (применимо только к первому селектору), выбирающее начало строки и указывающее, что мы хотим видеть результаты только там, где начало строки За строкой сразу следует «Модуль», и это будет наша первая строка заголовка.

Теперь мы видим, что результат хорошо визуализируется; первая строка (которая была включена нашей командой grep благодаря селектору ^Module), а вторая и третья строки содержат список модулей ahci, которые наш grep выбран из-за второго селектора.

Выходные данные столбца заголовка сообщают нам, что содержит каждый столбец; первый столбец — имя модуля (Module), второй — размер в байтах (Size), а третий столбец содержит счетчик ссылок ( Используется), или, другими словами, сколько раз ядро ссылается на модуль (что может быть неопределенно переведено как используется).

Если счетчик ссылок в третьем столбце равен нулю, это означает, что хотя модуль доступен «внутри»/ядру, в настоящее время он не используется.

Совет: если вы когда-нибудь увидите -2 в выводе lsmod, вы можете проверить, что lsmod показывает -2 в столбце «Используется» на Stackexchange.

Погружение глубже с modinfo

Хотя сам инструмент lsmod не имеет параметров, мы можем использовать другую утилиту в сочетании с lsmod для получения дополнительной информации: modinfo.

modinfo ahci -F 'description'
modinfo ahci -F 'author'

Здесь мы использовали команду modinfo, чтобы узнать больше о модуле ahci ядра Linux. В частности, мы использовали параметр -F для modinfo, чтобы выбрать конкретное поле, для которого мы хотели бы узнать его содержимое. Обратите внимание, что если вы запустите modinfo ahci без каких-либо параметров, вы увидите полный список всей доступной информации о модуле ядра ahci. Этот вывод довольно подробный, так как он включает данные ключа подписи и т. д.

Мы также могли бы использовать grep так же, как мы делали ранее, чтобы выбрать обе части информации в одной команде. Для этого мы используем modinfo ahci | grep -E description|author, который выводит один и тот же вывод из двух строк, хотя и непосредственно друг под другом.

Также обратите внимание, что можно снова использовать регулярное выражение для выбора только тех выходных строк, которые начинаются в начале строки (для обоих искомых полей), т. е. modinfo ahci | grep -E ^описание|^автор

В отличие от lsmod, modinfo имеет некоторые дополнительные параметры, которые могут представлять интерес. Проверьте man modinfo, чтобы увидеть все доступные параметры.

Подведение итогов

В этой статье мы рассмотрели инструмент lsmod без опций и удобный вывод, который он нам предоставляет, показывающий, какие модули ядра Linux доступны и сколько раз каждый такой модуль ядра в настоящее время используется (< i>«используется») ядром. Мы также рассмотрели, как получить дополнительную информацию о конкретном модуле с помощью команды modinfo в Linux. Мы также рассмотрели, как мы можем использовать grep -E для получения двух фрагментов информации одновременно, используя для сканирования несколько строк выбора.

Если вам понравилось читать эту статью, ознакомьтесь с нашими статьями «Как использовать ltrace для трассировки вызовов библиотек» и «Как работать с зависимостями общих объектов (библиотек) в Linux». Наслаждайтесь!