Linux: описание и назначение файловой системы proc и каталога /proc

Автор: | 07/03/2013
 

linux_logoОдна из особенностей Linux систем – наличие специальной “виртуальной” файловой системы proc. Точкой монтирования для этой системы всегда выступает каталог /proc.

В операционной системе FreeBSD, из соображений совместимости с некоторыми Linux-пакетами иногда используется аналог файловой системы proc, который называется linprocfs. Вот как он выглядит в файле /etc/fstab:

linproc /compat/linux/proc linprocfs rw 0 0

А вот так – в обычной Linux-системе:

proc /proc proc defaults 0 0

Почему эта файловая система виртуальная? Главное её отличие от обычных систем – отсутствие физического устройства (жесткого диска) для её размещения. Второе отличие – эта файловая система и всё её содержимое создаётся и управляется непосредственно ядром операционной системы. Любые действия в такой системе не приводят к изменениям на жестком диске – после выключения питания сервера вся информация, содержащаяся в такой файловой системе будет утеряна – как и вся другая информация в оперативной памяти машины.

Кратко говоря – все файлы в этой системе (и её каталоге /proc) не записываются на жесткий диск, а создаются и изменяются “на лету” непосредственно ядром системы в памяти сервера.

В целом, хотя так и говорят, но называть proc(fs) виртуальной файловой системой – не совсем корректно, так как имеется “настоящая” виртуальная система – VFS.

А файловую систему proc более правильно её называть “псевдо-файловой системой“.

Назначение файловой системы proc

Очень точно её назначение можно описать такими словами:

“Использование подобной псевдо-файловой системы является прямым следованием всей UNIX-философии – “Всё сущее является файлами”.

Суть для пользователя или администратора заключается в том, что в любое время без использования каких-либо дополнительных утилит он может получить необходимую информацию о текущем состоянии системы – размер и использование памяти, в том числе виртуальной, нагрузке процессора и его ядер, запущенные процессы и так далее.

Именно из этого каталога берут информацию такие утилиты мониторинга сервера как top, netstat, ps и другие.

Для примера – возьмём вывод команды ps -aux и какого-либо процесса:

# ps -ef | less
UID PID PPID C STIME TTY TIME CMD

setevoy 16204 16186 0 13:09 pts/0 00:00:00 screen

Пусть это будет в данном случае пользовательский процесс screen, который был запущен пользователем setevoy.

Каждый процесс имеет свой PID. О том, что такое PID немного подробнее можно прочитать в F.A.Q. – Что такое PID, PPID?

Для каждого PID создаётся отдельная директория в каталоге /proc, который является точкой монтирования виртуальной файловой системы proc.

Процесс screen имеет PID 16204, а PPID (Parent Process ID)16186. Посмотрим содержимое каталога /proc/16204:

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

К примеру, файл cmdline содержит информацию о команде, запустившей данный процесс:

# cat /proc/16204/cmdline
screen

Файл environ содержит всю информацию о рабочем окружении процесса.

Файл status – информацию о PID, GID, использовании памяти и процессора этим процессом и другую полезную информацию:

# cat status
Name: screen
State: S (sleeping)
Tgid: 16204
Pid: 16204
PPid: 16186
TracerPid: 0
Uid: 500 500 500 500
Gid: 500 500 84 500
Utrace: 0
FDSize: 256
Groups: 500
VmPeak: 5344 kB
VmSize: 5328 kB
VmLck: 0 kB
VmHWM: 972 kB
VmRSS: 972 kB
VmData: 396 kB
VmStk: 88 kB
VmExe: 352 kB
VmLib: 2332 kB
VmPTE: 48 kB
VmSwap: 0 kB
Threads: 1

Очень важным является файл /proc/modules, который содержит информацию обо всех загруженных в настоящий момент модулях ядра.

Краткое описание других файлов:

  • cpuinfo – информация о Центральном процессоре (CPU), известные баги, флаги и пр.;
  • dma – информация о доступных каналах DMA и драйверах, использующих их;
  • filesystems – краткая информация о файловых системах, поддерживаемых ядром;
  • interrupts – краткий список всех IRQ, данные о количестве прерываний, поступивших по каждому из них и драйверы, обслуживающие эти IRQ;
  • iomem – карта памяти;
  • ioports – карта портов ввода-вывода.
  • kcore – полный дамп памяти. Не пытайтесь копировать это файл, это может подвесить вашу систему. Используется в целях отладки;
  • kmsg – сообщения, переданные ядром, не может и не должен читаться пользователями, поскольку содержит жизненно важную информацию. В основном используется в отладочных целях;
  • ksyms – таблица символов ядра, которая используется, в основном, для отладки;
  • loadavg – содержит величину средней нагрузки за последние 1, 5 и 15 минут;
  • meminfo – информация об использовании памяти;
  • mounts – ссылка на другой файл в файловой системе /proc, который содержит информацию обо всех смонтированных файловых системах;
  • partitions – информация обо всех разделах на всех устройствах в системе;
  • pci – информация обо всех PCI устройствах в системе, включая AGP и встроенные устройства, подключенные к шине PCI;
  • swaps – информация о всех смонтированных swap-разделах;
  • uptime – uptime системы — время в секундах, прошедшее с момента последней перезагрузки;
  • version – версия ядра, включая дату сборки и версию компилятора.

В каталоге каждого процесса имеются так же несколько символических ссылок, например:

lrwxrwxrwx. 1 root root 0 Mar 7 13:58 cwd -> /home/setevoy

cwd ссылается на текущий рабочий каталог процесса;

lrwxrwxrwx. 1 root root 0 Mar 7 13:58 exe -> /usr/bin/screen

exe – симлинк на исполняемый файл процесса (программы);

lrwxrwxrwx. 1 root root 0 Mar 7 13:58 root -> /

root – указывает на корневой раздел (как правило – /)

Кроме того, в каталоге /proc ядро хранит информацию обо всем hardware-оборудовании машины.

Каталог /proc/bus содержит каталог с информациях о всех устройствах типа PCI, PCCard, USB. Информация о сети хранится в каталоге /proc/net. Жесткие диски описаны в /proc/ide и /proc/scsi. Каталог /procs/devices содержит список всех устройств системы (они разделены на две категории: «block» — блочные, «character» — символьные).

Некоторые файлы в каталоге /proc можно изменять, таким образом меняя настройки и поведения ядра. Однако, хотя просмотр файлов в этом каталоге безопасен – редактирование файлов без полной уверенности в своих действиях может привести к проблемам. Доступные для редактирования файлы как правило находятся в каталоге /proc/sys, и редактируются они с помощью специального интерфейса работы с ядром – sysctl.