ОП.05Файловая система Linuxзанятие 3Материалы

Часть 5 из 8

Устройства и сведения ядра: /dev, /proc, /sys

В этой части рассмотрим каталоги, содержимое которых не хранится на диске: файлы устройств в /dev и сведения о системе, которые ядро предоставляет через /proc и /sys.

  1. 5.1 Файлы устройств: /dev
  2. 5.2 Сведения о процессах и системе: /proc
  3. 5.3 Сведения об устройствах: /sys

5.1 Файлы устройств: /dev

В Linux к устройствам обращаются так же, как к файлам. Для каждого устройства в каталоге /dev есть специальный файл. Когда программа читает или записывает такой файл, ядро передаёт данные драйверу соответствующего устройства. Например, /dev/sda — первый диск целиком, /dev/sda1 — первый раздел на нём.

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

Обращение к устройству проходит несколько звеньев: программа → файл устройства в /dev → ядро → драйвер → само устройство. Например, программа записи дисков открывает файл /dev/sr0, ядро передаёт данные драйверу оптического привода, а драйвер управляет приводом. Программе достаточно уметь работать с файлами.

Устройства делятся на символьные и блочные. Символьные устройства передают данные потоком байтов, блочные — блоками фиксированного размера, как диски. В выводе ls -l первая буква строки обозначает тип: c — символьное, b — блочное.

Особое устройство /dev/null принимает любые данные и уничтожает их. В него перенаправляют вывод, который не нужен. Поскольку на экране при этом ничего не появляется, успешность команды проверяют по коду завершения: оболочка хранит его в переменной $?, значение 0 означает успех.

Пример. При поиске по всей системе команда find выводит много сообщений «Permission denied» о каталогах, куда у пользователя нет доступа. Чтобы эти сообщения не мешали читать результат, их направляют в /dev/null: find / -name hosts 2>/dev/null.

В терминалеУстройство /dev/null и список дисков
  1. ls -l /dev/null /dev/zero# сведения об устройствах
    что делает

    Что делает команда. Показывает сведения о двух специальных устройствах; буква c означает символьное устройство.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    /dev/null
    что показать (абсолютный путь)
    /dev/zero
    что показать (абсолютный путь)
  2. file /dev/null# тип объекта
    что делает

    Что делает команда. Определяет тип объекта /dev/null — символьное устройство.

    По частям:

    file
    определить, что находится в файле
    /dev/null
    какой файл проверить (абсолютный путь)
  3. printf "test\n" > /dev/null# записать данные в /dev/null
    что делает

    Что делает команда. Отправляет строку test в /dev/null — данные уничтожаются, на экране ничего не появляется.

    По частям:

    printf
    вывести текст по шаблону
    "test\n"
    шаблон текста (\n — перевод строки)
    >
    записать вывод в файл; если файл есть, он будет перезаписан
    /dev/null
    файл, в который записывается вывод
  4. printf "exit status: %s\n" "$?"# код завершения предыдущей команды
    что делает

    Что делает команда. Печатает код завершения предыдущей команды; 0 означает, что она выполнилась успешно.

    По частям:

    printf
    вывести текст по шаблону
    "exit status: %s\n"
    шаблон текста (\n — перевод строки; %s — место, куда подставится значение)
    "$?"
    код завершения предыдущей команды
  5. lsblk -o NAME,TYPE,SIZE,MOUNTPOINTS# блочные устройства: диски и разделы
    что делает

    Что делает команда. Показывает диски и разделы: имя, тип, размер и куда они подключены.

    По частям:

    lsblk
    показать диски и разделы
    -o NAME,TYPE,SIZE,MOUNTPOINTS
    вывести только столбцы NAME,TYPE,SIZE,MOUNTPOINTS
Результат

строка /dev/null начинается с буквы c, код завершения — 0.

Снимок 5.1Ubuntu 24.04
  1. 1символьное устройство
  2. 2тип объекта по данным команды file
  3. 3код завершения 0 — запись выполнена
Устройство /dev/null и список блочных устройств виртуальной машины.Весь снимок ↗

