Файлова система proc в linux

Програми простору користувача в Linux не можуть звертатися до ядра системи безпосередньо. Але для отримання інформації від ядра були створені кілька спеціальних директорій за допомогою яких будь-яка програма або користувач можуть отримати дані про стан комп`ютера і ядра. Це файлова система proc і sys.

З цих папок можна отримати будь-яку інформацію про вашу систему. Наприклад скільки пам`яті підкачки зараз використовується, наскільки великий розмір кеша процесора, які модулі ядра завантажені, скільки дисків або розділів є і т д. Все це можна отримати в звичайному текстовому вигляді з папки proc linux.

У цій інструкції буде розглянута файлова система proc, її структура, призначення файлів і де знайти ту чи іншу потрібну інформацію. Але спочатку трохи теорії.

Що таке proc?

Насправді папка proc - це зовсім незвичайна папка. Її не існує на диску або навіть в оперативній пам`яті, як це робиться в / tmp. Все піддиректорії, файли і зберігається в них інформація генерується ядром на льоту, як тільки ви її запитуєте. Але працює все настільки прозоро, що ви не помітите жодної різниці між звичайною файлової системою і proc, якщо відкриєте її за допомогою файлового менеджера.

Тільки папка proc linux містить файли нульового розміру. А також у кожного файлу буде поточна дата створення. Наприклад файл / proc / meminfo буде містити різні дані при кожному відкритті, оскільки використання пам`яті постійно коливається.

За допомогою такої системи розробники дотримуються головної концепції Unix - все є файл. Всі файли доступні для редагування будь-яким редактором, і всі вони в простому текстовому форматі, але для того щоб проаналізувати весь каталог вам знадобляться права суперкористувача. Майже всі файли доступні тільки для читання, з них ми можемо тільки отримувати інформацію. Але є і доступні для запису, зокрема це / proc / sys за допомогою якого ви можете налаштовувати різні параметри ядра.

Структура файлової системи proc

Далі буде розглянута структура proc linux, призначення файлів і пошук інформації в них. Спочатку ми розглянемо файли знаходяться в корені папки proc, в них найбільше інформації про систему.

/ Proc / buddyinfo

У цьому файлі зберігається інформація про фрагментацію пам`яті в ядрі Linux. Найчастіше використовується для діагностики проблем з фрагментацією пам`яті. Якщо в двох словах, то рядок означає зону пам`яті, а номер кількість доступних сторінок певного рівня.


Node 0, zone DMA32 421 164 73 49 71 17 53 44 33 7 89
Node 0, zone Normal 387 127 65 39 78 30 29 56 20 9 52

/ Proc / cgroups

Система контейнеризації та управління ресурсами доступними для процесів cgroups розроблена хлопцями з Google дозволяє обмежити доступ до будь-яких ресурсів для процесу, а також контролювати його поведінку в системі. У цьому файлі можна подивитися стан контрольних груп у вашій системі і їх налаштування.

/ Proc / cmdline

У цьому файлі ви знайдете параметри, які були вказані в рядку запуску ядра загрузчиком Grub. Це може бути корисно при пошуку і усунення проблем із завантаженням ядра або якщо необхідно з`ясувати який точно файл був використаний для завантаження.

BOOT_IMAGE = / vmlinuz-4.1.21-14-default root = UUID = 0e87875d-beb3-4639-8df4-8a9de4100dda resume = / dev / disk / by-uuid / a390a040-5848-4838-a8c7-3ba001e29d89 splash = silent quiet showopts

/proc/config.gz

Це, один з найважливіших знаходяться тут файлів. У цьому архіві знаходиться поточна конфігурація ядра. Якщо ви вже пере збирали ядро, то вже напевно знайомі з цим файлом. Дуже зручно не налаштувати кожен параметр нового ядра вручну, а взяти настройки з поточного ядра і тільки трохи підправити.

Для вилучення інформації зазвичай використовується утиліта zcat оскільки дані стиснуті за алгоритмом gzip:

tty0 -WU (EC p) 4: 7

/ Proc / cpuinfo

Тут зберігається дуже докладна інформація про процесор. Ви можете подивитися виробника, кількість ядер, кеша, активні ядра, частоту, підтримувані розширення і багато іншого. Ту ж інформацію можна отримати за допомогою спеціальних команд, але, як бачите папка proc теж надає такі дані. І навіть більше, всі скрипти, які виведуть інформацію про процесор беруть її звідси.


vendor_id: AuthenticAMD
cpu family: 16
model: 6
model name: AMD Athlon (tm) II X2 250 Processor
stepping: 3
microcode: 0x10000c8
cpu MHz: 3000.000
cache size 1024 KB
physical id: 0
siblings: 2

/ Proc / crypto

Тут перераховані всі криптографічні шифри, підтримувані ядром, а також додаткову інформацію по кожному з них.

name: cbc (aes)
driver: cbc (aes-generic)
module: kernel
priority: 100
refcnt: 1
selftest: passed
internal: no
type: blkcipher
blocksize: 16
min keysize: 16
max keysize: 32
ivsize: 16
geniv:

