atRunet:Coolmax: Что-то о чём-то, или самое интересное в интернете

О файловой системе /proc

Ядро Linux предоставляет механизм доступа к своим внутренним структурам и позволяет изменять установки ядра во время работы ОС посредством системы /proc. Мы рассмотрим в заметке эту систему касательно архитектуры Intel x86, но основные принципы применимы к ОС Linux на любой платформе.

Виртуальная файловая система /proc
Файловая система /proc является механизмом для ядра и его модулей, позволяющим посылать информацию процессам ( отсюда и название /proc ). С помощью этой виртуальной файловой системы Вы можете работать с внутренними структурами ядра, получать полезную информацию о процессах и изменять установки ( меняя параметры ядра ) на лету. Файловая система /proc располагается в памяти в отличие от других файловых систем, которые располагаются на диске. Если Вы посмотрите на файл /proc/mounts ( он выводит список всех подмонтированных файловых систем подобно команде «moount» ) то увидите что-нибудь типа :

grep proc /proc/mounts
/proc /proc proc rw 0 0

/proc контролируется ядром. Из-за того, что она предоставляет информацию контролируемую ядром, логично, что она располагается в памяти, контролируемой также ядром. Команда «ls -l» покажет, что большинство файлов в этой системе имеют нулевую длину, но посмотрев любой файл Вы получите достаточно информации. Как это может быть? Все просто — файловая система /proc как любая другая файловая система регистрируется на уровне VFS ( Virtual File System layer ). Поэтому при запросе файлов/каталогов, файловая система /proc создает эти файлы/каталоги на основании информации, содержащейся в ядре.

Монтирование файловой системы /proc
Если /proc еще не подмонтирована — Вы можете сделать это следующим образом:

mount -t proc proc /proc

Более детальную информацию Вы получите прочитав man mount.

Просмотр файлов /proc
С помощью файлов в /proc Вы можете получить информацию о состоянии ядра, процессов, параметрах компьютера и т.д. Большинство файлов в /proc содержат самую свежую информацию о системном оборудовании. Несмотря на то, что эти файлы виртуальные — их можно просмотреть любым текстовым редактором или с помощью команд «more», «less» или «cat». При попытке открытия виртуального файла текстовым редактором — этот файл создается на лету на основе информации, содержащейся в ядре. Приведу здесь некоторые интересные цифры о моей системе:

$ ls -l /proc/cpuinfo -rr 1 root root 0 Dec 25 11:01 /proc/cpuinfo

$ file /proc/cpuinfo

/proc/cpuinfo: empty

$ cat /proc/cpuinfo

processor : 0

vendor_id : GenuineIntel

cpu family : 6

model : 8

model name : Pentium III (Coppermine)

stepping : 6

cpu MHz : 1000.119

cache size : 256 KB

fdiv_bug : no

hlt_bug : no

sep_bug : no

f00f_bug : no

coma_bug : no

fpu : yes

fpu_exception : yes

cpuid level : 2

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca

cmov pat pse36 mmx fxsr xmm

bogomips : 1998.85

processor : 3

vendor_id : GenuineIntel

cpu family : 6

model : 8

model name : Pentium III (Coppermine)

stepping : 6

cpu MHz : 1000.119

cache size : 256 KB

fdiv_bug : no

hlt_bug : no

sep_bug : no

f00f_bug : no

coma_bug : no

fpu : yes

fpu_exception : yes

cpuid level : 2

wp : yes

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca

cmov pat pse36 mmx fxsr xmm

bogomips : 1992.29

Это двухпроцессорная система. В некоторых файлах файловой системы /proc информация закодирована, однако некоторые утилиты приспособлены к этому — они выводят ее в виде понятном человеку. К этим утилитам относятся: «top», «ps», «apm» и т.д.

Полезная информация о системе и ядре

Перечислим некоторые важные файлы:

/proc/cpuinfo — информация о процессоре ( модель, семейство, размер кэша и т.д.)

/proc/meminfo — информация о RAM, размере свопа и т.д.

/proc/mounts — список подмонтированных файловых систем.

/proc/devices — список устройств.

/proc/filesystems — поддерживаемые файловые системы.

/proc/modules — список загружаемых модулей.

/proc/version — версия ядра.

/proc/cmdline — список параметров, передаваемых ядру при загрузке.

На самом деле файлов в каталоге /proc намного больше. Вы можете детально просмотреть все файлы в /proc командами «more» и read [1]. Советую Вам использовать «more» вместо «cat» потому, что некоторые файлы ( например kcore ) могут быть очень большого размера.

