Файлы-устройства

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

Старший и младший номера устройства

Устройства обеспечивают доступ ко многим компонентам аппаратного обеспечения компьютера, то есть к жестким дискам, дисководам, серийным и параллельным интерфейсам, оперативной памяти (RAM) и т. д. Три параметра — старший номер устройства, младший номер устройства и тип доступа (блочный или символьный) — определяют характеристику устройства.

Старший номер задает, какой драйвер ядра Linux отвечает за управление устройством. Большинство драйверов с их старшими номерами устройств описаны на сайте http://www.kernel.org/doc/Documentation/devices.txt.

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

Тип доступа указывает, являются ли устройства буферизованными (таковы все блочные устройства, например жесткие диски) или нет (символьно-ориентированные устройства, например серийные или параллельные интерфейсы).

Когда вы просматриваете содержимое каталога /dev с помощью команды ls -l, вместо размера файла система показывает номера устройства (старший и младший). Первый символ бита доступа — b или c — означает блочную либо символьную ориентацию.

user$ ls -l /dev/sda?
brw-rw---- 1 root root 8, 1 2010-02-02 10:39 /dev/sda1
brw-rw---- 1 root root 8, 2 2010-02-02 10:39 /dev/sda2
...

Внутренние свойства

Внутри системы Linux в каталоге /dev находятся только так называемые индексные дескрипторы (I-Node). Это мельчайшие управляющие единицы системы, а не настоящие файлы. Новые файлы устройств можно создавать с помощью команды mknod. Однако на практике это требуется редко, так как система udev делает такое автоматически (см. ниже).

Старший и младший номера устройств, начиная с версии ядра 2.6, представлены в виде 64-битных чисел (до версии 2.4 для этого применялись 32-битные числа).

Доступ ко многим устройствам (из соображений безопасности) может получить только администратор либо члены определенной группы. Чтобы предоставить другому пользователю доступ к этим устройствам, добавьте его к этой группе.

Некоторые файлы устройств выполняют специфическую функцию:

  • так, /dev/null служит «черной дырой» и отправляемые туда данные навсегда исчезают (используется, например, для переадресации командного вывода, если эта информация должна быть скрыта);

  • /dev/zero — это неиссякаемый источник нулевых байтов, которые иногда используются для того, чтобы заполнять нулями файлы до определенного (заданного) размера;

  • /dev/random и /dev/urandom —возвращают случайные числа

Система udev

Раньше дистрибутивы Linux в ходе установки создавали множество файлов устройств (например, при инсталляции Red Hat 9 создается почти 8000 таких файлов!). На деле же используется всего около сотни файлов, но этот набор неодинаков в зависимости от того, на каком компьютере установлена система и каково аппаратное обеспечение этого компьютера.

В данном случае правильный выбор помогает сделать система udev, которая появилась в версии ядра 2.6. Фоновая программа udevd распознает все аппаратные компоненты, подключенные к компьютеру, и создает необходимые файлы устройств. Программа udevd запускается в начале процесса Init-V. Конфигурация осуществляется с помощью файлов, содержащихся в каталоге /etc/udev.

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

Размышления о том, как бы запускать Linux быстрее, навели разработчиков на мысль заменить udev более эффективной системой или (по крайней мере частично) вернуться к статической конфигурации. По адресу http://lwn.net/Articles/331818/ расположена статья, в которой описывается система devtmpfs, доступная, начиная с ядра 2.6.32. Остается подождать, чтобы увидеть, насколько широко она будет использоваться в дистрибутивах.

Полное описание всех устройств, имеющихся в Linux в настоящее время, вместе с соответствующими номерами вы найдете по адресу:

Last updated