Для чего используется команда mknod?

52

Я только начал использовать Ubuntu в качестве основной ОС и хотел узнать о вещах, которые мне не следует делать, и узнавать о плохих вещах, которые люди делали в прошлом. Я наткнулся на это письмо об ужасных историях, которые администраторы UNIX и Linux делали в своей собственной системе, когда они были новыми. Многие из них включали использование команды mknod как для искажения, так и для устранения проблемы. Я никогда раньше не слышал об этой команде, и страница руководства в Ubuntu не очень полезна. Итак, мой вопрос: для чего используется эта команда, и какие примеры могут быть полезны при повседневном использовании?

Марк Томлин
источник

Ответы:

48

mknodПервоначально использовался для создания персонажа и блокировки устройств, которые заполняются /dev/. В настоящее время программное обеспечение подобно udevавтоматически создает и удаляет узлы устройств в виртуальной файловой системе, когда ядро ​​обнаруживает соответствующее оборудование, но изначально оно /devбыло просто каталогом, /который был заполнен во время установки.

Так что да, в случае почти полной катастрофы, приводящей к тому, что /devвиртуальная файловая система не загружается и / или udevэффектно mknodвыходит из строя, можно сделать кропотливое переполнение хотя бы элементарного дерева устройств, чтобы получить что-то для резервного копирования ... Но да, это ужас системного администратора время историй. Лично я рекомендую спасательную флешку или CD.

Помимо создания именованных каналов, я не могу придумать единственного возможного ежедневного использования, которым конечный пользователь должен был бы заниматься - и даже это расширяет определение «повседневного использования».

Shadur
источник
Таким образом, это ОЧЕНЬ специализированный способ создания виртуального файла, который действительно используется устройствами, подключенными к системе, в качестве способа связи с системой без необходимости учиться взаимодействовать с устройством через его драйвер?
Марк Томлин
1
Но udevэто специфично для Linux, не так ли? Возможно, другие Unix-подобные системы все еще вручную создают устройства?
Фахим Митха
2
@ Марк Ээ, нет. Создание файлов виртуального устройства - это то, как программное обеспечение должно взаимодействовать с устройством через его драйвер. Драйвер создает хук в ядре; mknod создает файл устройства, который связывает ловушку с файлом устройства, к которому впоследствии может подключиться программное обеспечение.
Шадур
@ Фахим, я не уверен; FreeBSD, кажется, использует devfsи / или, devdно у меня нет личного опыта с этим. Я подозреваю, что другие подразделения разработали свои собственные способы автоматизации процесса создания узлов устройства.
Шадур
@mark Например, Alsa генерирует серию узлов в /dev/sndсоответствии с различными элементами каждого бита звукового оборудования, которое он обнаружил и поддерживает. Программное обеспечение, использующее звук, может использовать эти устройства для генерации звука, не зная точно, с какой звуковой картой они разговаривают.
Шадур
7

Вы можете сделать именованную трубу с ним.

Я использую это с одной программой, чтобы читать из нее, и другой, чтобы написать в нее.

Облегчает взаимодействие между процессами.

В противном случае вы можете создавать файлы устройств для устройств, которых нет.

Также: http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds3/mknod.htm

Полемон
источник
Несмотря на то, что вы ответили правильно, Шадур предоставил ответ, понятный для всех уровней читателей, поэтому я считаю, что это лучший вариант для людей, которые ищут ответ на этот вопрос.
Марк Томлин
Я знаю, я просто пытался объяснить с практического подхода, как я это делаю. Использование mknodдля чего-то другого, чем создание именованных каналов, более чем редко.
Полемон
5

В качестве ораторов-администраторов баз данных, работающих на необработанных устройствах для создания дисковых групп Oracle ASM, мы регулярно используем их mknodдля связи устройств.

Ответы выше были очень полезны для меня, поскольку мы не являемся системными администраторами. Я просто хотел отметить, что с точки зрения администраторов хранилища это может быть редкостью, mknodно с точки зрения Oracle ASM это обычное использование. (Может быть, кто-то может придумать лучший способ для нас?)

Джей Джи
источник
1
Я использую ASM в Linux, и у меня не было причин запускать mknod. У меня есть несколько сценариев udev, которые создают символические ссылки, но я не уверен, для чего нужен mknod ... Если вы не используете Linux. конечно.
Дероберт
@JayJee Имейте в виду, что в современных системах Linux, если вы внесете изменения или дополнения в /devwith mknod, эти изменения исчезнут при следующей перезагрузке системы. Вам нужно будет написать скрипт или udevфайл правил, которые будут вносить изменения / дополнения для вас во время загрузки, чтобы сделать их постоянными.
Телеком
3