Устройство /dev/null и список блочных устройств виртуальной машины.

Что показывает снимок. /dev/null — символьное устройство; запись в него прошла успешно с кодом 0; lsblk показывает диски и разделы.

Где это пригодится. Код завершения проверяют в скриптах, чтобы понять, выполнилась ли команда. lsblk используют, чтобы найти подключённый диск или флешку перед монтированием.

5.2 Сведения о процессах и системе: /proc

Каталог /proc не находится на диске. На нём смонтирована псевдофайловая система proc: её файлы создаёт ядро, а содержимое формируется в момент чтения. Через эти файлы можно узнать состояние системы: объём памяти, время работы, сведения о каждом запущенном процессе. Для каждого процесса в /proc есть каталог, названный его номером (PID).

Файлы /proc похожи на табло прибытия поездов на вокзале: табло не хранит расписание на месяц вперёд, а показывает текущее положение дел в тот момент, когда вы на него смотрите. Пример. Команды free (сколько свободно памяти) и top (список работающих процессов) берут данные из файлов /proc.

ПутьЧто содержит
/proc/meminfoсведения об оперативной памяти
/proc/uptimeвремя работы системы в секундах
/proc/cpuinfoсведения о процессоре
/proc/номер процесса/каталог конкретного процесса
/proc/номер процесса/cwdссылка на текущий каталог процесса
/proc/номер процесса/exeссылка на исполняемый файл процесса
В терминалеСведения о памяти и текущем процессе
  1. head -8 /proc/meminfo# сведения об оперативной памяти
    что делает

    Что делает команда. Выводит первые восемь строк сведений об оперативной памяти, которые формирует ядро.

    По частям:

    head
    оставить только первые строки
    -8
    сколько первых строк оставить: 8
    /proc/meminfo
    из какого файла (абсолютный путь)
  2. echo $$# номер процесса текущей оболочки
    что делает

    Что делает команда. Печатает номер процесса текущей оболочки.

    По частям:

    echo
    вывести текст или значение переменной
    $$
    номер процесса текущей оболочки
  3. readlink /proc/$$/cwd# текущий каталог этого процесса
    что делает

    Что делает команда. Показывает текущий каталог оболочки, узнавая его через /proc.

    По частям:

    readlink
    показать, куда указывает символическая ссылка
    /proc/$$/cwd
    какую ссылку проверить (абсолютный путь; $$ — номер процесса текущей оболочки)
  4. readlink /proc/$$/exe# исполняемый файл процесса
    что делает

    Что делает команда. Показывает, какая программа выполняется в процессе оболочки, — /usr/bin/bash.

    По частям:

    readlink
    показать, куда указывает символическая ссылка
    /proc/$$/exe
    какую ссылку проверить (абсолютный путь; $$ — номер процесса текущей оболочки)
  5. findmnt -T /proc/meminfo -o TARGET,SOURCE,FSTYPE# тип файловой системы
    что делает

    Что делает команда. Показывает, что /proc/meminfo находится на файловой системе proc, а не на диске.

    По частям:

    findmnt
    показать подключённые файловые системы
    -T /proc/meminfo
    найти файловую систему, в которой лежит путь /proc/meminfo
    -o TARGET,SOURCE,FSTYPE
    вывести только столбцы TARGET,SOURCE,FSTYPE
Результат

тип файловой системы — proc.

Снимок 5.2Ubuntu 24.04
  1. 1общий объём памяти
  2. 2память, доступная для новых программ
  3. 3номер процесса оболочки
  4. 4текущий каталог процесса
  5. 5файловая система proc
Ядро предоставляет сведения о памяти и о процессе оболочки.Весь снимок ↗

Ядро предоставляет сведения о памяти и о процессе оболочки.

Что показывает снимок. Ядро выдаёт сведения о памяти и о процессе оболочки: его номер, текущий каталог и исполняемый файл.

Где это пригодится. Через /proc узнают, сколько памяти свободно и что делает конкретный процесс. На этих файлах основаны системные мониторы и диспетчеры задач.

