- Загружаемые модули ядра Linux
- Общие сведения и модулях ядра
- Команды управления модулями
- Автоматическая загрузка модулей
- Команда Lsmod в Linux (список модулей ядра)
- Модули ядра
- Команда lsmod
- Выводы
- Команда Modprobe в Linux
- Добавление модулей ядра
- Удаление модулей ядра
- Выводы
- Управление модулями ядра Linux
- Понимание ядра Linux
- Что такое модуль ядра?
- Команды модуля
- Список модулей, загруженных в настоящее время с помощью lsmod
- Найдите доступные модули для вашего текущего ядра
- Отображение информации о модуле с помощью modinfo
- Показать конфигурацию модуля с помощью modprobe
- Показать зависимости модуля
- Загрузка модулей
- Разгрузочные модули
- Заключение
Загружаемые модули ядра Linux
Ядро — это часть Linux, отвечающая за выполнение таких функций, как управление памятью, доступ к жестким дискам, сетевым картам и так далее. При этом ядро организовано по модульному принципу: сначала, то есть при запуске компьютера, загружается основное ядро, содержащее только те функции, которые требуются для старта системы.
Если в ходе работы понадобятся дополнительные функции (например, для работы с конкретным оборудованием), то необходимый код подключится к ядру как модуль. Если в течение некоторого времени эти дополнительные функции будут не нужны, модуль может быть выгружен из ядра.
Общие сведения и модулях ядра
Следующая команда выдает номер версии используемого ядра:
Все модули ядра расположены в директории /lib/modules/версия :
Модули ядра имеют зависимости друг от друга, которые прописаны в файле /lib/modules/версия/modules.dep . Данный файл формируется командой depmod , которая при выполнении просматривает структуру каталогов /lib/modules/версия/ и формирует информацию о зависимостях.
Команды управления модулями
Просмотреть список загруженных в данный момент модулей:
Если счетчик Used By равен нулю, то модуль ядра никем не используется. Соответственно, его можно выгрузить:
Если выгруженный модуль потребовался в процессе работы, его можно снова загрузить:
Следующая команда выдает информацию об одном модуле:
Как правило, для загрузки модулей ядра применяется не insmod , a modprobe . Эта команда имеет два преимущества: сама ищет файл модуля (следует указать только название модуля), а при необходимости также загружает все модули, требуемые для работы.
Кроме того, эта команда позволяет выгрузить модуль из ядра:
Автоматическая загрузка модулей
Для того, чтобы определенные модули загружались во время старта системы, их можно прописать в файл /etc/modules . Каждый модуль должен быть записан в отдельной строке. Строки, начинающиеся со слова blacklist , запрещают загрузку модуля.
Источник
Команда Lsmod в Linux (список модулей ядра)
lsmod — это утилита командной строки, которая отображает информацию о загруженных модулях ядра Linux.
Модули ядра
Ядро — это основной компонент операционной системы. Он управляет ресурсами системы и является мостом между оборудованием и программным обеспечением вашего компьютера.
Ядро Linux имеет модульную конструкцию. Модуль ядра, или часто называемый драйвером, — это фрагмент кода, расширяющий функциональные возможности ядра. Модули либо скомпилированы как загружаемые модули, либо встроены в ядро. Загружаемые модули могут быть загружены и выгружены в работающем ядре по запросу без необходимости перезагрузки системы.
Обычно модули загружаются по запросу через udev (диспетчер устройств). Вы также можете вручную загрузить модуль в ядро с помощью команды modprobe или автоматически во время загрузки с помощью файлов /etc/modules или /etc/modules-load.d/*.conf .
Модули ядра хранятся в каталоге /lib/modules/ . Чтобы узнать версию работающего ядра , используйте команду uname -r .
Команда lsmod
lsmod — это простая утилита, которая не принимает никаких параметров или аргументов. Что делает команда, так это то, что она читает /proc/modules и отображает содержимое файла в хорошо отформатированном списке.
Запустите lsmod в командной строке, чтобы узнать, какие модули ядра загружены в данный момент:
Команда выводит информацию для каждого загруженного модуля ядра в новой строке:
Каждая строка состоит из трех столбцов:
- Module — в первом столбце отображается имя модуля.
- Size — во втором столбце указан размер модуля в байтах.
- Used by — в третьем столбце отображается число, указывающее, сколько экземпляров модуля используется в настоящее время. Нулевое значение означает, что модуль не используется. Список, разделенный запятыми после номера, показывает, что использует модуль.
Чтобы узнать, загружен ли конкретный модуль, отфильтруйте вывод с помощью grep . Например, чтобы узнать, загружен ли модуль kvm вы должны запустить:
Для получения подробной информации о модуле используйте команду modinfo .
Выводы
Команда lsmod показывает список загруженных в настоящее время модулей ядра.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник
Команда Modprobe в Linux
Ядро Linux — это основной компонент операционной системы Linux. Он управляет ресурсами системы и является мостом между оборудованием и программным обеспечением вашего компьютера.
Ядро Linux имеет модульную конструкцию. Модуль ядра, или часто называемый драйвером, — это фрагмент кода, расширяющий функциональность ядра. Модули либо скомпилированы как загружаемые модули, либо встроены в ядро. Загружаемые модули могут быть загружены и выгружены в работающем ядре по запросу без необходимости перезагрузки системы.
Обычно модули загружаются по запросу через udev (диспетчер устройств). Однако иногда вам может потребоваться точная настройка того, как загружаются модули. Например, вам может потребоваться загрузить модуль с дополнительными параметрами или предотвратить автоматическую загрузку модуля.
Вы можете вручную загрузить модуль в ядро с помощью команды modprobe или автоматически во время загрузки с помощью файлов /etc/modules или /etc/modules-load.d/*.conf .
В этой статье мы объясним, как использовать modprobe для добавления и удаления модулей из ядра Linux. modprobe является частью kmod , двоичного kmod , который реализует несколько программ, используемых для управления модулями ядра Linux.
Добавление модулей ядра
Модули ядра хранятся в каталоге /lib/modules/ . Вы найдете версию работающего ядра , используйте команду uname -r .
Только пользователи с правами администратора могут управлять модулями ядра.
Чтобы загрузить модуль, вызовите команду modprobe за которой следует имя модуля:
Команда modprobe загрузит данный модуль и любые дополнительные зависимости модуля. В командной строке можно указать только один модуль.
Используйте команду lsmod чтобы убедиться, что модуль загружен:
Чтобы загрузить модуль с дополнительными параметрами, используйте синтаксис parameter=value :
Команда принимает несколько пар parameter=value разделенных пробелом.
Как правило, вам необходимо загрузить модуль во время загрузки системы. Вы можете сделать это, указав модуль и его параметры в файле внутри каталога /etc/modules-load.d . Файлы должны заканчиваться на .conf и иметь любое имя:
Параметры, указанные в этих файлах, считываются программой udev , которая загружает модули при запуске системы с помощью modprobe .
Удаление модулей ядра
Чтобы удалить модуль, вызовите команду modprobe с параметром -r за которым следует имя модуля:
modprobe также удалит неиспользуемые зависимости модуля.
При вызове с -r команда принимает несколько модулей в качестве аргументов:
Если вы хотите предотвратить загрузку модуля ядра во время загрузки, создайте файл .conf с любым именем внутри /etc/modprobe.d . Синтаксис:
Если вы хотите внести в черный список дополнительные модули, укажите модули в новой строке или создайте новый файл .conf .
Выводы
Команда modprobe позволяет добавлять и удалять модули ядра Linux.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник
Управление модулями ядра Linux
Главное меню » Linux » Управление модулями ядра Linux
Понимание ядра Linux
Что такое модуль ядра?
В общем, модуль ядра – это «фрагмент кода, который может быть загружен и выгружен в ядро по запросу. Они расширяют функциональные возможности ядра без перезагрузки системы». Это приводит к очень большой гибкости во время работы.
Кроме того, «модуль ядра может быть настроен как встроенный или загружаемый. Чтобы динамически загружать или удалять модуль, он должен быть настроен как загружаемый модуль в конфигурации ядра». Это делается в исходном файле ядра /usr/src/linux/.config. Встроенные модули отмечены буквой «y», а загружаемые модули – буквой «m». В качестве примера листинг 1 демонстрирует это для модуля SCSI:
Листинг 1: Объявление использования модуля SCSI
Мы не рекомендуем редактировать файл конфигурации напрямую, но использовать команду «make config», «make menuconfig» или «make xconfig», чтобы определить использование соответствующего модуля в ядре Linux.
Команды модуля
В системе Linux есть несколько различных команд для работы с модулями ядра. Это включает в себя перечисление модулей, загруженных в настоящее время в ядро Linux, отображение информации о модулях, а также загрузку и выгрузку модулей ядра. Ниже мы объясним эти команды более подробно.
Для текущих ядер Linux в пакете kmod предусмотрены следующие команды. Все команды являются символическими ссылками на kmod.
Список модулей, загруженных в настоящее время с помощью lsmod
Начнем с команды lsmod. lsmod сокращает «список модулей» и отображает все модули, загруженные в настоящее время в ядро Linux, аккуратно форматируя содержимое файла/proc/modules. В листинге 2 показаны выходные данные, состоящие из трех столбцов: имя модуля, размер, используемый в памяти, и другие модули ядра, которые используют этот конкретный столбец.
Листинг 2: Использование lsmod
Найдите доступные модули для вашего текущего ядра
Могут быть доступны модули ядра, о которых вы еще не знаете. Они хранятся в каталоге /lib/modules. С помощью find в сочетании с командой uname вы можете распечатать список этих модулей. «Uname -r» просто печатает версию текущего ядра Linux. Листинг 3 демонстрирует это для более старого ядра Linux 3.16.0-7 и показывает модули для IPv6 и IRDA.
Листинг 3: Отображение доступных модулей (выбор)
Отображение информации о модуле с помощью modinfo
Команда modinfo сообщает вам больше о запрошенном модуле ядра («информация о модуле»). В качестве параметра modinfo требуется либо полный путь к модулю, либо просто имя модуля. Листинг 4 демонстрирует это для модуля ядра IrDA, работающего со стеком протокола прямого доступа через инфракрасный порт.
Листинг 4: Отображение информации о модуле
Вывод содержит различные информационные поля, такие как полный путь к модулю ядра, его псевдоним, лицензия на программное обеспечение, описание модуля, авторов, а также внутреннее устройство ядра. Поле «depends» показывает, от каких других модулей ядра оно зависит.
Информационные поля различаются от модуля к модулю. Чтобы ограничить вывод конкретным информационным полем, modinfo принимает параметр «-F» (сокращение от «–field»), за которым следует имя поля. В листинге 5 вывод ограничен информацией о лицензии, доступной с помощью поля лицензии.
Листинг 5: Отображение только определенного поля.
В более новых ядрах Linux доступна полезная функция безопасности. Это касается модулей ядра с криптографической подписью. Как поясняется на веб-сайте проекта ядра Linux, «это позволяет повысить безопасность ядра, запрещая загрузку неподписанных модулей или модулей, подписанных недопустимым ключом. Подпись модуля повышает безопасность, затрудняя загрузку вредоносного модуля в ядро. Проверка подписи модуля выполняется ядром, поэтому нет необходимости иметь «доверенные биты пользовательского пространства».
Показать конфигурацию модуля с помощью modprobe
Каждый модуль ядра имеет определенную конфигурацию. Команда modprobe, за которой следует опция «-c» (сокращение от «–showconfig»), отображает конфигурацию модуля. В сочетании с grep этот вывод ограничен определенным символом. Листинг 6 демонстрирует это для параметров IPv6.
Листинг 6: Показать конфигурацию модуля
Показать зависимости модуля
Ядро Linux спроектировано как модульное, а функциональность распределена по ряду модулей. Это приводит к нескольким зависимостям модулей, которые можно снова отобразить с помощью modprobe. В листинге 7 используется опция «–show-plays», чтобы вывести список зависимостей для модуля i915.
Листинг 7: Показать зависимости модуля
Чтобы отобразить зависимости в виде дерева, подобного командам «tree» или «lsblk», может помочь проект modtree. Хотя он находится в свободном доступе на GitHub, он требует некоторых изменений, чтобы соответствовать правилам для бесплатного программного обеспечения и стать частью дистрибутива Linux в виде пакета.
Загрузка модулей
Загрузить модуль в работающее ядро можно двумя командами – insmod («insert module») и modprobe. Имейте в виду, что между этими двумя есть небольшое, но важное различие: insmod не разрешает зависимости модулей, но modprobe умнее и делает это.
В листинге 8 показано, как вставить модуль ядра IrDA. Обратите внимание, что insmode работает с полным путем к модулю, тогда как modprobe доволен именем модуля и сам ищет его в дереве модулей для текущего ядра Linux.
Листинг 8: Вставка модуля ядра
Разгрузочные модули
Последний шаг касается выгрузки модулей из работающего ядра. Опять же, для этой задачи доступны две команды – modprobe и rmmod («remove module»). Обе команды ожидают имя модуля в качестве параметра. В листинге 9 показано, как удалить модуль IrDA из работающего ядра Linux.
Листинг 9: Удаление модуля ядра
Заключение
Работа с модулями ядра Linux – не большая магия. Достаточно выучить несколько команд, и вы – хозяин на кухне.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Ядро — это та часть операционной системы, работа которой полностью скрыта от пользователя, т. к. пользователь с ним не работает напрямую: пользователь работает с программами. Но, тем не менее, без ядра невозможна работа ни одной программы, т.е. они без ядра бесполезны.
Этот механизм чем-то напоминает отношения официанта и клиента: работа хорошего официанта должна быть практически не заметна для клиента, но без официанта клиент не сможет передать заказ повару, и этот заказ не будет доставлен. В Linux ядро монолитное, т.е. все его драйвера и подсистемы работают в своем адресном пространстве, отделенном от пользовательского. Сам термин «монолит» говорит о том, что в ядре сконцентрировано всё, и, по логике, ничего не может в него добавляться или удаляться. В случае с ядром Linux — это правда лишь отчасти: ядро Linux может работать в таком режиме, однако, в подавляющем большинстве сборок возможна модификация части кода ядра без его перекомпиляции, и даже без его выгрузки. Это достигается путем загрузки и выгрузки некоторых частей ядра, которые называются модулями. Чаще всего в процессе работы необходимо подключать модули драйверов устройств, поддержки криптографических алгоритмов, сетевых средств, и, чтобы уметь это правильно делать, нужно разбираться в строении ядра и уметь правильно работать с его модулями. Об этом и пойдет речь в этой статье.
В современных ядрах при подключении оборудования модули подключаются автоматически, а это событие обрабатывается демоном udev, который создает соответствующий файл устройства в каталоге «/dev». Все это выполняется в том случае, если соответствующий модуль корректно установлен в дерево модулей. В случае с файловыми системами ситуация та же: при попытке монтирования файловой системы ядро подгружает необходимый модуль автоматически, и выполняет монтирование.
Если необходимость в модуле не на столько очевидна, ядро его не загружает самостоятельно. Например, для поддержки функции шифрования на loop устройстве нужно вручную подгрузить модуль «cryptoloop», а для непосредственного шифрования — модуль алгоритма шифрования, например «blowfish».
Поиск необходимого модуля
Модули хранятся в каталоге «/lib/modules/ » в виде файлов с расширением «ko». Для получения списка всех модулей из дерева можно выполнить команду поиска всех файлов с расширением «ko» в каталоге с модулями текущего ядра:
find /lib/modules/`uname -r` -name ‘*.ko’
Полученный список даст некоторое представление о доступных модулях, их назначении и именах. Например, путь « kernel/drivers/net/wireless/rt2x00/rt73usb.ko » явно указывает на то, что этот модуль — драйвер устройства беспроводной связи на базе чипа rt73. Более детальную информацию о модуле можно получить при помощи команды modinfo:
# modinfo rt73usb
filename: /lib/modules/2.6.38-gentoo-r1/kernel/drivers/net/wireless/rt2x00/rt73usb.ko
license: GPL
firmware: rt73.bin
description: Ralink RT73 USB Wireless LAN driver.
version: 2.3.0
author: rt2x00.serialmonkey.com
depends: rt2x00lib,rt2x00usb,crc-itu-t
vermagic: 2.6.38-gentoo-r1 SMP preempt mod_unload modversions CORE2
parm: nohwcrypt:Disable hardware encryption. (bool)
Поле «firmware» указывает на то, что этот модуль сам по себе не работает, ему нужна бинарная микропрограмма устройства в специальном файле «rt73.bin». Необходимость в файле микропрограммы появилась в связи с тем, что интерфейс взаимодействия с устройством закрыт, и эти функции возложены на файл прошивки (firmware). Взять firmware можно с сайта разработчика, установочного диска, поставляемого вместе с устройством, или где-нибудь в репозиториях дистрибутива, затем нужно его скопировать в каталог «/lib/firmware», при чем имя файла должно совпадать с тем, что указано в модуле.
Следующее поле, на которое нужно обратить внимание — это поле «depends». Здесь перечислены модули, от которых зависит данный. Логично предположить, что модули друг от друга зависят, например модуль поддержки USB накопителей зависит от модуля поддержки USB контроллера. Эти зависимости просчитываются автоматически, и будут описаны ниже.
Последнее важное поле — «param». Здесь описаны все параметры, которые может принимать модуль при загрузке, и их описания. В данном случае возможен только один: «nohwcrypt», который, судя по описанию, отключает аппаратное шифрование. В скобках указан тип значения параметра.
Более подробную информацию о модуле можно прочитать в документации к исходным кодам ядра (каталог Documentation) в дереве исходных кодов. Например, найти код нужного видеорежима драйвера «vesafb» можно в файле документации «Documentation/fb/vesafb.txt» относительно корня дерева исходных кодов.
Загрузка и выгрузка модулей
Загрузить модуль в ядро можно при помощи двух команд: «insmod» и «modprobe», отличающихся друг от друга возможностью просчета и удовлетворения зависимостей. Команда «insmod» загружает конкретный файл с расширением «ko», при этом, если модуль зависит от других модулей, еще не загруженных в ядро, команда выдаст ошибку, и не загрузит модуль. Команда «modprobe» работает только с деревом модулей, и возможна загрузка только оттуда по имени модуля, а не по имени файла. Отсюда следует область применения этих команд: при помощи «insmod» подгружается файл модуля из произвольного места файловой системы (например, пользователь скомпилировал модули и перед переносом в дерево ядра решил проверить его работоспособность), а «modprobe» — для подгрузки уже готовых модулей, включенных в дерево модулей текущей версии ядра. Например, для загрузки модуля ядра «rt73usb» из дерева ядра, включая все зависимости, и отключив аппаратное шифрование, нужно выполнить команду:
# modprobe rt73usb nohwcrypt=0
Загрузка этого модуля командой «insmod» произойдет следующим образом:
# insmod /lib/modules/2.6.38-gentoo-r1/kernel/drivers/net/wireless/rt2x00/rt73usb.ko nohwcrypt=0
Но нужно помнить, что при использовании «insmod» все зависимости придется подгружать вручную. Поэтому эта команда постепенно вытесняется командой «modprobe».
После загрузки модуля можно проверить его наличие в списке загруженных в ядро модулей при помощи команды «lsmod»:
# lsmod | grep rt73usb
Module Size Used by rt73usb 17305 0 crc_itu_t 999 1 rt73usb rt2x00usb 5749 1 rt73usb rt2x00lib 19484 2 rt73usb,rt2x00usb
Из вывода команды ясно, что модуль подгружен, а так же в своей работе использует другие модули.
Чтобы его выгрузить, можно воспользоваться командой «rmmod» или той же командой «modprobe» с ключем «-r». В качестве параметра обоим командам нужно передать только имя модуля. Если модуль не используется, то он будет выгружен, а если используется — будет выдана ошибка, и придется выгружать все модули, которые от него зависят:
# rmmod rt2x00usb
ERROR: Module rt2x00usb is in use by rt73usb
# rmmod rt73usb
# rmmod rt2x00usb
После выгрузки модуля все возможности, которые он предоставлял, будут удалены из таблицы ядра.
Для автоматической загрузки модулей в разных дистрибутивах предусмотрены разные механизмы. Я не буду вдаваться здесь в подробности, они для каждого дистрибутива свои, но один метод загрузки всегда действенен и удобен: при помощи стартовых скриптов. В тех же RedHat системах можно записать команды загрузки модуля прямо в «/etc/rc.d/rc.local» со всеми опциями.
Файлы конфигурация модулей находится в каталоге «/etc/modprobe.d/» и имеют расширение «conf». В этих файлах преимущественно перечисляются альтернативные имена модулей, их параметры, применяемые при их загрузке, а так же черные списки, запрещенные для загрузки. Например, чтобы вышеупомянутый модуль сразу загружался с опцией «nohwcrypt=1» нужно создать файл, в котором записать строку:
options rt73usb nohwcrypt=1
Черный список модулей хранится преимущественно в файле «/etc/modules.d/blacklist.conf» в формате «blacklist ». Используется эта функция для запрета загрузки глючных или конфликтных модулей.
Сборка модуля и добавление его в дерево
Иногда нужного драйвера в ядре нет, поэтому приходится его компилировать вручную. Это так же тот случай, если дополнительное ПО требует добавление своего модуля в ядро, типа vmware, virtualbox или пакет поддержки карт Nvidia. Сам процесс компиляции не отличается от процесса сборки программы, но определенные требования все же есть.
Во первых, нужен компилятор. Обычно установка «gcc» устанавливает все, что нужно для сборки модуля. Если чего-то не хватает — программа сборки об этом скажет, и нужно будет доустановить недостающие пакеты.
Во вторых, нужны заголовочные файлы ядра. Дело в том, что модули ядра всегда собираются вместе с ядром, используя его заголовочные файлы, т.к. любое отклонение и несоответствие версий модуля и загруженного ядра ведет к невозможности загрузить этот модуль в ядро.
Если система работает на базе ядра дистрибутива, то нужно установить пакеты с заголовочными файлами ядра. В большинстве дистрибутивов это пакеты «kernel-headers» и/или «kernel-devel». Для сборки модулей этого будет достаточно. Если ядро собиралось вручную, то эти пакеты не нужны: достаточно сделать символическую ссылку «/usr/src/linux», ссылающуюся на дерево сконфигурированных исходных кодов текущего ядра.
После компиляции модуля на выходе будет получен один или несколько файлов с расширением «ko». Можно попробовать их загрузить при помощи команды «insmod» и протестировать их работу.
Если модули загрузились и работают (или лень вручную подгружать зависимости), нужно их скопировать в дерево модулей текущего ядра, после чего обязательно обновить зависимости модулей командой «depmod». Она пройдется рекурсивно по дереву модулей и запишет все зависимости в файл «modules.dep», который, в последствие, будет анализироваться командой «modprobe». Теперь модули готовы к загрузке командой modprobe и могут загружаться по имени со всеми зависимостями.
Стоит отметить, что при обновлении ядра этот модуль работать не будет. Нужны будут новые заголовочные файлы и потребуется заново пересобрать модуль.
«Слушаем» что говорит ядро
При появлении малейших неполадок с модулем, нужно смотреть сообщения ядра. Они выводятся по команде «dmesg» и, в зависимости от настроек syslog, в файл «/var/log/messages». Сообщения ядра могут быть информативными или отладочными, что поможет определить проблему в процессе работы модуля, а могут сообщать об ошибке работы с модулем, например недостаточности символов и зависимостей, некорректных переданных параметрах. Например, выше рассмотренный модуль «rt73usb» требует параметр типа bool, что говорит о том, что параметр может принимать либо «0», либо «1». Если попробовать передать «2», то система выдаст ошибку:
# modprobe rt73usb nohwcrypt=2
FATAL: Error inserting rt73usb (/lib/modules/2.6.38-gentoo-r1/kernel/drivers/net/wireless/rt2x00/rt73usb.ko): Invalid argument
Ошибка «Invalid argument» может говорить о чем угодно, саму ошибку ядро на консоль написать не может, только при помощи функции «printk» записать в системный лог. Посмотрев логи можно уже узнать в чем ошибка:
# dmesg | tail -n1
rt73usb: `2′ invalid for parameter `nohwcrypt’
В этом примере выведена только последняя строка с ошибкой, чтобы не загромаждать статью. Модуль может написать и несколько строк, поэтому лучше выводить полный лог, или хотя бы последние строк десять.
Ошибку уже легко найти: значение «2» неприемлемо для параметра «nohwcrypt». После исправления, модуль корректно загрузится в ядро.
Из всего сказанного можно сделать один вывод: ядро Linux играет по своим правилам и занимается серьезными вещами. Тем не менее — это всего лишь программа, оно, по сути, не сильно отличается от других обычных программ. Понимание того, что ядро не так уж страшно, как кажется, может стать первым шагом к пониманию внутреннего устройства системы и, как результат, поможет быстро и эффективно решать задачи, с которыми сталкивается любой администратор Linux в повседневной работе.
Комментарии |
Поиск |
Пользователи | ||
Последний пользователь: Кто онлайн: Источник |