ИМХО, даже для создания именованных каналов команда mkfifo будет лучше, чем mknod. Во-первых, он информативен в своем имени, во-вторых, он позволяет опцию -m переопределить настройки umask.

Том
источник
1
... и не существовало до десятилетия после именованных каналов; многие из нас узнали, mknod foo pкогда это был единственный путь.
Я никогда даже не слышал о mknod до недавнего времени, когда я просматривал coreutils. Я всегда просто использовал mkfifo ...
Six
0

Команда «mknod» была выпущена для лицензиатов в Unix (tm) версии 4 AT & T. Я бы порекомендовал вам всем, что стоит потратить время и деньги, чтобы получить копию

Технический журнал Bell System, 57: 6. Июль-август 1978 года, стр. 1905-1929. Система разделения времени UNIX. (Ричи Д.М., Томпсон К.)

Эта проблема, и особенно эта статья, приведут вас к пониманию нескольких фундаментальных концепций, которые позволяют создавать элегантную, компактную, быструю, стабильную, безопасную и универсальную операционную систему, которой была Unix (tm)). Различные системы, которые теперь доступны, все еще довольно универсальны ;-)

Я постараюсь упомянуть некоторые из них здесь.

1) биты setuid и setgid и то, как использование этих битов позволяет разделить пользователей на доверенные и недоверенные домены привилегий. Хмел вечен, потому что доверенные пользователи с меньшей вероятностью прикажут системе «# cd /; rm -rf * .o », обратите внимание как на неправильное использование привилегий, так и на« пространство уничтожения ». Обратите также внимание на то, что конец предложения с цитируемой фразой диктует порядок полного и заключительного кавычек. Английская грамматика отстой (фм). dmr и ken пожертвовали публичный патент на семью, благослови их.

2) доступ к устройству через то же пространство имен, что и файлы. Вот где простая элегантность небольшого инструмента в сочетании с другими простыми инструментами для выполнения действий, о которых не думали основатели, становится мощной.

3) Файл в пространстве данных является строкой. Структура навязана программами в программном пространстве и не тесно связана со сложной программой Swiss-Army-Knife. Apple (R), Microsoft (R) и IBM (R) могли иметь более качественные продукты, если бы большинство из них читало BSTJ.

4) стандартный, стандартный, стандартный.

5) оболочки, интерпретирующие командные процессоры, способные легко объединять простые инструменты.

6) оптимизировать код только во внутренних циклах, тратить ограниченное время и деньги там, где это важно.

7) не встраивать синтаксис ввода / вывода в процессоры языкового перевода.

C. <Фортран

8) ПОЦЕЛУЙ.

9) «Проще спроектировать и реализовать многопользовательское расширение системы ayaeem с временным разделением для хорошей системы реального времени, чем наоборот», я, расширение с разделением времени для RSX-11D, реализованное с использованием небольших инструментов, написанных на MACRO 11, когда unavoidat, в противном случае сценарий pr на языках более высокого уровня был довольно хорош, 16 пользователей на 248 Кбайт PDP-11 // 45 (16 Кбайт памяти, остальное ядро). Параллельная разработка программ с использованием FOCAL, BASIC, FORTRAN IV, C, MACRO-11, редактирование ссылок, выполнение программ, пакетные, интерактивные и управление / сбор данных нескольких научных экспериментов с использованием LAB-11 и креативных настраиваемых интерфейсов для A / D, ЦАП, часы с высоким разрешением, ...

Нет заметной раздражающей задержки при редактировании с CRT на 9600 бод или на принтеры DECwriters со скоростью 120 к / с и скоростью 30 к / с. Немного отрывистый стаккато с принтером на 300 л / мин. UT200 и 2780 для RJE. Разработка программ Fastesr по сравнению с RSX-11M, RSX-11M +, IAS и ранними версиями VMS.

Действительно простой планировщик с разделением времени, реализованный в виде задачи в реальном времени, с использованием удовлетворительных характеристик ATL с приоритетом, реализованного в виде очереди.

Разновидности Unix молниеносны в наше время, но только потому, что процессоры могут сделать бесконечный цикл за три секунды. КТФ.

k6mrm
источник
Пожалуйста, извините за опечатки. iPhone и Паркинсон не очень хорошо играют вместе. C <FORTRAN <COBOL <PL / 1, слева лучше.
k6mrm