Каталог /proc в Linux
В этой статье мы заглянем внутрь каталога /proc и познакомимся с его содержимым. Каталог /proc присутствует во всех системах Linux, независимо от версии или архитектуры.
Первое на чем хотелось бы остановиться, это развеять одно распространенное заблуждение. Оно заключается в том, что каталог /proc НЕ является настоящей файловой системой в прямом смысле этого слова. Это, так называемая, виртуальная файловая система. В procfs содержится информация о процессах и другая системная информация. Он сопоставляется с /proc и монтируется во время загрузки операционной системы.
Итак, давайте перейдем в этот каталог.
Теперь взглянем на содержимое этого каталог
Первое, что можно заметить, это то, что есть несколько знакомых по названиям файлов, а также куча пронумерованных каталогов. Эти каталоги представляют собой процессы, более известные как PID, и внутри них команду, которая их занимает. Файлы содержат системную информацию, такую как память (meminfo), информацию о процессоре (cpuinfo) и доступные файловые системы.
Заглянем в один из файлов:
$ cat /proc/meminfo
MemTotal: 5885640 kB
MemFree: 3411236 kB
MemAvailable: 5208636 kB
Buffers: 5020 kB
Cached: 1866900 kB
SwapCached: 0 kB
Active: 823052 kB
Inactive: 1219040 kB
Active(anon): 640 kB
Inactive(anon): 170408 kB
Active(file): 822412 kB
Inactive(file): 1048632 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1048572 kB
SwapFree: 1048572 kB
.
Как можно видеть, файл /proc/meminfo содержит много информации о памяти вашей системы, включая общий доступный объем (в КБ) и свободный объем. Выполнение команды cat для любого из файлов в /proc выведет их содержимое. Информацию о файлах можно получить на страницах руководств, выполнив:
Краткое описание этих файлов следующее:
- /proc/cmdline — параметры загрузки ОС
- /proc/console s — информация об используемой консоли
- /proc/devices — драйверы устройств, работающие в данный момент
- /proc/dma — информация о текущих каналах DMA
- /proc/fb — устройства фреймбуфера
- /proc/filesystems — файловые системы, поддерживаемые текущей версией ядра
- /proc/iomem — здесь содержится текущая карта системной памяти для устройств
- /proc/ioports — зарегистрированные диапазоны портов и устройства, которые их используют.
- /proc/loadavg — показывает нагрузку на систему в разрезе времени, а так же количество запущенных процессов и PID последнего процесса.
- /proc/locks — файлы заблокированные ядром
- /proc/meminfo — информация о системной памяти.
- /proc/misc — драйверы для подключаемых устройств.
- /proc/modules — загруженные в данный момент модули ядра.
- /proc/mounts — точки монтирования, используемые системой.
- /proc/partitions — информация о разделах, доступных системе.
- /proc/pci — информация о pci-устройствах.
- /proc/stat — записи и различная статистическая информация, хранящаяся с момента последней перезагрузки.
- /proc/swaps — информация о месте в разделе Swap.
- /proc/uptime — информация о времени работы с момента запуска системы ( в секундах)
- /proc/version — версия ядра, версия GCC и установленный дистрибутив Linux.
В пронумерованных каталогах /proc находится несколько файлов и ссылок. Номера этих каталогов соответствуют PID выполняемой в них команды. Давайте рассмотрим пример. В моей системе есть имя папки /proc/507:
Давайте заглянем в файл status
$ cat status
Name: scsi_tmf_0
Umask: 0000
State: I (idle)
Tgid: 507
Ngid: 0
Pid: 507
PPid: 2
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
NStgid: 507
NSpid: 507
NSpgid: 0
NSsid: 0
Threads: 1
SigQ: 7/22833
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffffffffff
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 000001ffffffffff
CapEff: 000001ffffffffff
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
NoNewPrivs: 0
Seccomp: 0
Speculation_Store_Bypass: thread vulnerable
Cpus_allowed: 3
Cpus_allowed_list: 0-1
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 2
nonvoluntary_ctxt_switches: 0
Разберем, что все это значит? Важная часть находится наверху. Из файла состояния видно, что этот процесс принадлежит scsi_tmf_0. Находится в состоянии простоя, и его идентификатор процесса, равен 507. Мы также можем видеть, кто запустил процесс. Здесь UID и GID равны 0, что указывает на то, что этот процесс принадлежит пользователю root.
Во всех пронумерованных каталога набор файлов одинаковый, но самые интересные для работы следующие:
- cmdline — командная строка процесса;
- environ — переменные окружения;
- fd — файловые дискрипторы;
- limits — информация о лимитах процесса;
- mounts — сопутствующая информация о монтировании
В каталоге также присутствую несколько ссылок:
- cwd — ссылка на текущий рабочий каталог;
- exe — ссылка на исполняемый файл процесса
- root — ссылка на рабочий каталог процесса
Заключение
Данная статья поможет начать знакомство с каталогом /proc. Именно из этого каталога берут свою информацию такие команлы, как uptime, lsof, mount, ps и так далее.