Лекция №6 - каталоги /proc, /sys. Блочные и символьные файлы-устройства

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

Файлы-устройства делятся на два типа: блочные и символьные. Еще можно встретить в литературе блочно-ориентированные и байт-ориентированные. Отличия между типами в способе “общения” с компонентами. С блочными файлами-устройствами обмен информацией идет порциями или блоками. Типичным блочным устройством является жесткий диск. Также следует отметить, что информацию можно получить из любой части блочного файла-устройства. С символьными файлами-устройствами обмен информацией идет последовательно. Пример такого устройства - com-порт.

Выполните команду ls /dev/ и посмотрите на результат. Вы как раз и увидите файлы-устройства присущие вашей аппаратоной конфигурации. Рассмотрим сначала символьные файлы-устройства. Я уже упоминал о таких устройствах как tty (консоль) и ttyS0 (порт com1). аudio, dsp, mixer - файл-устройства отображающие звуковую карту. Виртуальные устройства random и urandom - позволяют генерировать псевдослучайные числа. Причем устройство urandom генерирует последовательность исключительно математическими методами, а random использует для генерации так называемый “шум”, который генирируется в процессе работы разлычными аппаратными компонентами. Зарегистрируйтесь во второй и третьей консоли. Наберите во второй консоли команду hexdump /dev/random . Вы должны увидеть шестнадцатеричные числа. Подождите некоторое время и вы увидите как количество чисел растет. Чтобы ускорить процесс можете перейти на третью консоль и понажимать на клавиши. Вернитесь на вторую консоль и прервите выполнение команды hexdump комбинацией клавиш ctrl+C. Наберите теперь команду hexdump /dev/urandom и увидите как последовательность чисел генерируется очень быстро, так как используются только математические методы генерации последовательности.

Еще два интересных файла-устройства это zero и null . zero - постоянно выдает нули. Это может быть нужно например, если нужно очистить жесткий диск. Для этого можно использовать команду dd if=/dev/zero of=/dev/sdc . Только не нужно выполнять эту команду на своем рабочем диске. Что делает эта команда? В качестве входящих данных (if - input file), используется информация из /dev/zero (то есть нули), в качестве приемника данных (of - output file) используется жесткий диск. В результате выполнения весь диск заполниться нулями. Null - не содержит в себе ничего. И запись в это устройство - это запись в никуда. Это может быть полезно если мы хотим чтобы, информация выдаваемая командами не высвечивалась на консоли. Например, команда echo Hello! > /dev/null не отобразит на консоли слово Hello!, так как вывод перенаправлен в /dev/null.

Давайте выполним команду mount без параметров, чтобы посмотреть какие устройства у нас смонтированы и с какими файловыми системами. Нас интересует строка относящаяся к каталогу /proc. Выглядит она примерно так: proc on /proc type proc (rw). Как можете видеть файловая система здесь называется proc. Это виртуальная файловая система, в которой отображаются файлы-процессы. Эту виртуальную файловую систему Linux создает в виртуальной памяти, поэтому на жестком диске она не занимает место, да и многие файлы в памяти также не занимают место так как на самом деле не содержат в себе информации. Выполните команду df -ha и убедитесь, что действительно каталог /proc занимает 0 байт пространства. Хотя информацию можно получить по команде cat (less), но на самом деле информация эта генерируется ядром на лету - cat /proc/cpuinfo . То есть /proc/cpuinfo - это не текстовый файл. Другими словами через файлы содержащиеся в каталоге /proc мы получаем доступ к различным статистическим (и не только) данным ядра. Например, команда cat /proc/net/dev покажет статистическую информацию по сетевым устройствам - количество принятых/переданных байт и пакетов и другую. А команда cat /proc/sys/net/ipv4/ip_forward - покажет разрешена ли в нашей системе пересылка (форвардинг) пакетов. Большинство файлов в каталоге /proc доступны только для чтения, но есть и такие которые доступны для записи (для пользователя root). Файл ip_forward как раз относится к последним. Если у вас там 0, то форвардинг отключен. Но мы можем включить его следующим способом (в некоторых дистрибутивах такие операции не пройдут): echo 1 > /proc/sys/net/ipv4/ip_forward. По этой команде мы изменим содержимое с 0 на 1 и тем самым разрешим форвардинг (после перезагрузки системы снова будет 0). По команде ls /proc/ вы можете увидеть много директорий с числовым именем. Эти имена соответствуют идентификаторам процессов запущенных в системе. В каждой такой папке содержится разнообразная информация о процессе. Подробнее можно ознакомится набрав man 5 proc .

Каталог /sys имеет свою файловую систему sysfs. В чем-то содержимое каталога (по назначению) /sys схоже с каталогом /proc . Основное отличие в том, что файлы в /sys описывают реальную конфигурацию компьютера на текущий момент. /sys очень тесно связан с udev если вы подключаете (отключаете) устройства, содержимое каталога /sys динамически меняется. Можно посмотреть на примере. Выполните команду ls /sys/bus/usb/devices/ , чтобы посмотреть текущие usb-устройства в системе. Теперь подключите флеш-накопитель и выполните команду ls /sys/bus/usb/devices/ еще раз. Вы увидите, что теперь устройств стало больше.

Еще раз хочу обратить внимание на то, что содержимое директорий /proc и /sys формируется ядром на этапе загрузки. Загрузитесь с любого LiveCD диска зайдите в директории /proc и /sys на вашем диске и убедитесь, что они пустые.

На следующей лекции поговорим о регулярных файлах и линках.

Читать другие лекции по курсу Администратор ПК с Linux

Статьи и новости схожей тематики:

Оставьте свой отзыв