Информация о процессах

Файловая система /proc служит также источником информации о выполняющихся процессах. Если Вы внимательно посмотрите внутрь каталога /proc, то увидите каталоги, названия которых состоят из цифр — это и есть информация о процессах — название каталога отражает идентификатор процесса ( PID ). Внутри этих каталогов находятся файлы, содержащие важную информацию о процессах — состояние, окружение и т.д. Давайте посмотрим на какой-нибудь процесс:

$ ps -aef | grep mozilla

root 32558 32425 8 22:53 pts/1 00:01:23 /usr/bin/mozilla

Выполненная нами команда показывает, что в системе присутствует процесс mozilla, его PID 32558. Соответственно в каталоге /proc должен быть каталог с названием 32558.

$ ls -l /proc/32558

total 0

-rrr 1 root root 0 Dec 25 22:59 cmdline
-rrr 1 root root 0 Dec 25 22:59 cpu

lrwxrwxrwx 1 root root 0 Dec 25 22:59 cwd -> /proc/

-r



1 root root 0 Dec 25 22:59 environ

lrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla*

dr-x


2 root root 0 Dec 25 22:59 fd/
-rrr 1 root root 0 Dec 25 22:59 maps

-rw


1 root root 0 Dec 25 22:59 mem

-rrr

1 root root 0 Dec 25 22:59 mounts
lrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> //
-rrr 1 root root 0 Dec 25 22:59 stat

-rrr

1 root root 0 Dec 25 22:59 statm
-rr—r 1 root root 0 Dec 25 22:59 status

В файле «cmdline» содержится информация, которой был запущен процесс. В файле «environ» находятся переменные окружения этого процесса, а также идентификатор пользователя ( UID ) и группы ( GID ) запустившего процесс, идентификатор родительского процесса ( PPID ) и текущее состояние процесса ( например «Sleeping» или «Running» ). Также в подобных каталогах находятся символические ссылки: «cwd» — ссылка к текущему рабочему каталогу процесса, «exe» — исполняемый файл процесса, «root» — ссылка к каталогу, который считается процессом корневым ( обычно это «/» ). В каталоге «fd» находятся ссылки к используемым дескрипторам файлов процессом. «cpu» доступен только на SMP ядрах Linux.

/proc/self интересный подкаталог — с его помощью приложение найдет информацию о себе. На самом деле /proc/self является символической ссылкой на каталог процесса обращающегося к /proc.

Работа с ядром посредством /proc

Большинство из рассмотренных нами файлов из каталога /proc доступны только на чтение. Тем не менее файловая система /proc предоставляет файлы для взаимодействия с ядром доступные на запись. Помещение информации в такие файлы изменяет состояние ядра и поэтому это надо делать очень аккуратно. Эти файлы нахдятся в каталоге /proc/sys.

В каталоге /proc/sys/kernel находится информация общего плана для ядра. Соответственно в /proc/sys/kernel/{domainname, hostname} находится информация о доменном имени и host имени, которую Вы можете изменить.

$ hostname
machinename.domainname.com$ cat /proc/sys/kernel/domainname
domainname.com

$ cat /proc/sys/kernel/hostname
machinename

$ echo «new-machinename» > /proc/sys/kernel/hostname

$ hostname
new-machinename.domainname.com

Таким образом изменив файл в файловой системе /proc мы можем поменять hostname. Много данных для настройки находится в /proc/sys/kernel/. Повторюсь, невозможно в заметке рассмотреть все файлы, думаю Вам самим будет интересно повнимательней посмотреть на эти каталоги.
Еще один интересный каталог /proc/sys/net. В нем Вы можете произвести сетевые настройки, например спрятать Ваш компьютер в сети.

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Запретив ответы на icmp_echos мы спрятали компьютер. Наша машина не будет отвечать на команды «ping» других компьютеров.

$ ping machinename.domainname.com
no answer from machinename.domainname.com

Вернуть прежнее состояние можно следующим образом

$ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

В каталоге /proc/sys еще много возможностей для настройки системы. Более подробная информация находится в [1] и [2].

Вывод
Файловая система /proc обеспечивает файловый интерфейс к внутренним структурам Linux. С ее помощью можно узнать полезную информацию и настроить систему. Знание этой файловой системы и умение применить эти знания — большой плюс в работе с ОС Linux.


Похожие записи:

Вы можете следить за обсуждением с помощью RSS 2.0 ленты.


61 queries. 1,224 sec 53.31 MB