Udev

Материал из ALT Linux Wiki

Перевод man udev

Сам файл переводимого мана помещён на странице обсуждения данной статьи, все правки и исправления перевода (а возможно и корректировка мана), приветствуется

Имя

udev - служба динамического управления устройствами

Описание

udev передаёт программам системы информацию о событиях устройств, управляет правами доступа файловой системы /dev (далее нодам устройств), умеет создавать дополнительные ноды и символические ссылки на внутри файловой системы /dev и переименовывать сетевые интерфейсы.

Ядро обычно просто назначает имена устройств в зависимости от порядка их обнаружения.

Узнаваемые символические ссылки и имена сетевых устройств позволяют надёжно идентифицировать устройства на основе их свойств и конфигурации компьютера.

Служба udev (смотри systemd-udevd.service(8) ), получает события (uevents) от устройств непосредственно от ядра всякий раз, когда устройство добавляется, удаляется из системы, или меняет своё состояние.

Вся информация об устройствах, которую обрабатывает udev, хранится в базе данных udev и рассылается возможным подписчикам событий. Доступ ко всем хранимым данным и источникам событий обеспечивает библиотека libudev.


Файлы правил (rules)

Правила udev (файлы с расширением rules) считываются из файлов, расположенных каталоге в системных правил /lib/udev/rules.d (из пакетов дистрибутива) и /usr/local/lib/udev/rules.d (из самосборных пакетов) , из временного каталога создаваемого во время работы операционной системы /run/udev/rules.d из каталога для администратора системы/etc/udev/rules.d

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

  • Однако файлы с одинаковыми именами заменяют друг друга.
  • Файлы в /etc/ имеют наивысший приоритет, файлы в /run/ имеют приоритет над файлами с тем же именем в /lib и /usr/local/lib (разница

приоритетов между /lib и /usr/local/lib не определена, далее по тексту, просто /lib). Это можно использовать для переопределения системного файла правил из /lib и /usr/local/lib с помощью нового файла, если это необходимо;

  • Символическая ссылка в /etc/ с тем же именем, что и файл правил в /lib/, указывающая на /dev/null, полностью отключает файл правил.
  • Файлы правил должны иметь расширение .rules; другие расширения игнорируются.
  • Каждая строка в файле правил содержит по крайней мере одну пару ключ-значение.
  • Пустые строки , и строки, начинающиеся с # (комментарии) игнорируются.
  • Существуют два типа ключей - сравнения (сопоставления) и назначения.
  • Если все ключи сравнения совпадают с их значением, то применяется соответствующие правило, а ключами назначения переменным присваиваются указанные значения.
  • Правило сопоставления может переименовывать сетевой интерфейс, добавлять символические ссылки, указывающие на узел устройства, или запускать указанную программу как часть обработки события.
  • Правило присвоения состоит из одного или нескольких выражений, разделённых запятыми, вида ключ-оператор-значение.
  • Каждое выражение имеет свой эффект, зависящий от используемого ключа и оператора.

Операторы:

"=="
Сравните на равенство. (Истина, если ключ имеет данное значение).

"!="
Сравните на предмет неравенства. (Истина, если ключ не равен значению, или указанного ключа вообще не существует). 

"="
Присвойте значение ключу. Ключ, представляющий список, сбрасываются, и ему назначается только это единственное значение.

"+="
Добавьте значение к ключу, содержащему список записей.

"-="
Удаляет значение из ключа, содержащего список записей.

":="
Присвоить ключу финальное значение, запретить любые последующие изменения ключа.

Переменные

Значения переменных записываются в виде строк в двойных кавычках, например ("string"). Чтобы включить в значение кавычку (""), поставьте перед ней обратную косую черту (\"). Любые другие вхождения обратной косой черты, за которой следует символ, не экранируются. То есть "\t\n" обрабатывается как четыре символа: обратная косая черта, строчная буква t, обратная косая черта, строчная буква n.

Строка может иметь префикс из маленькой буквы e (e"string\n"), чтобы пометить строку в стиле Си Esq -последовательностей. [1] Например, e"string\n" интерпритируется как 7 символов: 6 строчных букв и новая строка. Это может быть полезно для написания специальных символов, когда они требуются драйверу ядра.

Обратите внимание, что NUL не допускается ни в одном из вариантов строки.

Ключи

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

ACTION
Проверка совпадение с именем произошедшего события.

DEVPATH
Проверка совпадением devpath (пути в файловой системе /sys)  у события.

KERNEL
Проверка на имя внутренне имя устройства в ядре.

KERNELS
Поиск внутреннего имени ядра у устройства и его родительских устройств (вверх по пути devpath).

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

SYMLINK
Сравнение с именем символической ссылки, нацеленной на нод. Его можно использовать после того, как ключ SYMLINK был установлен в одном из предыдущих правил. Симлинков может быть несколько; только достаточно совпадения одного из них.

SUBSYSTEM
Совпадение с именем подсистемы (SUBSYSTEM), в которой произошло событие на устройстве.

SUBSYSTEMS
Совпадение c именем подсистемы у устройста и его родительских устройств (вверх по пути devpath).

DRIVER
Сравнение с именем драйвера событийного устройства. Этот ключ устанавливается только для устройств, которые привязаны к драйверу во время создания события.

DRIVERS
Поиск имени драйвера вверх по пути devpath.

ATTR{filename}
Сравнение с значением атрибута в sysfs у устройства события. 

Обрамляющие пробелы в значении атрибута игнорируются, если само значение для сравнения не содержит обрамляющих пробелов.

ATTRS{filename}
Поиск атрибутов sysfs вверх по пути devpth. Если указано несколько совпадений ATTRS, все они должны совпадать на одном устройстве.

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

SYSCTL{параметр ядра}
Совпадение со значением параметра ядра.

ENV {значение}
Совпадение с значением свойства устройства

CONST{ключ}
Совпадение с системной константой. Поддерживаемые ключи:

"arch"
Архитектура системы. См. ConditionArchitecture= в systemd.unit(5) для возможных значений.

"virt"
Среда виртуализации системы. Возможные значения см. в systemd-detect-virt(1).

Неизвестные ключи никогда не совпадут.

TAG
Совпадение с тегом устройства.

TEST{маска восьмеричного режима}
Проверка существования файла. При необходимости можно указать восьмиричное значение свойств файла.

PROGRAM
Выполнить программу, чтобы определить, есть ли совпадение; В случае если программа возвращает успешеное значение выполнения программы, 
то ключ возвращает истинное значение.  Свойства устройства становятся доступными для исполняемой программы в текущей среде.  Вывод программы в stdout доступен в ключе RESULT.

Это можно использовать только для очень коротких задач переднего плана (не фоновый режим). Подробнее см. в описании RUN.

Обратите внимание, что в одном правиле может быть указано несколько ПРОГРАММНЫХ ключей, и "=", ":=" .

"+=" имеют тот же эффект, что и "==".

RESULT
Совпадение с возвращенной строкой последнего вызова PROGRAM.Этот ключ можно использовать в том же или в любом последующем правиле после вызова PROGRAM.

Большинство полей поддерживают сопоставление с шаблоном оболочки оболочки и альтернативные шаблоны. Поддерживаются следующие специальные символы:

*"
Соответствует ни одного (нулю) или более символов.

"?"
Соответствует любому одиночному символу.

"[]"
Соответствует любому одиночному символу, указанному в скобках. Например, строка шаблона «tty[SR]» будет соответствовать либо «ttyS», либо «ttyR».
Диапазоны также поддерживаются с помощью символа «-». Например, чтобы задать диапазон всех цифр можно использовать шаблон "[0-9]".
Если первым символом, следующим за "[", является символ "!",  то совпадут все символы, не заключенные в диапазон.

"|"
Разделяет альтернативные шаблоны. Например, строка шаблона «abc|x*» будет соответствовать либо «abc», либо «x*».

Следующие ключи могут получать значения:

NAME
Имя, используемое для сетевого интерфейса. См. systemd.link(5) для более высокого уровня механизма установки имени интерфейса. Имя узла устройства не может быть изменено udev, можно только создавать дополнительные символические ссылки.

SYMLINK
Имя символической ссылки, указывающей на нод. Каждое правило сопоставления добавляет это значение в список создаваемых символических ссылок.

Набор символов для имени символической ссылки ограничен. Допустимые символы: «0-9A-Za-z#+-.:=@_/», допустимые последовательности символов UTF-8 и шестнадцатеричная кодировка «\x00». Все остальные символы заменяются символом «_».

Можно указать несколько символических ссылок, разделив имена символом пробела. Если несколько устройств претендуют на одно и то же имя, ссылка всегда указывает на устройство с наивысшим приоритетом link_priority. Если текущее устройство
исчезает, ссылки оцениваются повторно, и устройство со следующим наивысшим значением link_priority становится владельцем ссылки. Если link_priority не указан, порядок устройств (и какое из них владеет ссылкой)
неопределенный.

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

OWNER, GROUP, MODE
Разрешения для нода устройства. Каждое указанное значение переопределяет скомпилированное значение по умолчанию.

SECLABEL{module}
Применяет указанную метку модуля безопасности Linux к ноду устройства.

ATTR{key}
Значение, которое должно быть записано в атрибут sysfs событийного устройства.
  1. Escape-последовательности используются в языках программирования C и C++, и их дизайн был скопирован во многих других языках, таких как Java, PHP, C# и т. д. Escape-последовательность — это последовательность символов, которая не представляет себя при использовании внутри символа или символа. строковый литерал, но преобразуется в другой символ или последовательность символов, которую может быть трудно или невозможно представить напрямую. В C все escape-последовательности состоят из двух или более символов, первый из которых — обратная косая черта \ (называемая «Escape-символом»); остальные символы определяют интерпретацию управляющей последовательности. Например, \n — это управляющая последовательность, обозначающая символ новой строки.