Символьные специальные файлы используются такими устройствами как

Обновлено: 06.07.2024

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

1. Класс устройства. В ОС Linux различают устройства блок-ориентированные и байт-ориентированные. Блок-ориентированные (или блочные) устройства, например, жесткий диск, передают данные блоками. Байт-ориентированные (или символьные) устройства, например, принтер и модем, передают данные посимвольно, как непрерывный поток байтов. Взаимодействие с блочными устройствами может осуществляться лишь через буферную память, а для символьных устройств буфер не требуется. Кроме этих двух классов устройств имеются еще два - небуферизованные байт-ориентированные устройства и именованные каналы (FIFO).

2. Старший номер устройства, обозначающий тип устройства, например, жесткий диск или звуковая плата. Текущий список старших номеров устройств можно найти в файле /usr/include/linux/major.h. Вот небольшая выдержка из этого списка

Таблица 9.1. Старшие номера некоторых устройств

Старший номер Тип устройства 1 Оперативная память 2 Дисковод гибких дисков 3 Первый контроллер для жестких IDE-дисков 4 Терминалы 5 Терминалы 6 Принтер (параллельный разъем) 8 Жесткие SCSI-диски 14 Звуковые карты 22 Второй контроллер для жестких IDE-дисков

Файлы устройств одного типа имеют одинаковые имена и различаются по номеру, прибавляемому к имени. Например, все файлы сетевых плат Ethernet имеют имена, начинающиеся на eth: eth0, eth1 и т. д. Младший номер устройства применяется для нумерации устройств одного типа, т. е. устройств с одинаковыми старшими номерами.

Если вы заглянете в каталог /dev и выполните команду ls -l, вы увидите, что эта команда вместо размера файла в байтах, как для обычного файла, выводит два числа, разделенных запятой. Это и есть старший и младший номера данного устройства. Эти номера задаются в соответствии с таблицей устройств, определенной разработчиками ядра.

Старшие номера известных ядру устройств можно увидеть, выполнив команду

[user]$ cat /proc/devices

Если вы решили подключить к системе какое-то новое устройство, необходимо вначале проверить, что в каталоге /dev имеется специальный файл (или ссылка на специальный файл) для этого устройства. Специальные файлы устройств создаются с помощью команды mknod (но, естественно, использовать команду mknod без необходимости и полного понимания последствий не стоит). Эта команда имеет следующий формат:

mknod [опции] имя_устройства тип_устройства старший_номер младший_номер

где тип_устройства может принимать одно из четырех значений:

• b - блок-ориентированное устройство;

• c - байт-ориентированное (символьное) устройство;

• u - небуферизованное байт-ориентированное устройство;

• p - именованный канал.

Для блок-ориентированных и байт-ориентированных устройств (b, c, u) нужны и старший и младший номера, для именованных каналов номера не используются. В следующем примере создается специальный файл для терминала, подключенного к порту COM3, который в Linux обозначается как /dev/ttyS2:

(устройства-терминалы представляют собой байт-ориентированные устройства со старшим номером 4 и младшими номерами, которые начинаются с 64).

Но вот о чем стоит подумать, так это о том, как дать пользователям права, необходимые для доступа к устройствам. Эти права устанавливаются через атрибуты специальных файлов. Можно, например, дать всем пользователям полные права (chmod 666) на доступ к таким устройствам, как /dev/cdrom, /dev/floppy, /dev/modem и так далее. Можете поступить иначе, создав группу "cdrom", сделать /dev/cdrom принадлежащим группе cdrom, а потом добавлять пользователей в эту группу по мере необходимости. Аналогичную процедуру можно применить к другим устройствам.

14.1.2. Специальные файлы . и ..

14.1.2. Специальные файлы . и .. Каждый каталог, включая корневой, содержит также два специальных файла под именами . и . полезные при определенных условиях. Первый, . — то же самое, что и текущий каталог. Это означает, что имена somefile и ./somefile эквивалентны.Еще одно специальное имя

Файлы блочных устройств

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

Файлы символьных устройств

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

4.4.1. Файлы физических устройств

