Все о Linux. LinuxRSP.Ru

[an error occurred while processing this directive]

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


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

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

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

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

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

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







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-2024 LinuxRSP