Proc linux что это
Что такое файловая система /proc в Linux
Сегодня мы заглянем во внутрь директории /proc, познакомимся с её функцией и строением. Директория /proc присутствует на всех системах Linux независимо от дистрибутива и архитектуры.
Начнём с уяснения того, что строго говоря директория /proc это НЕ настоящая файловая система. Это виртуальная файловая система. Внутри procfs содержатся данные о процессах и другая системная информация. Она отображается в /proc и монтируется во время загрузки.
Значение файлов в /proc
Для начала давайте перейдём в директорию /proc и оглядимся там:
В глаза бросаются несколько файлов со знакомыми названиями, а также множество директорий название которых состоит из цифр.
Директория с числами в качестве названий представляют процессы и названы по их PID, а внутри них информация о команде, к которой они относятся.
Файлы содержат информацию о системе, такую как память (meminfo), информация о центральном процессоре (cpuinfo) и доступных файловых системах.
Давайте начнём с того, что взглянем на один из этих файлов:
Мы увидем что-то вроде такого:
Как вы можете видеть, /proc/meminfo содержит информацию о памяти вашей системы, включая общее доступное количество (в килобайтах) и количество свободной памяти в верхних строках. При этом обратите внимание на характер информации — здесь нет данных о железе, о производителе и прочем подобном. Здесь информация с точки зрения ядра системы — общее количество и разные программные настройки.
Поскольку все файлы в этой папке представляют собой простой текст, вы можете любой из них посмотреть с помощью команды cat.
Пробежимся быстро по файлам из директории /proc:
Что означают папки с цифрами в /proc
В директории /proc кроме рассмотренных файлов с именем, имеется много папок обозначенных цифрами, в каждой из них также содержится несколько файлов и ссылок. Помните, что номера директории означают PID команд, которыми был запущен этот процесс. Давайте для примера рассмотрим любую из этих директорий. Допустим я возьму папку с именем /proc/12:
Я получил следующее:
Так что это значит? Итак, важная часть находится наверху. Из файла статуса мы можем видеть, что этот процесс принадлежит rcub. Его текущее состояние sleeping и, очевидно, ID этого процесса равно 12. Мы также можем видеть кто запустил его, поскольку UID и GID равны 0, то это значит, что процесс принадлежит пользователю root.
В любой пронумерованной директории вы сможете увидеть похожую структуру файлов. Самые важные и их краткое описание такие:
Также в пронумерованных директориях вы можете увидеть ряд ссылок:
Информация о видеокарте в /proc
Информация о PCI устройствах содержится в файле /proc/bus/pci/devices, а также в поддиректориях /proc/bus/pci. Как и с другими устройствами, здесь нет информации о производителе — только тип устройства и, видимо, используемое адресное пространство.
Больше информации вы сможете найти в папке /proc/driver, пример вывода данных о драйвере NVidia:
Здесь информация о модели, версии БИОСа, типе шине, находиться ли устройство в чёрном списке (для отключения) и некоторые другие данные.
Заключение
Эта заметка должна помочь вам в знакомстве с директорией /proc. Также она должна дать вам представление о том, как ряд команд получают свою информацию. Вот только несколько примеров команд, которые используют /proc для своей информации: uptime, lsof, mount и ps.
Proc linux что это
Библиотека сайта rus-linux.net
Перевод на Русский:
Pukhlyakov Kirill
О файловой системе /proc
Ядро Linux предоставляет механизм доступа к своим внутренним структурам и позволяет изменять установки ядра во время работы ОС посредством системы /proc. Мы рассмотрим в заметке эту систему касательно архитектуры Intel x86, но основные принципы применимы к ОС Linux на любой платформе.
_________________ _________________ _________________
Виртуальная файловая система /proc
Файловая система /proc является механизмом для ядра и его модулей, позволяющим посылать информацию процессам ( отсюда и название /proc ). С помощью этой виртуальной файловой системы Вы можете работать с внутренними структурами ядра, получать полезную информацию о процессах и изменять установки ( меняя параметры ядра ) на лету. Файловая система /proc располагается в памяти в отличие от других файловых систем, которые располагаются на диске. Если Вы посмотрите на файл /proc/mounts ( он выводит список всех подмонтированных файловых систем подобно команде «moount» ) то увидите что-нибудь типа :
Монтирование файловой системы /proc
Более детальную информацию Вы получите прочитав man mount.
Просмотр файлов /proc
Полезная информация о системе и ядре
Перечислим некоторые важные файлы:
Информация о процессах
Выполненная нами команда показывает, что в системе присутствует процесс mozilla, его PID 32558. Соответственно в каталоге /proc должен быть каталог с названием 32558.
Работа с ядром посредством /proc
Большинство из рассмотренных нами файлов из каталога /proc доступны только на чтение. Тем не менее файловая система /proc предоставляет файлы для взаимодействия с ядром доступные на запись. Помещение информации в такие файлы изменяет состояние ядра и поэтому это надо делать очень аккуратно. Эти файлы нахдятся в каталоге /proc/sys.
В каталоге /proc/sys/kernel находится информация общего плана для ядра. Соответственно в /proc/sys/kernel/
Запретив ответы на icmp_echos мы спрятали компьютер. Наша машина не будет отвечать на команды «ping» других компьютеров.
Вернуть прежнее состояние можно следующим образом
В каталоге /proc/sys еще много возможностей для настройки системы. Более подробная информация находится в [1] и [2].
Вывод
Linux: описание и назначение файловой системы proc и каталога /proc
linproc /compat/linux/proc linprocfs rw 0 0
А вот так – в обычной Linux-системе:
proc /proc proc defaults 0 0
Почему эта файловая система виртуальная? Главное её отличие от обычных систем – отсутствие физического устройства (жесткого диска) для её размещения. Второе отличие – эта файловая система и всё её содержимое создаётся и управляется непосредственно ядром операционной системы. Любые действия в такой системе не приводят к изменениям на жестком диске – после выключения питания сервера вся информация, содержащаяся в такой файловой системе будет утеряна – как и вся другая информация в оперативной памяти машины.
Кратко говоря – все файлы в этой системе (и её каталоге /proc ) не записываются на жесткий диск, а создаются и изменяются “на лету” непосредственно ядром системы в памяти сервера.
В целом, хотя так и говорят, но называть proc(fs) виртуальной файловой системой – не совсем корректно, так как имеется “настоящая” виртуальная система – VFS.
А файловую систему proc более правильно её называть “псевдо-файловой системой“.
Назначение файловой системы proc
Очень точно её назначение можно описать такими словами:
“Использование подобной псевдо-файловой системы является прямым следованием всей UNIX-философии – “Всё сущее является файлами”.
Суть для пользователя или администратора заключается в том, что в любое время без использования каких-либо дополнительных утилит он может получить необходимую информацию о текущем состоянии системы – размер и использование памяти, в том числе виртуальной, нагрузке процессора и его ядер, запущенные процессы и так далее.
Именно из этого каталога берут информацию такие утилиты мониторинга сервера как top, netstat, ps и другие.
Каждый процесс имеет свой PID. О том, что такое PID немного подробнее можно прочитать в F.A.Q. – Что такое PID, PPID?
Процесс screen имеет PID 16204, а PPID (Parent Process ID) – 16186. Посмотрим содержимое каталога /proc/16204 :
# ls /proc/16204
attr cgroup coredump_filter environ fdinfo loginuid mountinfo net oom_score_adj root sessionid stat syscall
autogroup clear_refs cpuset exe io maps mounts oom_adj pagemap sched smaps statm task
auxv cmdline cwd fd limits mem mountstats oom_score personality schedstat stack status wchan
К примеру, файл cmdline содержит информацию о команде, запустившей данный процесс:
# cat /proc/16204/cmdline
screen
Файл environ содержит всю информацию о рабочем окружении процесса.
Файл status – информацию о PID, GID, использовании памяти и процессора этим процессом и другую полезную информацию:
# cat status
Name: screen
State: S (sleeping)
Tgid: 16204
Pid: 16204
PPid: 16186
TracerPid: 0
Uid: 500 500 500 500
Gid: 500 500 84 500
Utrace: 0
FDSize: 256
Groups: 500
VmPeak: 5344 kB
VmSize: 5328 kB
VmLck: 0 kB
VmHWM: 972 kB
VmRSS: 972 kB
VmData: 396 kB
VmStk: 88 kB
VmExe: 352 kB
VmLib: 2332 kB
VmPTE: 48 kB
VmSwap: 0 kB
Threads: 1
…
Краткое описание других файлов:
В каталоге каждого процесса имеются так же несколько символических ссылок, например:
cwd ссылается на текущий рабочий каталог процесса;
exe – симлинк на исполняемый файл процесса (программы);
root – указывает на корневой раздел (как правило – /)
MNorin.com
Блог про Linux, Bash и другие информационные технологии
Немного о директории /proc в Linux
/proc — это не настоящая файловая система. Она виртуальная. Ее основная задача — получение состояния системы и частично выполнение управляющих действий. К сожалению, не так много людей знают, что находится внутри и как этим пользоваться. Поэтому немного расскажу, чем эта директория может быть вам полезна.
Информация о процессах в директории /proc
Информация о процессах хранится в директориях /proc/N, где N — числовой идентификатор процесса. В этой директории содержатся различные псевдо-файлы, которые содержат информацию о самом процессе и связанном с ним окружении.
/proc/N/cmdline — Содержимое командной строки, которой был запущен процесс.
/proc/N/environ — Описание окружения, в котором работает процесс. Оно может быть полезно для просмотра содержимого окружения, если вам надо, например, посмотреть, была ли установлена переменная окружения перед запуском программы.
/proc/N/exe — Символическая ссылка на выполнимый файл запущенной программы.
/proc/N/limits — Лимиты на использование системных ресурсов, актуальные для работающего процесса.
/proc/N/mounts — Список смонтированных ресурсов, которые доступны процессу
/proc/N/status — Статус работающей программы. Он включает в себя такую информацию как идентификатор родительского процесса, статус самого процесса, его название, его идентификатор, идентификатор пользователя и группы, группы, в которые входит владелец процесса, сколько потоков использует процесс, сколько памяти он использует и так далее.
В этой же директории содержится несколько псевдо-директорий:
/proc/N/cwd — Текущая директория для процесса. Представлена символической ссылкой на директорию. Если рабочая директория для процесса изменится, изменится и ссылка.
/proc/N/fd — Файловые дескрипторы, которые используются процессом. Для программы bash, например, там по умолчанию будут дескрипторы 0, 1, 2 и 255, указывающие на виртуальный терминал, в котором запущен процесс, например, /dev/pts/6.
/proc/N/fdinfo — Информация о файловых дескрипторах. Каждый файл в этой директории содержит поля pos (позиция курсора), flags (флаги, с которыми этот дескриптор был открыт) и mnt_id (идентификатор точки монтирования из списка, содержащегося в файле /proc/N/mountinfo)
/proc/N/root — Символическая ссылка на директорию, которая для данного процесса является корневой
/proc/N/net — Сетевые системные ресурсы и их параметры, действующие для конкретного процесса.
Общесистемные псевдо-файлы и псевдо-директории
/proc/acpi — директория, связанная с управлением питанием и различным устройствами. От компьютера к компьютеру содержимое этой директории отличается. Через эту директорию можно посылать управляющие сигналы устройствам. Например: в моем ноутбуке есть кнопка включения подсветки для клавиатуры. Сочетание клавиш, которые для этого используются, — это Fn плюс кнопка с изображением лампочки на клавиатуре. Но я могу включать и выключать подсветку программно.
Включить:
Через директорию /proc/acpi также, например, можно проверить, открыт или закрыт ноутбук. Для этого на моем ноутбуке можно проверить содержимое файла /proc/acpi/button/lid/LID/state. Если в файле содержится «state: open», значит крышка открыта.
/proc/asound — директория, связанная со звуковыми устройствами. Например, файл /proc/asound/cards содержит звуковые карты, доступные в системе.
/proc/bus — информация о системных шинах и устройствах, которые к ним подключены. Например, файл /proc/bus/input/devices содержит информацию о различных устройствах, список можно получить такой командой:
/proc/fs — Информация о файловых системах. Например, вам нужно посмотреть опции, с которыми в данный момент работает файловая система ext4, размещенная на разделе sda2. Это можно сделать командой
/proc/sys — Псевдо-директория, содержащая массу информации о системе. К примеру, файл /proc/sys/dev/cdrom/info содержит информацию о CD/DVD-ROM, который установлен в системе. Выглядит эта информация так:
В общем-то, всё понятно. Название устройства и различные его характеристики, названные человеческими словами. Как видно выше, мой DVD-RW много чего умеет, но не умеет выбирать диски.
/proc/sys/fs — Как понятно по названию, псевдо-директория, содержащая информацию о подсистеме, связанной с файловыми системами. Опять же, пример: /proc/sys/fs/pipe-max-size. Этот псевдо-файл содержит максимальный размер буфера пайпа. Поэтому если вдруг у вас некорректно работает какой-то скрипт, в котором данные передаются через пайп, есть повод задуматься, какого размера у вас буфер пайпа и заглянуть в этот псевдо-файл. Возможно вы после этого захотите воспользоваться командами «exec» и «read» с опцией «-u».
/proc/sys/net — Общесистемные сетевые параметры. Например:
Включить форвардинг пакетов между двумя сетевыми интерфейсами.
/proc/sys/vm — Параметры виртуальной памяти. Например, вы можете сбросить кэш и освободить немного памяти, используемой под кэш командой
В общем, для начала знакомства с этой директорией достаточно, но я рекомендую по возможности более плотно познакомиться с этой директорией и ее содержимым. Более подробную информацию можно найти в странице руководств в 5 разделе
Когда вы познакомитесь с (псевдо)директорией /proc, вы сможете получать массу информации о системе без всяких утилит, просто при помощи команды cat.
Proc linux что это
Файловая система proc пpедставляет собой интеpфейс к нескольким стpуктуpам данных ядpа, котоpые pаботают также как и файловая система. Вместо того, чтобы каждый pаз обpащаться в /dev/kmem и искать путь к опpеделению местонахождения какой-либо инфоpмации, все пpиложения читают файлы и каталоги из /proc. Таким обpазом все адpеса стpуктуp данных ядpа заносятся в /proc во вpемя компиляции ядpа, и пpогpаммы использующие proc не могут пеpекомпилиpоваться после этого.
Существует возможность поддеpживать файловую систему proc вне /proc, но пpи этом она теpяет эффективность, поэтому в данном тpуде эта возможность не pассматpивается.
3.1 Каталоги и файлы /proc.
Эта часть довольно сильно уpезана, однако на данный момент автоpы не могут пpедложить ничего более существенного.
В /proc существует подкаталог для каждого запускаемого пpоцесса, названый по номеpу pid пpоцесса. Эти диpектоpии более подpобно описаны ниже. Также в /proc пpисутствует несколько дpугих каталогов и файлов:
self Этот файл имеет отношение к пpоцессам имеющим доступ к файловой системе proc, и идентифициpованным в диpектоиях названных по id пpоцессов осуществляющих контpоль.
kmsg Этот файл используется системным вызовом syslog() для pегистpации сообщений ядpа. Чтение этого файла может осуществляться лишь одним пpоцессом имеющим пpивилегию superuser. Этот файл не доступен для чтения пpи pегистpации с помощью вызова syslog().
loadavg Этот файл содеpжит числа подобно:
Эти числа являются pезультатом комманд uptime и подобных, показывающих сpеднее число пpоцессов пытающихся запуститься в одно и то же вpямя за последнюю минуту, последние пять минут и последние пятнадцать.
meminfo Файл содеpжит обзоp выходной инфоpмации пpогpаммы free. Содеpжание его имеет следующий вид:
uptime Файл содеpжит вpемя pаботы систмы вцелом и идеализиpованное вpемя затpачивоемое системой на один пpоцесс. Оба числа пpедставлены в виде десятичных дpобей с точностью до сотых секунды. Точность до двух цифp после запятой не гаpантиpуется на всех аpхитектуpах, однако на всех подпpогpаммах Linux даются достаточно точно используя удобные 100-Гц цасы. Этот файл выглядит следующим обpазом: 604.33 205.45 В этом случае система функциониpует 604.33 секунды, а вpемя затpачиваемое на идеальный пpцесс pавно 204.45 секунд.
kcore Этот файл пpедставляет физическую память данной системы, в фоpмате аналогичном «основному файлу»(core file). Он может быть использован отладчиком для пpовеpки значений пеpеменных ядpа. Длина файла pавна длине физической памяти плюс 4кб под заголовок.
stat Файл stat отобpажает статистику данной системы в фоpмате ASCII. Пpимеp: Значения стpок:
cpu | Четыpе числа сообщают о количестве тиков за вpемя pаботы системы в пользовательском pежиме, в пользовательском pежиме с низким пpиоpитетом, в системном pежиме, и с идеальной задачей. Последнее число является стокpатным увеличением втоpого значения в файле uptime. |
disk | Четыpе компонеты dk_drive в стpуктуpе kernel_stat в данный момент незаняты. |
page | Количество стpаниц введенных и исключенных системой. |
swap | Количество своп-стpаниц введенных и исключенных системой. |
intr | Количество пpеpываний установленных пpи загpузке системы. |
ctxt | Hомеp подтекста выключающий систему. |
btime | Вpемя в секундах отсчитываемое сначала суток. |
modules | Список модулей ядpа в фоpмате ASCII. Фоpмат файла изменяется от веpсии к веpсии, поэтому пpимеp здесь непpиводится. Окончательно фоpмат установится, видимо со стабилизацией интеpфейса самих модулей. |
malloc | Этот файл пpисутствует в случае, если во вpемя компиляции ядpа была описана стpока CONFIG_DEBUG_MALLOC. |
version | Файл содеpжит стpоку идентифициpующую веpсию pаботающего в данный момент Linux. |