Файловая система /proc.
Метки: ICMP | proc | sysctl
Среда, 25 февраля 2009 г.
Просмотров: 3128
Довольно интересной функцией Linux и других UNIX-систем является файловая система /proc. Она дает возможность смотреть и менять параметры ядра "на лету". На самом деле это псевдофайловая система. Здесь нет файлов в обычном понимании. «Файлы», находящиеся в каталоге /рrос, - это просто ссылки на области памяти ядра, в которых хранятся значения некоторых параметров ядра. В этой файловой системе можно найти немало интересной информации о любом запущенном процессе, использовании процессора и памяти и много другого.
Некоторые файлы файловой системы /рrос нельзя изменить, можно только просмотреть их. Редактировать можно файлы, которые находятся в каталоге /proc/sys/. В этом каталоге находятся параметры ядра, которые можно менять «на лету», без надобности перезагрузки компьютера и перекомпиляции ядра.
Файлы файловой системы /рrос можно просматривать с помощью команды cat и редактировать текстовым редактором, к примеру vi (предпочитаю GNU Midnight Commander). Большинство файлов содержит всего лишь одно значение, следовательно, для его изменения можно пользоваться командой echo:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
6
# echo 4 > /proc/sys/net/ipv4/tcp_fin_timeout
# cat /proc/sys/net/ipv4/tcp_fin_timeout
4
Утилита sysctl.
В большинстве дистрибутивов есть утилита sysctl. Ее основное назначение - это управление файлами (параметрами) в каталоге /proc/sys/. При вводе команды sysctl без параметров показывается список всех допустимых параметров и их значений:
# sysctl
usage: sysctl [-n] variable ...
sysctl [-n] -w variable=value ...
sysctl [-n] -a
sysctl [-n] -p <file> (default /etc/sysctl.conf)
sysctl [-n] -A
К примеру, укороченный вывод программы будет выглядеть так:
# sysctl -a
...
net.ipv4.ip_conntrack_max = 16376
net.ipv4.netfilter.ip_conntrack_generic_timeout = 600
net.ipv4.netfilter.ip_conntrack_icmp_timeout = 30
net.ipv4.netfilter.ip_conntrack_max = 16376
...
net.ipv4.tcp_low_latency = 0
...
net.ipv4.ip_default_ttl = 64
net.ipv4.ip_forward = 1
...
В качестве разделителя утилита sysctl использует точку. Например, параметр net.ipv4.ip_conntrack_max соответствует файлу /proc/sys/net/ipv4/ip_conntrack_max.
Для установки значений параметров служит флаг -w:
# sysctl -w kernel.hostname=fred
kernel.hostname = fred
# cat /proc/sys/kernel/hostname
fred
Отдельные записи смотрят так:
# sysctl kernel.ostype
kernel.ostype = Linux
Утилита grep дает еще больше возможностей по выводу отдельных параметров. Например, вывод параметров, связанных с tcp:
# sysctl -a | grep tcp
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
net.ipv4.tcp_low_latency = 0
net.ipv4.tcp_frto = 0
/etc/sysctl.conf
Этот файл служит для запоминания значений параметров ядра, которые теряются после перезагрузки.
Формат файла такой:
Параметр = Значение
Например:
kernel.core_uses_pid=1
net.ipv4.ip_forward = 1
kernel.sysrq=1
При загрузке системы вызывается сценарий /etc/rc.d/rc.sysinit, который вызывает sysctl, и тот устанавливает значения из файла /etc/sysctl.conf.
Безусловно, утилита sysctl очень удобна и есть в большинстве дистрибутивов Linux, во многих случаях удобнее работать с /рrос напрямую с помощью команд cat и echo.