4.4.1. Файлы физических устройств Как уже говорилось, с точки зрения ОС Linux, все подключаемые к компьютеру устройства (жесткие и съемные диски, терминал, принтер, модем и т. д.), представляются файлами. Если, например, надо вывести на экран какую-то информацию, то система как бы

1.4.2. Файлы устройств

1.4.2. Файлы устройств Абстракция - это великая сила. Возьмем, например, DOS (именно DOS, потому что с нее началась история Microsoft). Разные разделы жесткого диска в DOS представляются как отдельные диски (в DOS они называются логическими дисками), В Windows то же самое - открываем окно Мой

Специальные акции

Специальные акции Регулярные оф-лайновые акции для имеющихся и потенциальных посетителей вашего сайта могут существенно увеличить его посещаемость. Вот далеко не полный список таких мероприятий: конкурсы, конференции, семинары, встречи посетителей сайта, вечеринки,

7.8. Специальные вопросы

7.8. Специальные вопросы Узко-специфические проблемы Мы считаем, что некоторые предметные области заслуживают специального архитектурного рассмотрения. Проектирование эффективного пользовательского интерфейса - скорее искусство, чем наука. В этой области абсолютно

Исходные файлы и выполняемые файлы

Специальные символы

Специальные символы Элементы (ключевые слова, параметры), которые обязательны во всех случаях, появляются без каких-либо дополнительных пометок, они выделены таким шрифтом, как и весь код в книге. В предыдущем примере ключевые слова SELECT и FROM являются обязательными для

Специальные пользователи

Специальные пользователи Пользователь SYSDBA имеет особые права ко всем базам данных и их объектам, независимо от того, какой пользователь ими владеет[137]. Более того, в операционных системах, где реализована концепция Суперпользователя, - пользователь с привилегиями root или

5.11.2. Файлы устройств

5.11.2. Файлы устройств Отдельного разговора заслуживают файлы устройств. Для Linux нет разницы между устройством и файлом. Все устройства системы представлены в корневой файловой системе в виде обычных файлов. Как уже упоминалось, файлы устройств хранятся в каталоге /dev.

Восемь надёжных способов навсегда удалить файлы с ПК, из мобильных устройств и из «облака» Олег Нечай

Специальные разделы

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

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

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

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

Все файлы устройств расположены в каталоге /dev, который есть неотделимой частью корневой файловой системы, поскольку они должны быть доступны на всех этапах загрузки. Они также известны как специальные файлы устройств. Эти файлы используются операционной системой для обеспечения пользователю и программам интерфейса доступа к устройствам, подключенным к компьютеру.

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

dboth-dev-dir_0

На схеме приведена схема передачи данных для команды cat /etc/resolv.conf. Вы выполняете команду из терминала, утилита отправляет запрос файла драйверу, который ищет файл на диске и читает его содержимое. Данные передаются через файл устройства, а затем опять же, через файл устройства псевдо-терминала передаются в эмулятор терминала 6, где они будут отображены.

Если мы перенаправим вывод команды в файл, например, cat /etc/resolv.conf > /etc/resolv.bak, то левая часть схемы останется неизменной, а правая сторона будет вести к файлу устройства /dev/sda2. Эти устройства делают очень простым использование стандартных потоков ввода/вывода для доступа к каждому устройству. Простое перенаправление потока данных в файл устройства приведет к записи данных на устройство.

Классификация файлов устройств

Файлы устройств можно классифицировать по меньшей мере двумя способами. Первая и наиболее широкая классификация - на основе потока данных. В устройствах TTY и других символьных устройствах, данные обрабатываются по одному символу или байту за раз. В блочных устройствах, таких как жесткие диски данные передаются блоками, как правило, с размером, кратным 256 байт.

Если вы еще этого не делали, то перейдите в папку /dev/ и посмотрите список находящихся там файлов с помощью команды ls. Вы увидите очень длинный список файлов с их правами доступа, владельцами и группами - это список устройств linux. Обратите внимание на самый первый символ в каждой строке. Он указывает тип устройства. Символом "b" - обозначаются блочные устройства linux (block), а символом "c" - символьные (character).

device

