Изучаем файловую систему /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.
http://rus-linux.net/MyLDP/file-sys/file-system-proc.html
|