/ Proc / devices




Тут відображаються різні блокові і символічні пристрої підключені до системи. Крім тих, для яких не завантажені модулі ядра. Пристрої розділені на символічні і блокові. У символічних пристроїв немає буфера і вони відправляють ядру дані певного розміру. Блокові пристрої мають буфер для даних і призначені для збереження інформації, наприклад, на жорсткі диски.


1 mem
4 / dev / vc / 0
4 tty
4 ttyS
5 / dev / tty
5 / dev / console
5 / dev / ptmx
7 vcs

/ Proc / diskstats

Статистика введення і виведення на блокові пристрої, в тому числі і жорсткі диски.

8 0 sda 411 0 6808 1772 0 0 0 0 0 512 1772
8 1 sda1 102 0 1696 804 0 0 0 0 0 444 804
8 2 sda2 96 0 1648 488 0 0 0 0 0 344 488
8 3 sda3 122 0 1856 432 0 0 0 0 0 312 432

Перші дві цифри - номер пристрою, далі назва. Четверта цифра - кількість вдалих читань з диска, кількість об`єднаних читань, секторів прочитано, час читання в мілісекундах, вдалі записи, об`єднані записи, секторів записано, час запису в мілісекундах, поточні операції введення і виведення, поточний час роботи і загальний час операцій введення і виведення.

/ Proc / fb

У цьому файлі відображаються пристрої фреймбуфер (екрани), а також використовувані графічні драйвера. наприклад:

nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cpuset
ext3
ext4

nodev значить, що це файлова система спеціального призначення і вона не використовується для зберігання даних на носіях.

/ Proc / interrupts

У цьому файлі містяться всі доступні переривання. Переривання - це підпрограми, які використовуються іншими програмами для виконання стандартних дій, наприклад малювання рядки на екрані або виходу з програми.


0: 45 0 IO-APIC-edge timer
1: 0 2 IO-APIC-edge i8042
7: 2 0 IO-APIC-edge parport0
8: 0 1 IO-APIC-edge rtc0
9: 0 0 IO-APIC-fasteoi acpi
12 1 4 IO-APIC-edge i8042

/ Proc / iomem

У цьому файлі міститься поточна карта пам`яті для всіх програм і ядра Linux. Ця інформація може бути корисною програмістам.

00000000-00000fff: reserved
00001000-0009ebff: System RAM
0009ec00-0009ffff: reserved
000a0000-000bffff: PCI Bus 0000: 00
000c0000-000c7fff: Video ROM
000d0000-000dffff: PCI Bus 0000: 00
000e4000-000fffff: reserved
000f0000-000fffff: System ROM
00100000-cfe8ffff: System RAM
01000000-0166a9ea: Kernel code
0166a9eb-01f0f67f: Kernel data
0209e000-02219fff: Kernel bss

/ Proc / ioports

У цьому файлі містяться всі зареєстровані діапазони портів, а також пристрої, які їх використовують


0000-001f: dma1
0020-0021: pic1
0040-0043: timer0
0050-0053: timer1
0060-0060: keyboard
0061-0061: PNP0800: 00
0064-0064: keyboard
0070-0071: rtc0

/ Proc / kallsyms




Вміст цього файлу навряд-чи знадобиться звичайному користувачеві. Тут зібрані всі доступні функції та їх адреси, які можуть бути використані з модулів ядра.

/ Proc / kcore

Це все вміст вашої оперативної пам`яті представлене в одному файлі. На відміну від інших файлів у цього є розмір - обсяг вашої ОЗУ плюс 4 кілобайти. Для доступу до нього потрібні права суперкористувача. Не потрібно відкривати цей файл для читання, у вас нічого не вийде. Перед тим як з ним працювати скопіюйте файл в іншу папку, а вже потім робіть що потрібно, наприклад ви можете спробувати знайти певний фрагмент тексту з пам`яті браузера.

/ Proc / kmsg

Ви, напевно, вже користувалися утилітою dmesg для перегляду повідомлень ядра. Так ось, ці повідомлення накопичуються і зберігаються в цьому файлі. Для доступу до нього теж потрібні права root.

Відео: Файлова система proc1 при написанні драйвера в Linux

/ Proc / kpagecount

Для оптимізації роботи з пам`яттю, вона організовується в сторінки. Раніше ми бачили як подивитися кількість вільних сторінок. У цьому ж файлі каталог proc дозволяє нам з`ясувати розмір однієї сторінки.

/ Proc / loadavg

Тут ви можете оцінити середнє навантаження на систему. наприклад:

2.58 2.53 1.74 2/569 20842

Перші три цифри показують навантаження на процесор зараз, п`ять і п`ятнадцять хвилин тому, такі два стовпці показують кількість активних процесів і загальна кількість запущених процесів. А остання цифра - це PID ідентифікатор останнього процесу.

/ Proc / locks

Тут міститься список заблокованих ядром ресурсів. Може містити багато налагоджувальної інформації і не несе зовсім ніякої користі для звичайних користувачів:


2: POSIX ADVISORY READ 16342 08: 16: 43386485 1073741826 1073742335
3: POSIX ADVISORY READ 1686 08: 16: 43253829 124 124
4: POSIX ADVISORY WRITE 16342 08: 16: 43647306 0 EOF

/ Proc / meminfo

Ще один дуже відомий і широко використовуваний файл, який надає нам папка proc linux. Тут відображається вся доступна інформація про оперативну пам`ять і просторі підкачки. Саме за допомогою цього файлу багато скрипти дізнаються інформацію про доступну пам`яті.

MemTotal: 6109848 kB
MemFree: 2044352 kB
MemAvailable: 2562056 kB
Buffers: 36872 kB
Cached: 742456 kB
SwapCached: 740888 kB
Active: 2187724 kB

/ Proc / misc

У цьому файлі перераховані різні драйвери, завантажені для підключених пристроїв або програм:


200 tun
56 vboxnetctl
57 vboxdrvu
58 vboxdrv
232 kvm
59 memory_bandwidth

/ Proc / modules

Теж досить відомий файл. Тут міститься список всіх завантажених модулів ядра. Ту ж саму інформацію ми можемо побачити виконавши lsmod. Але цю утиліту теж інформацію надає структура proc.

/ Proc / mounts

У цьому файлі перераховані всі точки монтування і всі підключені файлові системи:

sysfs / sys sysfs rw, nosuid, nodev, noexec, relatime 0 0
proc / proc proc rw, nosuid, nodev, noexec, relatime 0 0
devtmpfs / dev devtmpfs rw, nosuid, size = 3016160k, nr_inodes = 754040, mode = 755 0 0
securityfs / sys / kernel / security securityfs rw, nosuid, nodev, noexec, relatime 0 0
tmpfs / dev / shm tmpfs rw, nosuid, nodev 0 0

Те ж саме можна побачити виконавши mount -a.

/ Proc / partitions

У цьому файлі відображені всі підключені до системи розділи жорстких дисків або інших запам`ятовуючих пристроїв:

