Одна из особенностей 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.