Более точно можно идентифицировать устройства по их младшему и старшему номеру. Например, жесткие диски имеют старший номер 8, что обозначает их как блочные устройства SCSI. Обратите внимание, что все жесткие диски PATA и SATA находятся под управлением SCSI. Раньше использовалась подсистема ATA, но она уже устарела, поэтому диски, которые раньше обозначались как hd[a-z] теперь обозначаются sd[a-z].

Младший номер диска означает раздел устройства, например, номера 8/0 - это весь диск /dev/sda, а 8/1 уже файл первого раздела на диске, 8/6 - /dev/sda6. Файлы TTY именуются немного по-другому, от tty0 до tty63. Все значения старших номеров устройств Linux вы можете найти на официальном сайте ядра.

Работа с устройствами в Linux

Давайте проведем несколько экспериментов, которые помогут вам понять как работают устройства Linux и как ими управлять в этой операционной системе. Большинство дистрибутивов Linux имеют несколько виртуальных консолей, обычно от 1 до 7, которые могут использоваться для входа в сеанс командной оболочки. К этим виртуальным консолям можно получить доступ с помощью сочетаний клавиш Ctrl+Alt+Fn, например, Ctrl+Alt+F1 для первой консоли, Ctrl+Alt+F2 для второй и так далее.

Сейчас нажмите Ctrl+Alt+F2 для перехода во вторую консоль, в некоторых дистрибутивах, кроме запроса логина и пароля, будет выведена информация про активную TTY связанную с этой консолью. Но этой информации может и не быть. В данном случае консоль будет связана с устройством tty2.

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

device4

У меня вы видите устройство /dev/pts/0, это виртуальное устройство эмулятора терминала, но если вы будете выполнять задачу в tty2, то отобразиться именно она. Теперь давайте посмотрим список tty устройств с помощью команды ls:

device1

Нас будут интересовать не все устройства, а только первые три. В этих устройствах нет ничего особенного, это обычные устройства символьного типа. Устройство tty2 подключено к консоли 2, устройство tty3 подключено к консоли 3.

Нажмите сочетание клавиш Ctrl+Alt+F3, чтобы переключиться в третью консоль, затем выполните команду:

echo "Hello world" > /dev/tty2

device6