Filename Type Size Used Priority
/ Dev / sdb2 partition 8388604 0 -1

/ Proc / sysrq-trigger

Це ще один файл, що виділяється з більшості інших. Він доступний для запису і використовується для управління передачі ядру спеціальних SysRq команд, про які ми вже говорили в статті перезавантаження комп`ютера в Linux. Ви можете записувати коди команд за допомогою echo або будь-якого текстового редактора.

/ Proc / uptime

Тут відображається скільки часу пройшло після запуску комп`ютера. Перше число означає загальну кількість секунд після запуску комп`ютера, а другий час в режимі очікування:

Відео: Урок 2. Файлова система Linux

/ Proc / version

Це ще один спосіб дізнатися точну версію ядра, компілятора, і в деяких випадках, навіть дистрибутива:

ttr cpuset fdinfo mountstats stat
auxv cwd loginuid oom_adj statm
clear_refs environ maps oom_score status
cmdline exe mem root task
coredump_filter fd mounts smaps wchan

Ми не будемо розглядати всі, давайте розглянемо тільки основні файли:

  • cmdline - містить команду за допомогою якої був запущений процес, а також передані їй параметри
  • cwd - символічна посилання на поточну робочу директорію процесу
  • exe - посилання на виконуваний файл
  • root - посилання на папку суперкористувача
  • environ - змінні оточення, доступні для процесу
  • fd - містить файлові дескриптори, файли і пристрої, які використовує процес
  • maps, statm, і mem - інформація про пам`ять процесу
  • stat, status - стан процесу

За допомогою цих файлів ви можете складати різні скрипти. Наприклад якщо ви хочете знищити всі зомбі процеси, то ви можете сканувати всі директорії на наявність Z в файлі status. Так же само можна перевірити запущена потрібна вам програма переглянувши всі cmdline.

/ Proc / sys /

Ця папка в proc linux не тільки надає інформацію про систему, але і дозволяє змінювати різні параметри ядра на льоту, а також включати додаткові функції.

Щоб подивитися чи можна записувати у файли використовуйте команду:

Поділися в соціальних мережах:

Схожі
Встановлюємо параметри ядра в grubВстановлюємо параметри ядра в grub
Характеристики процесора в linuxХарактеристики процесора в linux
Дізнаємося хто використовує мережу в linuxДізнаємося хто використовує мережу в linux
Як дізнатися вільне місце на диску linuxЯк дізнатися вільне місце на диску linux
Використання оперативної пам`яті в linuxВикористання оперативної пам`яті в linux
Як приховати процес в linuxЯк приховати процес в linux
Налаштування ядра linuxНалаштування ядра linux
Розбивка диска для установки linuxРозбивка диска для установки linux
Управління процесами в linuxУправління процесами в linux
Налаштування nfs в ubuntu 16.04Налаштування nfs в ubuntu 16.04
» » Файлова система proc в linux