mknod

Что делает команда mknod в Linux

Команда mknod в Linux используется для создания специальных файлов устройств — так называемых device files. Эти файлы обеспечивают взаимодействие между ядром и устройствами, подключёнными к системе, будь то физические (например, диски) или виртуальные (например, псевдотерминалы).

По сути, mknod создаёт запись в файловой системе, через которую можно обращаться к драйверу устройства. Без таких файлов ОС не сможет «увидеть» устройство, даже если оно физически подключено.

Синтаксис команды:

Bash
mknod [опции] имя_файла тип основной_номер дополнительный_номер

Где:

  • имя_файла — имя создаваемого специального файла;
  • тип — тип устройства:
    • b — блочное устройство (например, диск, флешка);
    • c — символьное устройство (например, последовательный порт, терминал);
  • основной_номер (major) — номер драйвера;
  • дополнительный_номер (minor) — конкретный идентификатор устройства.

Основные параметры и ключи команды mknod

Понимание параметров команды — основа корректного использования команды mknod в Linux.

1. Тип устройства

Как упоминалось выше, команда поддерживает два основных типа:

  • Символьные устройства (c) — передают данные посимвольно, потоково.
    Пример: mknod /dev/ttyS0 c 4 64 Здесь создаётся символьное устройство /dev/ttyS0 с основным номером 4 и дополнительным 64, соответствующее COM-порту.
  • Блочные устройства (b) — работают с блоками данных (например, диски).
    Пример: mknod /dev/sdb1 b 8 17 Таким образом создаётся блочное устройство для раздела диска.

2. Опции команды mknod

Хотя базовый синтаксис прост, команда поддерживает несколько полезных опций:

  • -m или --mode — задаёт права доступа при создании файла.
    Пример: mknod -m 660 /dev/mydevice c 240 0 Устанавливает права rw-rw----, что ограничивает доступ владельцу и группе.
  • --help — выводит краткую справку по использованию команды.
  • --version — показывает версию утилиты.
Совет: если вы часто создаёте файлы устройств, используйте -m сразу при создании, чтобы не менять права через chmod вручную.

Примеры использования команды mknod в Linux

1. Создание символьного устройства

Рассмотрим реальный пример создания тестового символьного устройства:

Bash
sudo mknod /dev/testchar c 240 1
sudo chmod 666 /dev/testchar

После выполнения этих команд можно использовать /dev/testchar для обмена данными с пользовательским драйвером, если он зарегистрирован в системе.

Совет: перед созданием убедитесь, что основной номер устройства (major) не конфликтует с уже существующими. Проверить можно так:

Bash
cat /proc/devices

2. Создание блочного устройства

Если нужно создать тестовое блочное устройство, можно выполнить:

Bash
sudo mknod /dev/testblock b 241 0
sudo mkfs.ext4 /dev/testblock

Это создаст псевдоустройство и даже позволит его форматировать (если есть соответствующий драйвер).

3. Пример с назначением прав и владельца

Bash
sudo mknod -m 640 /dev/serialtest c 250 0
sudo chown root:dialout /dev/serialtest

Эти команды создают символьный файл с доступом только для администратора и группы dialout.

Как узнать major и minor номера устройств

Чтобы использовать команду mknod в Linux корректно, нужно знать, какие номера присвоены драйверам. Для этого служат следующие инструменты:

  • Просмотр списка зарегистрированных устройств: cat /proc/devices
  • Вывод информации о существующем файле устройства: ls -l /dev/sda Пример вывода: brw-rw---- 1 root disk 8, 0 Oct 10 09:30 /dev/sda Здесь 8 — основной номер, а 0 — дополнительный.

Зная эти данные, можно воссоздать файл вручную, если он был удалён или повреждён.

Работа с правами и безопасностью

При использовании команды mknod в Linux важно учитывать безопасность. Поскольку файл устройства напрямую взаимодействует с ядром, ошибки могут привести к уязвимостям или повреждению данных.

Основные рекомендации:

  • Не создавайте файлы устройств с глобальными правами (777), если это не тестовая система.
  • Используйте sudo только при необходимости.
  • Проверяйте корректность номеров устройств перед созданием.
Совет: если вы тестируете драйверы, создавайте устройства в отдельной директории (например, /tmp/dev/) и добавляйте их в udev-правила, чтобы они не создавались автоматически при перезагрузке.

Связь команды mknod с системой udev

Современные дистрибутивы Linux редко требуют ручного использования команды mknod в Linux, потому что эти задачи выполняет udev — система динамического управления устройствами.

udev автоматически создаёт и удаляет файлы устройств в /dev, отслеживая события ядра. Однако mknod остаётся незаменимым инструментом при:

  • разработке и отладке драйверов;
  • восстановлении системы после повреждения /dev;
  • создании временных или нестандартных устройств.

Полезные команды рядом с mknod

  • ls -l /dev — просмотр существующих файлов устройств;
  • stat /dev/имя — получение детальной информации о файле устройства;
  • rm /dev/имя — удаление созданного вручную файла;
  • udevadm info --query=all --name=/dev/имя — получение сведений от udev о конкретном устройстве.

Краткий пример полного цикла

  1. Проверяем наличие драйвера и его номера: cat /proc/devices | grep testdrv
  2. Создаём файл устройства: sudo mknod /dev/testdrv c 250 0
  3. Назначаем права и владельца: sudo chmod 660 /dev/testdrv sudo chown root:root /dev/testdrv
  4. Проверяем: ls -l /dev/testdrv

Теперь устройство готово к использованию.

Команда mknod в Linux — мощный инструмент для ручного управления специальными файлами устройств. Несмотря на то, что большинство современных систем используют udev для автоматизации, знание этой команды необходимо каждому системному администратору, разработчику драйверов и инженеру по Linux-системам. Она позволяет создавать устройства вручную, восстанавливать повреждённые системные файлы и глубже понимать архитектуру взаимодействия ядра с оборудованием.