Все о Linux. LinuxRSP.Ru
Альт Линукс СПТ 6.0 Сертификат ФСТЭК

Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

В GIMP наконец-то появилась обработка с точностью 16 и 32 разряда на канал

В одном окне: GIMP 2.8

Релиз OpenBSD 5.1

HTML-редактор: BlueGriffon 1.5

Релиз Xfce 4.10

Команда Chromium представила кластер для автоматизации выявления уязвимостей

В Microsoft Office 15 будет обеспечена поддержка формата ODF 1.2

Анонсирован новый свободный анимационный фильм Tube

Обновление ядра: Linux 3.0.29, 3.2.16, 3.3.3

Представлен OpenSSH 6.0

Релиз графического редактора Pinta 1.2, претендующего на роль аналога Paint.NET

Вышел Firefox 12

Google прекращает поддержку Linux-версии приложения Picasa

Эмулятор приставок: Mednafen 0.9.21-wip

Линус Торвальдс получил премию Millennium Technology Prize 2012

Canonical не заинтересована в участии в разработке ядра Linux

Распределенные вычисления: BOINC 7.0

Google

 Новые статьи :

Передача снапшота ZFS по сети

Правила хорошего тона: SSH

Некоторые рассуждения о защите от ddos на примере защиты от SSL denial of service attack

Быстрый проброс портов на шлюзе во внутреннюю сеть или на другой хост. Быстро NAT'им порты. rinetd.

NAT'им отдельные порты или "а что делать, если мой веб-сервер внезапно переехал на другую машину". Проброс портов в локалке на шлюзе наружу.

Как справляться с запланированной недоступностью веб-сайта

Архитектура Google 2011

Мониторинг Nginx с помощью MRTG

Решение проблем при использовании "1c предприятие" 8.2 в Linux

25 правил .htaccess, которые должен знать каждый web-разработчик

Централизованное резервное копирование данных Windows и *nix серверов средствами Bacula

Краткое руководство по GNOME Shell в Ubuntu 11.10

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки

   Дистрибутивы и атрибутика



DeveloperWorks Россия





Rambler's Top100


 
 

Изучаем файловую систему proc

Sandeep Grover
Перевод
Pukhlyakov Kirill
linuxfocus.org, оригинал

Ядро 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 -r--r--r-- 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
-r--r--r--    1 root  root            0 Dec 25 22:59 cmdline
-r--r--r--    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/
-r--r--r--    1 root  root            0 Dec 25 22:59 maps
-rw-------    1 root  root            0 Dec 25 22:59 mem
-r--r--r--    1 root  root            0 Dec 25 22:59 mounts
lrwxrwxrwx    1 root  root            0 Dec 25 22:59 root -> //
-r--r--r--    1 root  root            0 Dec 25 22:59 stat
-r--r--r--    1 root  root            0 Dec 25 22:59 statm
-r--r--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.

Список литературы


      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2012 LinuxRSP


Реклама: