Библиотека сайта 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.