Отличие файлов /proc от обычных видно на /proc/uptime, где первое число — время работы системы в секундах. Размер файла равен нулю, но при каждом чтении содержимое новое. Если скопировать файл, копия окажется обычным файлом на диске, и её содержимое меняться не будет.

В терминалеФайл /proc/uptime и его копия
  1. cd ~/linux-fhs-lab
    что делает

    Что делает команда. Переходит в рабочий каталог урока linux-fhs-lab.

    По частям:

    cd
    сменить текущий каталог
    ~/linux-fhs-lab
    куда перейти (путь от домашнего каталога)
  2. rm -f saved-uptime.txt# удалить копию от прошлого запуска
    что делает

    Что делает команда. Удаляет копию от прошлого запуска, если она есть; если файла нет, ошибки не будет.

    По частям:

    rm
    удалить файл
    -f
    не выдавать ошибку, если файла нет
    saved-uptime.txt
    какой файл удалить (путь относительно текущего каталога)
  3. ls -l /proc/uptime# размер файла
    что делает

    Что делает команда. Показывает сведения о файле /proc/uptime; его размер равен нулю.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    /proc/uptime
    что показать (абсолютный путь)
  4. cat /proc/uptime
    что делает

    Что делает команда. Выводит время работы системы в секундах, которое ядро вычисляет в момент чтения.

    По частям:

    cat
    вывести содержимое файла на экран
    /proc/uptime
    какой файл вывести (абсолютный путь)
  5. cp /proc/uptime saved-uptime.txt# сделать копию
    что делает

    Что делает команда. Сохраняет текущее содержимое /proc/uptime в обычный файл saved-uptime.txt.

    По частям:

    cp
    скопировать файл
    /proc/uptime
    что копировать (абсолютный путь)
    saved-uptime.txt
    куда копировать (путь относительно текущего каталога)
  6. sleep 5# подождать 5 секунд
    что делает

    Что делает команда. Ничего не делает пять секунд, чтобы следующее чтение показало новое значение.

    По частям:

    sleep
    подождать указанное число секунд
    5
    5 секунд
  7. cat /proc/uptime
    что делает

    Что делает команда. Выводит время работы системы в секундах, которое ядро вычисляет в момент чтения.

    По частям:

    cat
    вывести содержимое файла на экран
    /proc/uptime
    какой файл вывести (абсолютный путь)
  8. cat saved-uptime.txt# содержимое копии
    что делает

    Что делает команда. Выводит содержимое копии — оно не изменилось.

    По частям:

    cat
    вывести содержимое файла на экран
    saved-uptime.txt
    какой файл вывести (путь относительно текущего каталога)
  9. ls -l saved-uptime.txt# размер копии
    что делает

    Что делает команда. Показывает сведения о копии; у неё настоящий размер в байтах.

    По частям:

    ls
    вывести содержимое каталога
    -l
    подробный список: права, владелец, размер, дата
    saved-uptime.txt
    что показать (путь относительно текущего каталога)
  10. findmnt -n -o TARGET,FSTYPE -T /proc/uptime | cat# файловая система оригинала
    что делает

    Что делает команда. Коротко показывает, что оригинал лежит на файловой системе proc.

    По частям:

    findmnt
    показать подключённые файловые системы
    -n
    не выводить строку заголовков
    -o TARGET,FSTYPE
    вывести только столбцы TARGET,FSTYPE
    -T /proc/uptime
    найти файловую систему, в которой лежит путь /proc/uptime
    |
    передать вывод левой команды на вход следующей
    cat
    вывести полученный текст как есть; findmnt тогда печатает простой список без рамок дерева
  11. findmnt -n -o TARGET,FSTYPE -T saved-uptime.txt | cat# файловая система копии
    что делает

    Что делает команда. Коротко показывает, что копия лежит на обычной файловой системе.

    По частям:

    findmnt
    показать подключённые файловые системы
    -n
    не выводить строку заголовков
    -o TARGET,FSTYPE
    вывести только столбцы TARGET,FSTYPE
    -T saved-uptime.txt
    найти файловую систему, в которой лежит путь saved-uptime.txt
    |
    передать вывод левой команды на вход следующей
    cat
    вывести полученный текст как есть; findmnt тогда печатает простой список без рамок дерева
