В линукс, все это файл, даже физические устройства, такие как дисководы, CD/DVD ROM и дискеты, представлены с помощью файлов. Однако эти файлы не являются обычными файлами данных. Вместо этого эти специальные файлы называются файлами устройств, и они могут генерировать или получать данные.
Обычно все специальные файлы находятся в /dev каталог. Некоторые из распространенных примеров специальных файлов: /dev/ноль, /dev/ноль, /dev/полныйи /dev/sr0.
Специальные файлы могут быть символьного или блочного типа. Как следует из названия, файлы символов обрабатывают по одному символу за раз, тогда как файлы блоков обрабатывают несколько символов за раз.
В этом расширенном руководстве мы обсудим, как создать файл устройства с помощью мкнод команда. Следуя этому руководству, пользователи Linux смогут уверенно работать с различными типами файлов устройств.
Оглавление
Синтаксис команды mknod
Синтаксис мкнод команда немного отличается от другие команды Linux. Основное отличие состоит в том, что нам нужно указать старший и младший номера при создании файлов персонажа и блочного устройства:
$ mknod [OPTIONS] [MAJOR] [MINOR] ...
В приведенном выше синтаксисе квадратные скобки ([])
представляют необязательные аргументы, тогда как угловые скобки (<>)
представляют обязательные аргументы.
В Linux старший номер используется для указания используемого драйвера устройства. Этот номер присваивается при регистрации драйвера устройства.
Аналогичным образом младший номер используется для указания фактического устройства. Мы можем найти зарезервированные старшие и младшие числа в Документация ядра Linux.
1. Создайте безымянный канал в Linux
В Linux мы используем каналы для обеспечения связи между процессами. В Shell труба представлена вертикальной линией. (|)
. Он считывает выходные данные предыдущего процесса и отправляет их в качестве входных данных следующему процессу.
Давайте разберемся с этим на простом примере:
$ echo "tecmint.com" | wc -c
В этом примере мы используем конвейер для чтения вывода эхо-команда и отправить его в качестве входных данных в команда туалета для дальнейшей обработки.
Здесь мы использовали вертикальную линию (|)
для создания трубы. Однако при этом создается безымянный канал, и его область действия ограничивается только текущей командой. В следующем примере мы увидим, как создать именованный канал.
2. Создайте именованный канал в Linux
Мы можем использовать мкнод Команда для создания именованного канала. Именованный канал находится в файловой системе, как и любой другой обычный файл. Однако его основная цель – обеспечить межпроцессное взаимодействие между несвязанными процессами.
Во-первых, давайте укажем тип устройства как p
для создания именованного канала:
$ mknod /tmp/named-pipe p $ ls -l /tmp/named-pipe
Теперь попробуем прочитать файл:
$ cat /tmp/named-pipe
Здесь мы можем видеть, что кошачья команда ждет бесконечно:

Далее, давайте откроем другой терминал и запишем некоторые данные в /tmp/именованный канал файл:
$ echo "tecmint.com" > /tmp/named-pipe
Наконец, перейдите к первому терминалу, чтобы просмотреть результат:

Здесь мы можем видеть, что эхо и кот команды могут обмениваться данными, используя именованный канал.
3. Создайте файл символьного устройства в Linux
Аналогичным образом мы можем использовать тип устройства как c
для создания символьного устройства. Однако мы должны использовать старшие и младшие числа при создании символьного устройства.
Давайте использовать лс команда найти старшие и младшие числа /dev/полный устройство:
$ ls -l /dev/full

В приведенном выше выводе пара чисел, разделенных запятыми, т.е. 1, 7 обозначают соответственно старшие и младшие числа.
В Linux /dev/полный устройство всегда возвращает На устройстве не осталось места ошибка. Чтобы понять это, давайте запишем некоторые данные в это устройство:
$ echo "tecmint.com" > /dev/full

Теперь воспользуемся мкнод команда для создания нового устройства, которое ведет себя так же, как /dev/полный устройство:
$ sudo mknod /tmp/full-device c 1 7
Далее изменим права доступа к файлу:
$ sudo chmod 666 /tmp/full-device $ ls -l /tmp/full-device
Наконец, запишите некоторые данные во вновь созданное устройство:
$ echo "tecmint" > /tmp/full-device

Важно отметить, что вновь созданное символьное устройство ведет себя как /dev/полный устройства из-за одинаковых старших и младших номеров.
4. Создайте файл блочного устройства в Linux
В дополнение к этому мы можем указать тип устройства как b
для создания блочного устройства. Чтобы создать блочное устройство, мы должны использовать старший и младший номера.
В Linux, /dev/sr0 представляет CD/DVD-ROM устройство. Теперь давайте создадим новое блочное устройство, которое ведет себя так же, как /dev/sr0.
Во-первых, давайте узнаем старшие и младшие числа /dev/sr0:
$ ls -l /dev/sr0

В приведенном выше выводе мы видим, что его старший и младший номера равны 11 и 0 соответственно.
Теперь давайте создадим новое блочное устройство с такими же старшим и младшим номерами:
$ sudo mknod /tmp/dvd-rom b 11 0 $ ls -l /tmp/dvd-rom

Далее смонтируем образ ISO с CD/DVD ROM на диск. /млн каталог и убедитесь, что операция монтирования прошла успешно:
$ sudo mount /tmp/dvd-rom /mnt/ $ ls -1 /mnt/

В этом примере мы видим, что /tmp/DVD-ROM блочное устройство может получить доступ к ISO-образу с CD/DVD-ROM.
5. Создайте файл устройства с разрешениями
Иногда нам нужно изменить права доступа к файлу устройства перед его использованием. В таких случаях мы должны использовать chmod команда. Однако мы можем добиться того же результата, используя мкнод вместо использования двух отдельных команд.
Чтобы понять это, воспользуемся -m
возможность установить права доступа при создании именованного канала:
$ sudo mknod -m 444 /tmp/pipe-with-permissions p
Теперь давайте проверим правильность установки разрешений:
$ ls -l /tmp/pipe-with-permissions

В этом примере мы использовали -m
вариант с именованным каналом. Однако мы можем использовать его и с символьными и блочными устройствами.
Знаете ли вы какой-либо другой лучший пример мкнод команда в линуксе? Сообщите нам свое мнение в комментариях ниже.