Файлова система 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. Це може бути корисно при пошуку і усунення проблем із завантаженням ядра або якщо необхідно з`ясувати який точно файл був використаний для завантаження.
/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
Тут перераховані всі криптографічні шифри, підтримувані ядром, а також додаткову інформацію по кожному з них.
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 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 sysfsnodev 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. Ця інформація може бути корисною програмістам.
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
Тут ви можете оцінити середнє навантаження на систему. наприклад:
Перші три цифри показують навантаження на процесор зараз, п`ять і п`ятнадцять хвилин тому, такі два стовпці показують кількість активних процесів і загальна кількість запущених процесів. А остання цифра - це 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. Тут відображається вся доступна інформація про оперативну пам`ять і просторі підкачки. Саме за допомогою цього файлу багато скрипти дізнаються інформацію про доступну пам`яті.
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
У цьому файлі перераховані всі точки монтування і всі підключені файлові системи:
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 statauxv 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 не тільки надає інформацію про систему, але і дозволяє змінювати різні параметри ядра на льоту, а також включати додаткові функції.
Щоб подивитися чи можна записувати у файли використовуйте команду:
- Завантаження процесора linux
- Характеристики процесора в linux
- Як приховати процес в linux
- Як звільнити пам`ять linux
- Як дізнатися вільне місце на диску linux
- Налаштування ядра linux
- Установка двох linux на комп`ютер
- Типи файлових систем для linux
- Реліз linux kernel 4.8 rc3
- Дізнаємося хто використовує мережу в linux
- Модулі ядра linux
- Збір інформації про систему ubuntu
- Розбивка диска для установки linux
- Cтруктура файлової системи linux
- Налаштування nfs в ubuntu 16.04
- Практикум: модулі ядра linux
- Скрипти-твики для init.d
- Використання оперативної пам`яті в linux
- Управління процесами в linux
- Скрипт що оптимізує використання ram пам`яті
- Встановлюємо параметри ядра в grub