Затем вернитесь во вторую консоль. Здесь вы увидите отправленную строку, Hello World. Все это можно повторить с помощью эмуляторов терминала в графическом интерфейсе, только здесь будут использоваться псевдо-терминальные устройства /dev/pts/*. Теперь попробуем отобразить содержимое файла fstab с помощью cat в другом терминале:

cat /etc/fstab > /dev/tty2

device5

cat test.pdf > /dev/usb/lp0

Каталог /dev/ содержит много интересных файлов устройств. Это интерфейсы доступа к аппаратному обеспечению и вам не нужно думать, что это, жесткий диск или экран. Например, вся оперативная память компьютера доступна в виде устройства /dev/mem. С помощью него вы можете иметь прямой доступ к памяти. Мы можем вывести содержимое памяти в терминал:

dd if=/dev/mem bs=2048 count=100

device2

Утилита dd, в отличие от cat дает больше контроля над процессом и позволяет указать сколько данных нужно прочитать. Но не ко всей памяти вы можете получить доступ. В ядре встроена защита, поэтому обычно, вы можете читать память, только для своего процесса.

Также тут есть файлы, которые несвязанны ни с какими реальными устройствами, это null, zero, random и urandom. Устройство /dev/null может использоваться для перенаправления вывода команд, чтобы данные никуда не выводились. Устройство /dev/zero используется для получения строки, заполненной нулями.

Вы можете использовать ту же команду dd, чтобы попытаться вывести ряд символов с устройства /dev/null:

dd if=/dev/null bs=512 count=500 | od -c

device7

Обратите внимание, что ничего выведено не будет, потому что это устройство пусто, оно только принимает данные и никуда их не сохраняет.

Устройства /dev/random и /dev/urandom позволяют получить случайные комбинации чисел или байт. Вы можете использовать такую команду, чтобы получить случайные байты информации:

device3

Для остановки нажмите Ctrl+C. Устройство urandom позволяет генерировать случайные последовательности независимые от предыдущего числа, в качестве источника энтропии используется нажатия клавиш и движения мыши.

Устройство /dev/zero позволяет получить строку, заполненную нулями. Для проверки используйте такую команду:

dd if=/dev/zero bs=512 count=500 | od -c

device8

Обратите внимание, что восьмеричные нули и нули ASCII это не одно и то же.

Создание устройств в Linux

В прошлом все устройства из каталога /dev создавались во время установки системы, а это означало, что каталог содержал все возможные поддерживаемые устройства, даже если они не использовались. Если вам нужно было создавать или переинициализировать файлы устройств, использовалась утилита mknod. Но для работы с ней вам нужно знать старший и младший номер устройства.

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

Команда mknod все еще есть, но уже существует более новая разработка - makedev. Она предоставляет очень простой интерфейс для создания устройств.

Выводы

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

Специальные файлы устройств предназначены для ввода данных с аппаратных устройств и вывода данных на них. Настоящую работу но вводу и выводу данных проделывает драйвер устройства, а специальные файлы играют роль своеобразных «порталов» связи с драйверами.

Различают символьные и блочные специальные файлы устройств, у которых минимальной единицей обмена информацией с драйверами является блок (обычно размером в 512 байт) или символ (1 байт), соответственно.

Специальные файлы устройств

Все драйверы ядра пронумерованы главными (мажорными, major) числами , а аппаратные устройства, находящиеся под их управлением, — дополнительными (минорными, minor) числами.

Например, все IDE-диски работают под управлением драйвера hd, имеющего 3 major (первичный контроллер) и 22 major (вторичный контроллер), и нумеруются как O minor (мастер-диск) и 64minor (слэйв-диск). Аналогично, SCSI-диски работают под управлением драйвера sd, имеющего 8 major , и нумеруются 0minor(первый диск), 16minor (второй диск) и т. д.

Основной характеристикой специальных файлов устройств является пара чисел major, minor (иногда называемых характеристическими числами), привязывающая их к конкретному драйверу и управляемому им устройству. Имена специальных файлов и их местоположение в дереве каталогов не имеют никакого значения, но по соглашению MAKEDEV(8) их принято располагать в каталоге /dev и именовать созвучно именам драйверов.

Специальными файлами дисковых устройств пользуются программы, управляющие структурами самого носителя, например таблицами разделов fdisk и parted, или механикой накопителя eject, или файловыми системами разделов носителя mount, fsck, mkfs и пр.

Чтение таблицы разделов диска

$ sudo fdisk -l /dev/sda

Диск /dev/sda: 500.1 Гб, 500107862016 байт
255 головок, 63 секторов/треков, 60801 цилиндров, всего 976773168 секторов

Units = секторы of 1 * 512 = 512 bytes
Размер сектора (логического/физического): 512 байт / 4096 байт

I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Идентификатор диска: 0x000c8d62

Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 2048 499711 248832 83 Linux
/dev/sda2 501758 976771071 488134657 5 Расширенный
Partition 2 does not start on physical sector boundary.
/dev/sda5 501760 976771071 488134656 8e Linux LVM

Открытие лотка DVD

$ ls -l /dev/dvd

lrwxrwxrwx 1 root root 3 марта 28 14:55 /dev/dvd -> sr0

$ eject /dev/dvd

Особенное место занимают драйверы терминалов — оконечных устройств для взаимодействия с пользователями.

Аппаратные терминалы (например, VT100), подключающиеся посредством последовательного интерфейса RS232, доступны при помощи специальных файлов /dev/ttySN драйвера приемопередатчика последовательного порта ttyS. Виртуальные терминалы, реализующиеся консолью (стандартной клавиатурой и дисплеем в алфавитно-цифровом режиме), доступны при помощи специальных файлов /dev/ttyN драйверов консоли console_ioctl и tty_ioctl.

Специальные файлы терминалов

Включение светодиодов CAPS LOCK и SCROLL LOCK

$ tty

$ setleds -L +num +scroll

Кроме специальных файлов настоящие аппаратных устройств, в арсенале Linux имеются специальные файлы псевдоустройств, такие как /dev/null, /dev/full и /dev/zero, симулирующих всегда пустое, всегда полное и бесконечно нулевое устройство, см. null.

Всегда пустое устройстово /dev/null широко применяется на практике в качестве «подавляющего» стока информации при перенаправлениях, а бесконечно нулевое устройство /dev/zero зачастую используют в качестве источника для получения нулевых файлов нужной величины.

Псевдоустройства /dev/random и /dev/urandom организуют доступ к ядерному генератору случайных и псевдослучайных чисел random, основанных на внешних событиях периферийных устройств.

Потоки случайных чисел используются в качестве источников энтропии для криптоалгоритмов, в частности используются библиотекой W:[0penSSL], или служат команде shred источником случайных байтов для надежного стирания данных.

Глава 9. Подключение и настройка аппаратных устройств

9.2. Специальные файлы устройств

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

  1. Класс устройства. В ОС Linux различают устройства блок-ориентированные и байт-ориентированные. Блок-ориентированные (или блочные) устройства, например, жесткий диск, передают данные блоками. Байт-ориентированные (или символьные) устройства, например, принтер и модем, передают данные посимвольно, как непрерывный поток байтов. Взаимодействие с блочными устройствами может осуществляться лишь через буферную память, а для символьных устройств буфер не требуется. Кроме этих двух классов устройств имеются еще два — небуферизованные байт-ориентированные устройства и именованные каналы (FIFO).
  2. Старший номер устройства, обозначающий тип устройства, например, жесткий диск или звуковая плата. Текущий список старших номеров устройств можно найти в файле /usr/include/linux/major.h. Вот небольшая выдержка из этого списка

Таблица 9.1. Старшие номера некоторых устройств

Старший номер

Тип устройства

Дисковод гибких дисков

Первый контроллер для жестких IDE-дисков

Принтер (параллельный разъем)

Второй контроллер для жестких IDE-дисков

Файлы устройств одного типа имеют одинаковые имена и различаются по номеру, прибавляемому к имени. Например, все файлы сетевых плат Ethernet имеют имена, начинающиеся на eth: eth0, eth1 и т. д.

  1. Младший номер устройства применяется для нумерации устройств одного типа, т. е. устройств с одинаковыми старшими номерами.

Если вы заглянете в каталог /dev и выполните команду ls –l , вы увидите, что эта команда вместо размера файла в байтах, как для обычного файла, выводит два числа, разделенных запятой. Это и есть старший и младший номера данного устройства. Эти номера задаются в соответствии с таблицей устройств, определенной разработчиками ядра.

Старшие номера известных ядру устройств можно увидеть, выполнив команду

[user]$ cat /proc/devices

Если вы решили подключить к системе какое-то новое устройство, необходимо вначале проверить, что в каталоге /dev имеется специальный файл (или ссылка на специальный файл) для этого устройства. Специальные файлы устройств создаются с помощью команды mknod (но, естественно, использовать команду mknod без необходимости и полного понимания последствий не стоит). Эта команда имеет следующий формат:

mknod [опции] имя_устройства тип_устройства старший_номер младший_номер

где тип_устройства может принимать одно из четырех значений:

  • b — блок-ориентированное устройство;
  • c — байт-ориентированное (символьное) устройство;
  • u — небуферизованное байт-ориентированное устройство;
  • p — именованный канал.

Для блок-ориентированных и байт-ориентированных устройств (b, c, u) нужны и старший и младший номера, для именованных каналов номера не используются. В следующем примере создается специальный файл для терминала, подключенного к порту COM3, который в Linux обозначается как /dev/ttyS2:

(устройства-терминалы представляют собой байт-ориентированные устройства со старшим номером 4 и младшими номерами, которые начинаются с 64).

Но вот о чем стоит подумать, так это о том, как дать пользователям права, необходимые для доступа к устройствам. Эти права устанавливаются через атрибуты специальных файлов. Можно, например, дать всем пользователям полные права ( chmod 666 ) на доступ к таким устройствам, как /dev/cdrom, /dev/floppy, /dev/modem и так далее. Можете поступить иначе, создав группу "cdrom", сделать /dev/cdrom принадлежащим группе cdrom, а потом добавлять пользователей в эту группу по мере необходимости. Аналогичную процедуру можно применить к другим устройствам.

Читайте также: