Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Изучаем файловую систему /proc в Linux

Оригинал: Exploring /proc File System in Linux
Автор: Rob Krul
Дата публикации: 25 октября 2013 года
Перевод: А. Кривошей
Дата перевода: июнь 2014 г.

Сегодня мы собираемся заглянуть в каталог /proc и поближе познакомиться с его содержимым. Директория /proc присутствует во всех дистрибутивах Linux, независимо от его типа и архитектуры.

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

Во-первых, давайте перейдем в директорию /proc и осмотримся там:

# cd /proc

Первое, на что вы обратите внимание - некоторые знакомые названия файлов и целая куча пронумерованных директорий. Пронумерованные каталоги представляют процессы, более известные, как PID, а внутри них - команды, с помощью которых они были запущены. Файлы содержат системную информацию, например о памяти (meminfo), процессоре (cpuinfo) и доступных файловых системах.

Посмотрим на один из файлов:

# cat /proc/meminfo

MemTotal:         604340 kB
MemFree:           54240 kB
Buffers:           18700 kB
Cached:           369020 kB
SwapCached:            0 kB
Active:           312556 kB
Inactive:         164856 kB
Active(anon):      89744 kB
Inactive(anon):      360 kB
Active(file):     222812 kB
Inactive(file):   164496 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         89724 kB
Mapped:            18012 kB
Shmem:               412 kB
Slab:              50104 kB
SReclaimable:      40224 kB
...

Как вы можете видеть, в /proc/meminfo содержится целая куча информации о памяти вашей системы, включая общий ее объем (в Кб) и доступный в настоящее время в верхних двух строках.

Запустив команду cat с именем любого из файлов в /proc, мы выведем его содержимое. Для каждого файла имеется man-страница:

# man 5 /proc/filename

Я кратко опишу назначение файлов в /proc:

/proc/cmdline - информация о ядре.
/proc/console - информация о текущих консолях, включая tty.
/proc/devices - драйверы устройств, настроенных в настоящее время под работающее ядро.
/proc/dma - информация о каналах DMA.
/proc/fb - устройства фреймбуфера.
/proc/filesystems - текущие файловые системы, поддерживаемые ядром.
/proc/iomem - карта текущей системной памяти для устройств.
/proc/ioports - области для зарегистрированных портов ввода и вывода для коммуникации с устройством.
/proc/loadavg - средняя загрузка системы.
/proc/locks - файлы, заблокированные в настоящее время ядром.
/proc/meminfo - информация о системной памяти (пример выше).
/proc/misc - различные драйвера, зарегистрированные для различных основных устройств.
/proc/modules - загруженные в настоящее время модули ядра.
/proc/mounts - список всех точек монтирования, используемых системой.
/proc/partitions - детальная информация о доступных разделах.
/proc/pci - информация о каждом устройстве PCI.
/proc/stat - различные статистические данные с последней перезагрузки.
/proc/swap - информация о пространстве подкачки.
/proc/uptime - время работы системы (в секундах).
/proc/version - версии ядра, gcc и дистрибутива Linux.

В нумерованных директориях вы увидите несколько файлов и ссылок. Номера этих директорий коррелируют с PID команды, работающей в его рамках. Давайте посмотрим пример. В моей системе есть директория /proc/12:

# cd /proc/12
# ls

attr        coredump_filter  io         mounts      oom_score_adj  smaps    wchan
autogroup   cpuset           latency    mountstats  pagemap        stack
auxv        cwd              limits     net         personality    stat
cgroup      environ          loginuid   ns          root           statm
clear_refs  exe              maps       numa_maps   sched          status
cmdline     fd               mem        oom_adj     schedstat      syscall
comm        fdinfo           mountinfo  oom_score   sessionid      task

Если я запущу команду cat:

# cat /proc/12/status

То получу следующий вывод:

Name:	xenwatch
State:	S (sleeping)
Tgid:	12
Pid:	12
PPid:	2
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
FDSize:	64
Groups:
Threads:	1
SigQ:	1/4592
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000000000
SigIgn:	ffffffffffffffff
SigCgt:	0000000000000000
CapInh:	0000000000000000
CapPrm:	ffffffffffffffff
CapEff:	ffffffffffffffff
CapBnd:	ffffffffffffffff
Cpus_allowed:	1
Cpus_allowed_list:	0
Mems_allowed:	00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	84
nonvoluntary_ctxt_switches:	0

Итак, что все это значит? Самой важной частью является верхняя. Мы можем видеть, что процесс относится к xenwatch. Его текущий статус - спящий (sleeping), а ID процесса - 12. Мы также можем посмотреть, кто запустил процесс. Так как UID и GID равны 0, это показывает, что процесс принадлежит пользователю root.

В любой нумерованной директории вы увидите похожую структуру файлов. Самые важные из них:

cmdline - команда, запустившая процесс;
environ - переменные окружения;
fd - дескрипторы файла;
limits - содержит информацию о лимитах процесса;
mounts - информация о монтировании;

Вы также можете обратить внимание на ссылки в пронумерованной директории:

cwd - ссылка на текущую рабочую директорию процесса;
exe - ссылка на исполняемый файл процесса;
root - ссылка на рабочую директорию процесса;

Это руководство поможет вам поближе познакомиться с директорией /proc.



Средняя оценка 5 при 1 голосовавших