Результат

значение в /proc/uptime увеличилось, в копии осталось прежним.

Снимок 5.3Ubuntu 24.04
  1. 1размер 0 байт
  2. 2два чтения с интервалом в пять секунд
  3. 3копия не изменилась
  4. 4оригинал на proc, копия на обычной файловой системе
Содержимое /proc/uptime меняется при каждом чтении, содержимое копии — нет.Весь снимок ↗

Содержимое /proc/uptime меняется при каждом чтении, содержимое копии — нет.

Что показывает снимок. Размер /proc/uptime равен нулю, но содержимое меняется при каждом чтении; копия на диске не меняется.

Где это пригодится. Сведения из /proc нельзя сохранить копированием на будущее. Чтобы следить за изменениями, файл читают заново, например в скрипте мониторинга.

5.3 Сведения об устройствах: /sys

Каталог /sys — ещё одна псевдофайловая система, sysfs. Если /proc в основном описывает процессы, то /sys описывает устройства и драйверы. Каждый файл в нём содержит одно значение — один параметр устройства. Например, в /sys/class/net перечислены сетевые интерфейсы компьютера.

Пример. На ноутбуке в /sys/class/backlight находятся параметры подсветки экрана, а в /sys/class/power_supply — сведения о батарее: уровень заряда и состояние зарядки. Регулятор яркости в настройках Ubuntu меняет значение именно в таком файле.

В терминалеСетевые интерфейсы
  1. ls /sys# разделы /sys
    что делает

    Что делает команда. Показывает разделы /sys со сведениями об устройствах.

    По частям:

    ls
    вывести содержимое каталога
    /sys
    что показать (абсолютный путь)
  2. ls /sys/class/net# список сетевых интерфейсов
    что делает

    Что делает команда. Показывает сетевые интерфейсы, которые видит система.

    По частям:

    ls
    вывести содержимое каталога
    /sys/class/net
    что показать (абсолютный путь)
  3. cat /sys/class/net/lo/operstate# состояние интерфейса lo
    что делает

    Что делает команда. Выводит состояние сетевого интерфейса lo.

    По частям:

    cat
    вывести содержимое файла на экран
    /sys/class/net/lo/operstate
    какой файл вывести (абсолютный путь)
  4. findmnt -T /sys -o TARGET,SOURCE,FSTYPE
    что делает

    Что делает команда. Показывает, что /sys находится на файловой системе sysfs.

    По частям:

    findmnt
    показать подключённые файловые системы
    -T /sys
    найти файловую систему, в которой лежит путь /sys
    -o TARGET,SOURCE,FSTYPE
    вывести только столбцы TARGET,SOURCE,FSTYPE
Результат

в списке есть интерфейс lo, тип файловой системы — sysfs.

Снимок 5.4Ubuntu 24.04
  1. 1сетевая карта
  2. 2lo — внутренний интерфейс компьютера
  3. 3файловая система sysfs
Сетевые интерфейсы виртуальной машины в /sys.Весь снимок ↗

Сетевые интерфейсы виртуальной машины в /sys.

Что показывает снимок. В /sys/class/net перечислены сетевые интерфейсы, а файл operstate содержит состояние интерфейса.

Где это пригодится. Через /sys проверяют, какие сетевые карты видит система и включены ли они. Это помогает при настройке и диагностике сети.

Итоги части 5

  • Устройства представлены специальными файлами в /dev; c — символьные, b — блочные.
  • Код завершения последней команды хранится в $?, 0 означает успех.
  • /proc и /sys — псевдофайловые системы: содержимое их файлов формирует ядро при чтении.
  • /proc описывает процессы и состояние системы, /sys — устройства.

В отчётСнимок с /proc/uptime и его копией.

Открыть в отдельной вкладке ↗