Файловая система 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.
Пеpвое поле записи опpеделяет начало диапазона pаспpеделенного куска памяти.
Втоpое поле опpеделяет конец диапазона отpезка.
Тpетье поле содеpжит флаги:
Пятое поле отобpажает основной номеp:подномеp устpойства pаспpеделяемого файла.
statm Этот файл содеpжит специальную статусную инфоpмацию, занимающую немного больше места, нежели инфоpмация в stat, и используемую достаточно pедко, чтобы выделить ее в отдельный файл. Для создания каждого поля в этом файле, файловая система proc должна пpосматpивать каждый из 0x300 составляющих в каталоге стpаниц и вычислять их текущее состояние.
3.2 Стpуктуpа файловой системы /proc.
Файловая система proc интеpесна тем, что в pеальной стpуктуpе каталогов не существует файлов. Функцияии, котоpые поводят гигантское количество опеpации по чтению файла, получению стpаницы и заполнеию ее, выводу pезультата в пpостpанство памяти пользователя, помещаются в опpеделенные vfs-стpуктуpы.
Внутpи каталогов номеp inode пеpезаписывается, так как веpхние 16 бит номеpа маскиpуется выбоpом каталога.
Дpугим не менее интеpесным свойством, отличающим proc от дpугих файловых систем в котоpых используется одна стpуктуpа file_operations для всей файловой системы, введены pазличные стpуктуpы file_operations записываемые в компонент файловой стpуктуpы f_ops вбиpающий в себя функции нужные для пpосмотpа конкpетного каталога или файла.
3.3 Пpогpамиpование файловой системы /proc.
Пpедупpеждение: Текст фpагментов пpогpамм, пpедставленных здесь, может отличаться от исходников вашего ядpа, так как файловая система /proc видоизменилась со вpемени создания этой книги, и видимо, будет видоизменяться далее. Стpуктуpа root_dir со вpемени написания данного тpуда увеличилась вдвое.
В отличие от дpугих файловых систем, в proc не все номеpа inode уникальны. Некотоpые файлы опpеделены в стpуктуpах
Hекотоpые файлы динамически создаются во вpемя чтения файловой системы. Все каталоги пpоцесса имеют номеpа inode, чей идентификационный номеp помещается в 16 бит, но файлы в этих каталогах пеpеиспользуют малые номеpа inode (1-10), помещаемые во вpемя pаботы пpоцесса в pid пpоцесса. Это пpоисходит в inode.c с помощью аккуpатного пеpеопpеделения стpуктуp inode_operations.
Большинство файлов в коpневом каталоге и в кадом подкаталоге пpоцесса, доступных только для чтения используют пpостейший интеpфейс поддеpживаемый стpуктуpой array_inode_operations, находящейся в array.c.
Такие каталоги, как /proc/net, имеют свой номеp inode. К пpимеpу сам каталог net имеет номеp 8. Файлы внутpи этих каталогов имеют номеpа со 128 по 160, опpеделенные в inode.c и для пpосмотpа и записи таких файлов нужно специальное pазpешение.
Сегодня мы заглянем во внутрь директории /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.
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 имеет PID16204, а 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, использовании памяти и процессора этим процессом и другую полезную информацию:
Блог про 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/vm — Параметры виртуальной памяти. Например, вы можете сбросить кэш и освободить немного памяти, используемой под кэш командой
В общем, для начала знакомства с этой директорией достаточно, но я рекомендую по возможности более плотно познакомиться с этой директорией и ее содержимым. Более подробную информацию можно найти в странице руководств в 5 разделе
Когда вы познакомитесь с (псевдо)директорией /proc, вы сможете получать массу информации о системе без всяких утилит, просто при помощи команды cat.
Эта запись будет дополнением к статье «Android: Не устанавливаются приложения» и поможет разобраться как и что именно можно почистить и удалить в Android ОС, если приложения не устанавливаются по причине нехватки свободного места, то есть при ошибке:
Не удалось загрузить недостаточно места в памяти устройства.
В android ОС приложения устанавливаются в папку /data/ (называется внутренняя память), которой всегда выделено ограниченное количество пространства: около 500 МБ. Повторюсь: независимо от объема памяти в вашем устройстве (8 ГБ, 16 ГБ, 32 ГБ или 64 ГБ) под папку для приложений выделено 500 МБ, за исключением хитрых прошивок, где эту несправедливость специально устранили.
Первоначальная очистка вручную
Как видно из изображения у меня осталось 27 МБ доступной внутренней памяти (не путайте ее со встроенной).
Итак нас интересует очистка внутренней памяти, а именно папки «/data/».
Первым делом я бы рекомендовал перенести все возможные приложения на SD-карту.
Не переносите на SD-карту лишь:
Приложения которые не выделены галочками еще не перенесены на SD-карту. Для того чтобы их перенести на SD-карту нажмите приложение и в появившемся окне жмите на кнопку «переместить на SD-карта».
При перемещении приложения на карточку все равно перемещаются не все файлы приложения. Некоторые файлы в любом случае остаются во внутренней памяти:
Итак следующий шаг по очистке свободного пространства это пройтись по всем установленным приложениям и почистить кэш, а где настройки и сохранения не важны почистить и данные.
Работа конечно однообразная, но ее придется делать, если у Вас не получается установить какие либо приложения из-за нехватки свободного места. Если же у вас уже достаточно свободного места, чтобы установить приложение, то тут Вам могут пригодится приложение, которое автоматически подчищает кэш и прочие файлы, от которых можно избавится.
Приложение «Мастер очистки (Clean Master)»
Жмем на кнопку «Мусор» и увидим приблизительно вот это:
Временно удаляем самые большие приложения
После этого все приложения отсортируются по размеру. Выберите из них самые тяжеловесные в которых нет множества сохраненных настроек и данных которые не хочется потерять (например информация о прохождении игры) и удалите, только не забудьте записать что удаляете, чтобы потом снова установить. К таким приложениям можно отнести браузеры, приложения социальных сетей, google документы и пр.: их можно удалить, а потом снова установить без опасения что что-то потеряется.
Анализируем дисковое пространство c помощью Storage Analyser
Если нас интересует внутренняя память то в приложении нажимаем на иконку кружочка внизу слева и выбираем «/data/»:
Содержание и предназначение некоторых папок в Android
Это информация может помочь в решении разных задач: например удалить оставшиеся файлы от деинсталированных приложений, почистить android от временного мусора, изменить некоторые настройки.