mknod
Что делает команда mknod в Linux
Команда mknod в Linux используется для создания специальных файлов устройств — так называемых device files. Эти файлы обеспечивают взаимодействие между ядром и устройствами, подключёнными к системе, будь то физические (например, диски) или виртуальные (например, псевдотерминалы).
По сути, mknod создаёт запись в файловой системе, через которую можно обращаться к драйверу устройства. Без таких файлов ОС не сможет «увидеть» устройство, даже если оно физически подключено.
Синтаксис команды:
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. Создание символьного устройства
Рассмотрим реальный пример создания тестового символьного устройства:
sudo mknod /dev/testchar c 240 1
sudo chmod 666 /dev/testchar
После выполнения этих команд можно использовать /dev/testchar для обмена данными с пользовательским драйвером, если он зарегистрирован в системе.
cat /proc/devices
2. Создание блочного устройства
Если нужно создать тестовое блочное устройство, можно выполнить:
sudo mknod /dev/testblock b 241 0
sudo mkfs.ext4 /dev/testblock
Это создаст псевдоустройство и даже позволит его форматировать (если есть соответствующий драйвер).
3. Пример с назначением прав и владельца
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 о конкретном устройстве.
Краткий пример полного цикла
- Проверяем наличие драйвера и его номера:
cat /proc/devices | grep testdrv - Создаём файл устройства:
sudo mknod /dev/testdrv c 250 0 - Назначаем права и владельца:
sudo chmod 660 /dev/testdrv sudo chown root:root /dev/testdrv - Проверяем:
ls -l /dev/testdrv
Теперь устройство готово к использованию.
Команда mknod в Linux — мощный инструмент для ручного управления специальными файлами устройств. Несмотря на то, что большинство современных систем используют udev для автоматизации, знание этой команды необходимо каждому системному администратору, разработчику драйверов и инженеру по Linux-системам. Она позволяет создавать устройства вручную, восстанавливать повреждённые системные файлы и глубже понимать архитектуру взаимодействия ядра с оборудованием.