Как проверить, какие модули загружены
Проверка загруженных модулей — критически важная задача для диагностики системы, анализа производительности и обеспечения безопасности. В зависимости от операционной системы и контекста (ядро, приложение, интерпретатор) используются разные инструменты: от `lsmod` в Linux до `Get-Module` в PowerShell. Главное — применять правильную утилиту под конкретную среду и понимать, как интерпретировать вывод.
lsmod, cat /proc/modules или kmod list; в Windows — Get-Module в PowerShell или tasklist /m в CMD; в языках программирования — встроенные функции вроде sys.modules в Python. Всегда сверяйте результат с текущим контекстом выполнения.Системные модули — это компоненты, которые динамически подключаются к ядру ОС или выполняемому приложению для расширения функциональности без перезагрузки. Их корректная загрузка и контроль необходимы для стабильной работы серверов, виртуализации, сетевых сервисов и безопасного аудита. Неправильно загруженный или устаревший модуль может стать причиной падения системы, уязвимости или конфликта драйверов. Особенно остро эта проблема стоит в высоконагруженных средах: облачных платформах, CI/CD-пайплайнах и защищённых корпоративных сетях.
В современных системах модульность — стандарт де-факто. Ядро Linux, например, поддерживает более 5000 модулей, из которых загружается лишь небольшая часть. Аналогично работает .NET в Windows, Node.js в JavaScript-экосистеме и другие runtime-среды. Понимание того, какие именно модули активны, позволяет точно диагностировать проблемы совместимости, выявлять несанкционированные вставки (например, руткиты) и оптимизировать потребление ресурсов.
- Как проверить загруженные модули в Linux
- Использование kmod и modinfo
- Автозагрузка модулей: /etc/modules-load.d/
- Анализ модули в Windows: PowerShell и CMD
- Модули PowerShell: Get-Module
- Драйверы ядра: driverquery
- Модули в языках программирования: Python, Node.js, PHP
- Python: sys.modules
- Node.js: require.cache
- PHP: get_loaded_extensions()
- Типичные ошибки и как их исправить
- Ошибка 1: Модуль не отображается, хотя должен быть
- Ошибка 2: Конфликт модулей в Linux
- Ошибка 3: PowerShell блокирует сторонние модули
- Экспертное мнение
- Вопросы и ответы
- Заключение
Как проверить загруженные модули в Linux
Linux — одна из самых модульных операционных систем. Модули ядра (kernel modules) позволяют подключать драйверы устройств, файловые системы и сетевые протоколы «на лету». Это повышает гибкость, но усложняет диагностику. Для просмотра загруженных модулей существует несколько проверенных способов.
Первый и самый простой — команда `lsmod`. Она читает информацию из `/proc/modules` и выводит список в виде таблицы: имя модуля, размер, количество ссылок и зависимости. Команда не требует параметров и доступна во всех дистрибутивах.
- Откройте терминал с правами пользователя.
- Введите команду:
lsmod. - Проанализируйте вывод: первая колонка — имя модуля, вторая — размер в байтах, третья — число зависимостей.
Пример вывода:
Module Size Used by nf_conntrack 163840 1 nf_nat iptable_filter 4096 1 ip_tables 32768 1 iptable_filter x_tables 40960 2 ip_tables,iptable_filter
Здесь видно, что модуль `ip_tables` используется одним процессом и зависит от `x_tables`.
Альтернативный способ — прямое чтение файла `/proc/modules`. Этот подход даёт сырые данные, идентичные `lsmod`, но полезен в скриптах:
cat /proc/modules
Для фильтрации можно использовать `grep`. Например, чтобы найти все сетевые модули:
cat /proc/modules | grep net
Использование kmod и modinfo
Команда `kmod` — унифицированный интерфейс для управления модулями. Она объединяет функции `lsmod`, `insmod`, `rmmod` и других. Чтобы посмотреть загруженные модули через `kmod`, используйте:
kmod list
Этот вывод аналогичен `lsmod`, но может быть полезен в системах, где `lsmod` недоступен (например, в минимальных образах Docker).
Команда `modinfo` показывает детальную информацию о конкретном модуле, даже если он не загружен. Например:
modinfo usbcore
Вывод содержит версию, автора, описание, параметры и поддерживаемые устройства. Это помогает понять, зачем нужен модуль и безопасно ли его выгружать.
nvidia, vfio или zfs часто указывают на сторонние драйверы. Их обновление должно проводиться осторожно — лучше через официальные репозитории.Автозагрузка модулей: /etc/modules-load.d/
Не все модули загружаются вручную. Некоторые добавляются автоматически при старте системы через конфигурационные файлы. Расположение: `/etc/modules-load.d/`. Каждый файл в этом каталоге (с расширением `.conf`) содержит список модулей по одному на строку.
Чтобы проверить, какие модули настроены на автозагрузку:
ls /etc/modules-load.d/
cat /etc/modules-load.d/*.conf
Если вы видите, например, `vboxdrv.conf` с содержимым `vboxdrv`, это означает, что драйвер VirtualBox будет загружен при каждом запуске.
Анализ модули в Windows: PowerShell и CMD
В Windows модули могут означать разные вещи: DLL-библиотеки, загруженные процессом, модули PowerShell или драйверы ядра. Каждый тип требует своего метода анализа.
Начнём с процессов. Любой исполняемый файл (.exe) загружает ряд DLL-модулей: `ntdll.dll`, `kernel32.dll`, `user32.dll` и другие. Чтобы посмотреть, какие модули использует конкретный процесс, есть два основных способа: через командную строку и PowerShell.
В командной строке (CMD) используйте:
tasklist /m
Эта команда покажет все запущенные процессы и списки загруженных ими модулей. Для фильтрации по конкретной DLL:
tasklist /m ntdll.dll
Вывод покажет только те процессы, которые используют `ntdll.dll` — практически все.
Более точный и современный способ — PowerShell. Командлет `Get-Process` позволяет получить детальную информацию о модулях процесса.
- Запустите PowerShell от имени администратора.
- Введите:
Get-Process | Select-Object Name, Id, Modules - Для конкретного процесса:
(Get-Process -Name chrome).Modules
PowerShell также поддерживает фильтрацию:
Get-Process | Where-Object { $_.Modules.FileName -like "*crypto*" }
Это покажет процессы, использующие криптографические библиотеки.
Модули PowerShell: Get-Module
PowerShell сам по себе модульная система. Скрипты и функции группируются в модули, которые можно подключать динамически. Чтобы посмотреть, какие модули уже загружены в текущей сессии:
Get-Module
Чтобы увидеть все доступные модули (в том числе не загруженные):
Get-Module -ListAvailable
Для анализа конкретного модуля:
Get-Module -Name NetSecurity -ListAvailable | Format-List *
Это покажет версию, путь, экспортируемые команды и зависимости.
Драйверы ядра: driverquery
Windows также поддерживает драйверы режима ядра (аналог Linux kernel modules). Их можно просмотреть через:
driverquery
или
driverquery /v — для подробного вывода.
Вывод включает имя драйвера, тип, состояние, путь и дату. Полезно для аудита безопасности и поиска устаревших драйверов.
Команда |
Описание |
Где использовать |
|---|---|---|
tasklist /m |
Показывает DLL, загруженные процессами |
Диагностика падений, анализ памяти |
Get-Process |
PowerShell: детали процессов и модулей |
Администрирование, мониторинг |
Get-Module |
Список загруженных модулей PowerShell |
Разработка скриптов, безопасность |
driverquery |
Драйверы ядра Windows |
Аудит, обновление оборудования |
Модули в языках программирования: Python, Node.js, PHP
В контексте программирования «модули» — это файлы или пакеты кода, подключаемые к основной программе. Контроль загруженных модулей критичен для отладки, управления зависимостями и предотвращения конфликтов.
Python: sys.modules
В Python каждый импортированный модуль сохраняется в словаре `sys.modules`. Это центральный реестр всех загруженных модулей в текущей сессии интерпретатора.
Чтобы посмотреть список:
«`python
import sys
print(sys.modules.keys())
«`
Для поиска конкретного модуля:
«`python
‘os’ in sys.modules # True, если os уже импортирован
«`
Вы можете также получить путь к модулю:
«`python
print(sys.modules[‘json’].__file__)
«`
Важно: `sys.modules` включает все модули, даже встроенные (`builtins`) и частично загруженные. Это делает его идеальным для отладки, но требует фильтрации при анализе.
sys.modules, но импорт проходит успешно, возможно, он был выгружен вручную или находится в namespace-пакете.Node.js: require.cache
В Node.js все модули кэшируются после первого импорта через `require()`. Повторный вызов `require()` возвращает объект из кэша, а не перезагружает файл. Полный список загруженных модулей доступен в `require.cache`.
Пример:
«`javascript
console.log(Object.keys(require.cache));
«`
Вывод — массив путей ко всем загруженным модулям. Чтобы очистить кэш одного модуля:
«`javascript
delete require.cache[require.resolve(‘./my-module’)];
«`
Это полезно при разработке, когда нужно перезагрузить модуль без перезапуска сервера.
PHP: get_loaded_extensions()
В PHP функция `get_loaded_extensions()` возвращает массив всех загруженных расширений (extensions), таких как `json`, `curl`, `mysqli`. Это аналог модулей ядра.
Использование:
«`php
$modules = get_loaded_extensions();
print_r($modules);
«`
Для проверки конкретного:
«`php
in_array(‘openssl’, get_loaded_extensions()); // true/false
«`
Расширения отличаются от composer-зависимостей: они компилируются в PHP или подключаются как .so/.dll. Управляются через `php.ini`.
Язык |
Метод проверки |
Особенности |
|---|---|---|
Python |
sys.modules |
Включает все импортированные модули, включая встроенные |
Node.js |
require.cache |
Кэширует модули; удаление позволяет перезагрузку |
PHP |
get_loaded_extensions() |
Только расширения C, не Composer-пакеты |
Типичные ошибки и как их исправить
Даже опытные специалисты сталкиваются с проблемами при анализе модулей. Ниже — частые ошибки и пути их решения.
Ошибка 1: Модуль не отображается, хотя должен быть
Ситуация: вы импортировали модуль в Python, но его нет в `sys.modules`.
Причины:
- Ошибка в имени при импорте (опечатка).
- Модуль не найден в
sys.path. - Произошло исключение при загрузке.
Решение: используйте `try-except` при импорте и логируйте ошибки:
«`python
try:
import mymodule
except ImportError as e:
print(f»Ошибка импорта: {e}»)
«`
Ошибка 2: Конфликт модулей в Linux
Два модуля требуют разных версий одного и того же драйвера. Например, `nvidia` и `nouveau` не могут работать одновременно.
Симптомы: система не загружается, X-сервер падает, ошибка `module already loaded`.
Решение:
- Загрузитесь в recovery-режим.
- Выгрузите конфликтующий модуль:
sudo rmmod nouveau. - Запретите автозагрузку: добавьте в
/etc/modprobe.d/blacklist.confстрокуblacklist nouveau.
Ошибка 3: PowerShell блокирует сторонние модули
По умолчанию политика выполнения (`ExecutionPolicy`) может запрещать загрузку модулей из интернета.
Решение:
- Проверьте политику:
Get-ExecutionPolicy. - Для доверенных модулей установите:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. - Подпишите модуль сертификатом или разблокируйте:
Unblock-File -Path .MyModule.psm1.
Экспертное мнение
Контроль модулей — не просто техническая операция, а часть стратегии безопасности и надёжности. Лучшие практики включают регулярный аудит, документирование изменений и использование автоматизации.
Автоматическая проверка загруженных модулей должна входить в мониторинг. Например, скрипт, который раз в час записывает список модулей ядра и отправляет хеш в SIEM-систему. Любое изменение становится триггером для расследования.
При работе с контейнерами (Docker, Podman) помните: модули ядра общие для всей системы. Контейнер не изолирован от ядра. Загрузка модуля в одном контейнере (через привилегированный режим) влияет на всю ОС.
Для языковых сред используйте lock-файлы: `requirements.txt`, `package-lock.json`, `composer.lock`. Они не показывают загруженные модули в реальном времени, но гарантируют воспроизводимость окружения.
Главный принцип: минимализм. Чем меньше модулей — тем меньше поверхность атаки. Отключайте всё, что не используется. В Linux — через `blacklist`; в Windows — через отключение служб; в приложениях — через tree-shaking и сборку без неиспользуемых зависимостей.
Вопросы и ответы
/etc/modules-load.d/. В systemd можно использовать systemctl list-unit-files | grep module, если модуль добавлен как служба.dmesg | grep имя_модуля в Linux или Event Viewer в Windows.sudo rmmod имя_модуля. Убедитесь, что модуль не используется (lsmod | grep имя). Если используется — сначала остановите зависящие службы.Заключение
Проверка загруженных модулей — обязательный элемент администрирования, разработки и безопасности. От операционной системы до уровня приложения — каждый слой использует модульность, и игнорирование этого механизма ведёт к нестабильности и уязвимостям.
lsmod в Linux, Get-Module в PowerShell, sys.modules в Python — и всегда сверяйте состояние с эталонной конфигурацией.- В Linux используйте
lsmod,/proc/modulesиkmodдля анализа модулей ядра. - В Windows применяйте
Get-Process,Get-Moduleиdriverqueryв зависимости от типа модуля. - В языках программирования обращайтесь к внутренним реестрам:
sys.modules,require.cache,get_loaded_extensions(). - Фиксируйте изменения модулей в системах мониторинга и SIEM.
- Следуйте принципу минимальной достаточности — отключайте всё, что не используется.
⚠️ Дисклеймер — нажмите, чтобы развернуть
Материалы, опубликованные в разделе «Блог» на сайте RU DESIGN SHOP (rudesignshop.ru), носят исключительно информационный и ознакомительный характер и не являются руководством к действию, финансовой рекомендацией, медицинской услугой, ветеринарным назначением либо рекламой товаров и услуг, включая азартные игры. Публикации не содержат призывов к участию в азартных играх и не направлены на продвижение соответствующих операторов.
Безопасность применения товаров и веществ: при использовании строительных материалов, бытовой химии, пестицидов и агрохимикатов необходимо строго следовать инструкциям производителя и действующему законодательству Российской Федерации, включая Федеральный закон РФ от 19.07.1997 № 109-ФЗ «О безопасном обращении с пестицидами и агрохимикатами».
Упоминание товарных знаков, брендов и организаций носит исключительно информационный характер и не означает наличие партнёрских отношений или одобрения со стороны правообладателей.
Материалы, содержащие сведения о медицинских, ветеринарных или косметических средствах, представлены в справочных целях и не являются медицинской консультацией или назначением. Перед применением рекомендуется обратиться к врачу, ветеринарному специалисту или иному сертифицированному профессионалу.
Возрастные ограничения: материалы, содержащие сведения о продукции категории 18+, включая алкоголь или азартные игры, предназначены исключительно для совершеннолетней аудитории и публикуются в информационных целях.
Правовая ответственность: решения, принятые на основе опубликованной информации, пользователь принимает самостоятельно и на свой риск; редакция и авторы несут ответственность в пределах, установленных законодательством Российской Федерации.
Редакция не допускает публикаций, содержащих пропаганду экстремизма, терроризма, наркотических средств или суицида; подобные материалы подлежат немедленному удалению.
Упоминание организаций с ограниченным статусом: компания Meta Platforms Inc. (социальные сети Facebook и Instagram) признана экстремистской организацией решением суда РФ, её деятельность запрещена на территории Российской Федерации; любые упоминания приводятся исключительно в информационных целях.
Авторские права и источники: информация собирается из открытых источников; её актуальность указывается на дату публикации и может изменяться.
Изображения и иллюстрации используются на условиях, разрешённых правообладателями. При возникновении претензий редакция готова оперативно рассмотреть обращение и внести необходимые изменения.
Персональные данные и cookies: сайт использует cookies и обрабатывает персональные данные пользователей в соответствии с Федеральным законом № 152-ФЗ «О персональных данных» и Политикой конфиденциальности RU DESIGN SHOP.
Мнения авторов могут не совпадать с позицией государственных органов или коммерческих организаций, упомянутых в материалах.