типы устройств
100%

Устройства · Урок 2

типы устройств

Научитесь отличать символьные и блочные узлы устройств от каналов, сокетов и обычных объектов файловой системы.

Первый символ режима в ls -l указывает тип объекта файловой системы. В /dev символьные и блочные специальные файлы являются узлами устройств. Там же могут встречаться каналы и узлы Unix-сокетов, но это объекты межпроцессного взаимодействия, а не аппаратные узлы.

$ ls -l /dev/null /dev/sda /run/systemd/journal/dev-log /tmp/example-fifo
crw-rw-rw- 1 root root 1, 3 ... /dev/null
brw-rw---- 1 root disk 8, 0 ... /dev/sda
srw-rw-rw- 1 root root      ... /run/systemd/journal/dev-log
prw------- 1 user user      ... /tmp/example-fifo

Записи и разрешения различаются; пример показывает символы типов.

Символьные узлы

c обозначает character device. Обычно он предоставляет потоковый или специфичный для устройства интерфейс, а не адресуемые блоки фиксированного размера. Примеры — терминалы и /dev/null.

«Символьный» не означает, что каждый системный вызов передаёт ровно один символ. Приложения читают и пишут буферы, а блокирование, границы и управление определяет драйвер.

Какой первый символ режима обозначает символьный узел?

Блочные узлы

b обозначает block device. Блочные устройства предоставляют адресуемое хранение через блочный слой ядра и поддерживают буферизованный ввод-вывод, разметку и файловые системы. Диски, разделы и логические тома обычно имеют такие узлы.

Блочный узел не является смонтированной файловой системой. Он представляет устройство или логическую область; файловую систему создают на нём и монтируют отдельно. Сырая запись в неверный узел может уничтожить разделы, файловые системы и данные.

Что означает первый символ режима b?

FIFO и узлы сокетов

p обозначает FIFO, или именованный канал: именованный поток байтов для связи процессов. После чтения данные не сохраняются в узле.

s обозначает узел Unix-domain socket. Он называет локальную конечную точку и поддерживает соединения или датаграммы, передачу дескрипторов и учётные данные соседей. Интернет-сокеты не обязаны иметь файловый узел.

Ни FIFO, ни Unix-сокет не используют major- и minor-номера для выбора аппаратного драйвера.

Какое утверждение правильно различает эти объекты IPC?

Major- и minor-номера

Символьные и блочные узлы хранят номер устройства из major- и minor-компонентов. В длинном списке они занимают место размера:

brw-rw---- 1 root disk 8, 0 ... /dev/sda

Пара указывает ядру зарегистрированный интерфейс и экземпляр. Major связан с драйвером или классом, а minor интерпретирует драйвер. Не закрепляйте предположения вроде «minor 0 — всегда первый диск»: отображение зависит от подсистемы.

Явно покажите тип и номера:

$ stat -c 'type=%F major=%t minor=%T path=%n' /dev/null

GNU stat выводит %t и %T в шестнадцатеричном виде.

Какие объекты используют major- и minor-номера для идентификации интерфейса ядра?

Урок завершён

Вы завершили типы устройств

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

  • Читать c как символьный, а b как блочный узел.

  • Читать p как FIFO, а s как Unix-сокет.

  • Связывать major/minor только с узлами устройств.

  • Считать сырой доступ к блочному устройству потенциально разрушительным.

Сохраните прогресс

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

Создать бесплатный аккаунт
Следующий Урок
Назад к Устройства