2004 г.
Oskar Andreasson, перевод
Андрея Киселева
Глава 1. Введение
Файловая система /proc -- это виртуальная файловая система, которой не существует в действительности, иначе как в "голове" ядра. Файловая системв /proc -- это особенность ядра Linux. Она может присутствовать и в других операционных системах, но с иной функциональностью и другим предназначением.
Под термином "Виртуальные файловые системы" подразумеваются такие файловые системы, которые не имеют образа на жестком диске, в отличие от обычных файловых систем. Ничто из того, что вы делаете в виртуальной файловой системе не приводит к изменению содержимого на магнитных носителях -- только в оперативной памяти. Виртуальные файловые системы создаются ядром "на лету", в процессе загрузки и изменяются только тогда, когда вы входите в них или выполняете какие либо операции в их пределах.
| Виртуальная файловая система может иметь различные предназначения. Она может использоваться как простой RAM-диск, куда могут помещаться файлы на временное хранение. На бездисковых станциях Amiga она используется при копировании файлов с дискеты на дискету. Сначала файл(ы) копируется в память, затем в дисковод вставляется другая дискета и файл(ы) копируется на нее. Однако, эти файлы пропадут как только компьютер будет выключен или перезагружен. |
Виртуальная файловая система /proc содержит большое количество информации, собранной из ядра во время исполнения и модифицируется всякий раз, когда вы пытаетесь просмотреть ее. Вся информация отображается как обычная файловая система -- вы можете просматривать файлы, путешествовать по дереву каталогов и т.п., то есть все то, что вы можете делать и в обычной файловой системе. Однако, большинство файлов в файловой системе /proc доступны только для чтения, т.е. не могут быть изменены. Эти файлы предназначены лишь для того, чтобы предоставить необходимую вам информацию.
Одним из каталогов, доступных на чтение-запись, является каталог /proc/sys. Все переменные ("файлы"), расположенные в этом каталоге и его подкаталогах доступны как для чтения, так и для записи.
В этом документе рассматривается Internet Protocol версии 4 (IPv4). Соответсвующий ему раздел находится в каталоге /proc/sys/net/ipv4. Здесь находятся все настройки стека IPv4, включая TCP, UDP, ICMP и ARP.
Файловая система /proc содержит несколько основных каталогов и файлов, которые я опишу прежде чем перейти к рассмотрению стека ipv4.
Прежде всего следует упомянуть о том, что эта файловая система содержит огромное количество нумерованных каталогов. Каждый из этих нумерованных каталогов имеет непосредственное отношение к тому или иному активному процессу в системе. Когда запускается новый процесс -- для него создается новый каталог и все данные, касающиеся этого процесса помещаются в данный каталог, сюда помещается командная строка, которой был запущен процесс, ссылка на "текущий рабочий каталог" (cwd), переменные окружения, ссылка на исполняемый файл и т.п..
Кроме того, здесь находится довольно много других файлов и каталогов. Ниже приводится полный список:
[blueflux@work1 ]$ ls -l /proc
total 0
....
-r--r--r-- 1 root root 0 Sep 19 18:09 apm
dr-xr-xr-x 4 root root 0 Sep 19 10:52 bus
-r--r--r-- 1 root root 0 Sep 19 18:09 cmdline
-r--r--r-- 1 root root 0 Sep 19 18:09 cpuinfo
-r--r--r-- 1 root root 0 Sep 19 18:09 devices
-r--r--r-- 1 root root 0 Sep 19 18:09 dma
dr-xr-xr-x 4 root root 0 Sep 19 18:09 driver
-r--r--r-- 1 root root 0 Sep 19 18:09 execdomains
-r--r--r-- 1 root root 0 Sep 19 18:09 fb
-r--r--r-- 1 root root 0 Sep 19 18:09 filesystems
dr-xr-xr-x 2 root root 0 Sep 19 18:09 fs
dr-xr-xr-x 4 root root 0 Sep 19 18:09 ide
-r--r--r-- 1 root root 0 Sep 19 18:09 interrupts
-r--r--r-- 1 root root 0 Sep 19 18:09 iomem
-r--r--r-- 1 root root 0 Sep 19 18:09 ioports
dr-xr-xr-x 18 root root 0 Sep 19 18:09 irq
-r-------- 1 root root 268374016 Sep 19 18:09 kcore
-r-------- 1 root root 0 Sep 19 10:52 kmsg
-r--r--r-- 1 root root 0 Sep 19 18:09 ksyms
-r--r--r-- 1 root root 0 Sep 19 18:09 loadavg
-r--r--r-- 1 root root 0 Sep 19 18:09 locks
-r--r--r-- 1 root root 0 Sep 19 18:09 mdstat
-r--r--r-- 1 root root 0 Sep 19 18:09 meminfo
-r--r--r-- 1 root root 0 Sep 19 18:09 misc
-r--r--r-- 1 root root 0 Sep 19 18:09 modules
lrwxrwxrwx 1 root root 11 Sep 19 18:09 mounts -> self/mounts
-rw-r--r-- 1 root root 208 Sep 19 11:02 mtrr
dr-xr-xr-x 3 root root 0 Sep 19 18:09 net
dr-xr-xr-x 2 root root 0 Sep 19 18:09 nv
-r--r--r-- 1 root root 0 Sep 19 18:09 partitions
-r--r--r-- 1 root root 0 Sep 19 18:09 pci
dr-xr-xr-x 3 root root 0 Sep 19 18:09 scsi
lrwxrwxrwx 1 root root 64 Sep 19 12:01 self -> 2864
-rw-r--r-- 1 root root 0 Sep 19 18:09 slabinfo
-r--r--r-- 1 root root 0 Sep 19 18:09 stat
-r--r--r-- 1 root root 0 Sep 19 18:09 swaps
dr-xr-xr-x 10 root root 0 Sep 19 14:39 sys
dr-xr-xr-x 2 root root 0 Sep 19 18:09 sysvipc
dr-xr-xr-x 4 root root 0 Sep 19 18:09 tty
-r--r--r-- 1 root root 0 Sep 19 18:09 uptime
-r--r--r-- 1 root root 0 Sep 19 18:09 version
[blueflux@work1 proc]$
Большая часть информации находится в формате, удобном для восприятия. Однако есть файлы, к которым не следует "прикасаться", например: kcore. Этот файл хранит отладочную информацию ядра. Если попробовать просмотреть его от начала до конца (хотя бы с помощью команды cat), то это может привести к зависанию и краху системы. В некоторых случаях, попытка скопировать kcore в обычный файл может привести к заполнению всего свободного пространства, имеющегося на заданном разделе жесткого диска. Это еще раз напоминает нам о том, что нужно быть очень и очень осторожными. В большинстве своем содержимое файловой системы /proc безопасно для просмотра, исключение составляют лишь некоторые файлы. Вот краткое описание некоторых переменных (файлов), находящихся в корне файловой системы /proc, содержащих важную информацию:
cmdline - Командная строка, переданная ядру во время загрузки.
cpuinfo - Информация о Центральном Процессорном Устройстве (CPU), известные баги, флаги и пр.
dma - Информация о доступных каналах DMA и драйверах, использующих их.
filesystems - Краткая информация о файловых системах, поддерживаемых ядром.
interrupts - Краткий список всех IRQ, данные о количестве прерываний, поступивших по каждому из них и драйверы, обслуживающие эти IRQ.
iomem - Карта памяти.
ioports - Карта портов ввода-вывода.
kcore - Полный дамп памяти. Не пытайтесь копировать это файл, это может подвесить вашу систему. Используется в целях отладки.
kmsg - Сообщения, переданные ядром, не может и не должен читаться пользователями, поскольку содержит жизненно важную информацию. В основном используется в отладочных целях.
ksyms - Таблица символов ядра, которая используется, в основном, для отладки.
loadavg - Содержит величину средней нагрузки за последние 1, 5 и 15 минут.
meminfo - Информация об использовании памяти.
modules - Информация о всех загруженных модулях ядра.
mounts - Ссылка на другой файл в файловой системе /proc, который содержит информацию обо всех смонтированных файловых системах.
partitions - Информация обо всех разделах на всех устройствах в системе.
pci - Информация обо всех PCI устройствах в системе, включая AGP и встроенные устройства, подключенные к шине PCI.
swaps - Информация о всех смонтированных swap-разделах.
uptime - uptime системы -- время в секундах, прошедшее с момента последней перезагрузки.
version - Версия ядра, включая дату сборки и версию компилятора.
Список основных каталогов:
bus - Информация обо всех аппаратных шинах, таких как USB, PCI и ISA.
ide - Информация обо всех шинах IDE в системе и IDE-устройствах.
net - Некоторая базовая информация и статистика сетевой подсистемы.
scsi - Информация о SCSI шинах в системе и SCSI-устройствах.
sys - Набор переменных, которые могут быть изменены. Сюда входит раздел /proc/sys/net/ipv4, который будет обсуждаться ниже.
Как видите -- в файловой системе /proc имеются, буквально, сотни файлов, содержащих важную информацию. Мы не рассмотрели и половины от их общего количества. Как я уже упоминал -- мы будем расматривать только раздел настроек и переменных ipv4, доступных через интерфейс sysctl.