TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #66 7.28K
Файловая система proc

Ранее мы уже затрагивали виртуальную файловую систему proc, когда говорили про команду lsof. Сегодня копнем глубже и научимся получать из нее различную информацию о системе и процессах.

В старых реализациях UNIX не было простого способа выполнить интроспективный анализ атрибутов ядра для получения ответов на следующие вопросы:

1. Сколько процессов запущено в системе и кто их владельцы?
2. Какие файлы открыты процессом?
3. Какие файлы в данный момент заблокированы и какие процессы удерживают эти блокировки?
4. Какие сокеты используются в системе?

Чтобы предоставить более легкий доступ к информации ядра, во многих современных реализациях UNIX предусмотрена VFS (Virtual File System) proc. Она находится в одноименном каталоге и содержит различные файлы, предоставляющие информацию о ядре. Называется она виртуальной потому, что фактически не располагается на диске и заполняется ядром на лету.

Процессам можно беспрепятственно считывать эту информацию и, в некоторых случаях, вносить в нее изменения, используя обычные системные вызовы файлового ввода-вывода: read, write, open, close и т.д.

Получение информации о процессе (/proc/PID):

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

Например, просмотрев файлы в каталоге /proc/1, можно получить информацию о процессе init, PID которого всегда имеет значение 1. Давайте посмотрим на базовую информацию процесса init через файл status, который существует в каждом каталоге /proc/PID и предоставляет множество данных о целевом процессе:


$ cat /proc/1/status

Name: init - Имя исполняемого файла
State: S (sleeping) - Состояние процесса
Tgid: 1 - ID группы потоков (обычный PID, getpid())
Pid: 1 - Фактически ID потока (gettid())
PPid: 0 - ID родительского процесса
TracerPid: 0 - PID отслеживающего процесса
...


Описание файлов и директорий для каждого каталога (/proc/PID):

1) cmdline - аргументы командной строки;
2) cwd - символьная ссылка на текущий рабочий каталог;
3) environ - пары вида ИМЯ=значение списка переменных среды;
4) exe - символьная ссылка на исполняемый файл;
5) fd - каталог, содержащий символьные ссылки на файлы, открытые процессом;
6) maps - отображения памяти;
7) mem - виртуальная память процесса;
8) mounts - точки монтирования для рассматриваемого процесса;
9) root - символьная ссылка на корневой каталог;
10) status - различная информация (идентификаторы процесса, права, использование памяти, сигналы);
11) task - содержит по одному подкаталогу для каждого потока в процессе;

Системная информация, находящаяся в proc:

Доступ к информации, распространяющейся на всю систему также предоставляется через различные файлы и директории внутри VFS proc. Давайте посмотрим на назначения отдельных из них:

1) /proc/net - информация состояния сети и сокетов;
2) /proc/sys/fs - настройки, относящиеся к файловым системам;
3) /proc/sys/kernel - различные общие настройки ядра;
4) /proc/sys/net - настройки сети и сокетов;
5) /proc/sys/vm - настройки, касающиеся управления памятью;
6) /proc/sysvipc - информация об IPC-объектах System V;
7) /proc/cpuinfo - информация о центральном процессоре;

Обычно, команд cat, more и less должно хватать для того, чтобы разобрать различную информацию внутри proc. В качестве примера, давайте выхватим немного данных про наш CPU:


$ cat /proc/cpuinfo

processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 154
model name : 12th Gen Intel(R) Core(TM) i7-1260P
stepping : 3
microcode : 0x423
cpu MHz : 710.883
cache size : 18432 KB


Однако из некоторых файлов бывает тяжело выцепить что-то полезное. Для таких случаев существуют утилиты lsof, lspci, apm и top, которые являются интерфейсом для proc и предоставляют легко читаемую для пользователя информацию.
  • 👍 21
  • ❤‍🔥 6
  • 🔥 6
  • ❤ 2
  • 👾 1
More from @linuxcamp_tg
  1. Oct 10, 2026Кто-то попробовал продвинуть в OpenBSD клоны GNU CoreUtils, переписанные на Rust Тео де Ра…
  2. Oct 9, 2026🤖Обходим «белый список» вместе с STRELKA Думали, что белые списки не обходятся когда глуш…
  3. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  4. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  5. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  6. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →