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

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

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

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

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

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

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

Когда вы просматриваете содержимое каталога /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-битные числа).

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

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

* так, /dev/null служит «черной дырой» и отправляемые туда данные навсегда исчезают (используется, например, для переадресации командного вывода, если эта информация должна быть скрыта);&#x20;
* _/dev/zero_ — это неиссякаемый источник нулевых байтов, которые иногда используются для того, чтобы заполнять нулями файлы до определенного (заданного) размера;&#x20;
* _/dev/random_ и _/dev/urandom_ —возвращают случайные числа

<figure><img src="https://1475196942-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUQ5Utaeg7lWvTKSyoVP7%2Fuploads%2FicPdgQeszq0T1pzuDzlp%2Fimage.png?alt=media&#x26;token=11922dc8-c5b9-4bee-89bc-a3f78600555a" alt=""><figcaption><p>Важные файлы-устройства (начало)</p></figcaption></figure>

<figure><img src="https://1475196942-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUQ5Utaeg7lWvTKSyoVP7%2Fuploads%2FUqj2viitkCxfzZqbmb2Y%2Fimage.png?alt=media&#x26;token=d737bbad-3800-4baf-af06-0037a4b9dc9a" alt=""><figcaption><p>Важные файлы-устройства (продолжение)</p></figcaption></figure>

## Система 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/](https://lwn.net/Articles/331818/) расположена статья, в которой описывается система devtmpfs, доступная, начиная с ядра 2.6.32. Остается подождать, чтобы увидеть, насколько широко она будет использоваться в дистрибутивах.

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

{% embed url="http://www.kernel.org/doc/Documentation/devices.txt" %}
