Що означає принцип “Everything is a File” у Linux?

 1419

Однією з визначальних особливостей Linux та UNIX-подібних операційних систем є поняття “Everything is a File” = “Все є файлом”. А якщо щось і не є таким, то воно повинно виконуватися в системі як процес. Звичайно, це узагальнення досить грубо спрощує реальну суть того, що відбувається, але його розуміння допоможе краще розібратися з тим, як працює Linux.

Everything is a File

Linux не робить відмінностей між файлами та каталогами, але каталоги виконують одну дуже важливу роботу — зберігають інші файли, створюючи певну ієрархію для їхнього зручного розташування. Багато речей, які знаходяться у файловій системі Linux, насправді не є “звичайними” файлами. Є так звані “спеціальні” файли, які представляють апаратні компоненти (через які Linux взаємодіє з “залізом” комп’ютера), системну інформацію та інші речі, аж до генератора випадкових чисел.

Ці “спеціальні” файли можуть бути розташовані в окремих каталогах, таких як /dev (містить спеціальні файли, що представляють пристрої) або /proc (містить спеціальні файли, що представляють інформацію про систему та її процеси). Всі ці “файли”, у ширшому значенні цього слова, мають стандартні атрибути Linux-файлів, такі як власник, права доступу, і до них можуть бути застосовані класичні утиліти Linux.

Наприклад, скористаємося командою cat, щоб переглянути вміст /etc:

$ cat /etc

Як бачите, команда cat повідомляє, що /etc є каталогом. Тепер давайте спробуємо переглянути якийсь файл зі списку, наприклад, /usr/lib/systemd/systemd-ac-power:

Скористаємося тією ж командою cat:

$ sudo cat /usr/lib/systemd/systemd-ac-power

Ми отримали повну абракадабру. А все тому, що systemd-ac-power є бінарним файлом. Він відображається у файловій системі, як інші файли, але відкрити та подивитися його вміст (як звичайного текстового файлу) ми не можемо.

Каталог /proc

Припустимо, ми хочемо знайти інформацію про процесор. Каталог /proc має спеціальний файл — /proc/cpuinfo, який містить цю інформацію. Ми можемо прочитати вміст цього файлу наступною командою:

$ cat /proc/cpuinfo

Або ми можемо відкрити файл /proc/cpuinfo в текстовому редакторі і переглянути його вміст:

Проте, як говорилося вище, файл /proc/cpuinfo насправді не є звичайним текстовим файлом. Ядро Linux і каталог /proc лише надають нам цю інформацію у вигляді файлу. Даний підхід дозволяє нам (користувачам) використовувати стандартні команди для перегляду та роботи з інформацією.

Також у каталозі /proc містяться й інші подібні файли, наприклад:

   /proc/uptime — інформація про час безвідмовної роботи (uptime) ядра Linux. Іншими словами, як довго наша система працювала без вимкнення.

   /proc/version — інформація про версію ядра Linux.

   /proc/meminfo — інформація про вільну і використовувану пам’ять (як фізичну, так і віртуальну).

Каталог /dev

У каталозі /dev ви знайдете файли, які представляють різні апаратні пристрої та спеціальні об’єкти. Наприклад, /dev/cdrom — це привід для читання компакт-дисків, /dev/sda — перший жорсткий диск, а /dev/sda1 — перший розділ на першому жорсткому диску.

   Бажаєте змонтувати свій CD-ROM? Тоді виконайте команду mount та вкажіть (файл) /dev/cdrom як пристрій, який потрібно змонтувати.

   Бажаєте розділити перший жорсткий диск на розділи? Запустіть утиліту керування дисками та вкажіть (файл) /dev/sda як жорсткий диск, який потрібно відредагувати.

   Бажаєте відформатувати перший розділ на своєму першому жорсткому диску? Запустіть команду форматування та вкажіть їй форматувати (файл) /dev/sda1.

Спільним тут є представлення апаратних пристроїв (привід для читання компакт-дисків, жорсткий диск) у вигляді окремих файлів, які є в каталозі /dev. Подібна реалізація має свої переваги, наприклад, файлова система забезпечує узгоджений “простір імен”, який всі програми, команди та утиліти можуть використовувати для звернення до даних пристроїв.

Також каталог /dev містить не лише файли, які представляють фізичні пристрої. Ось три найбільш примітні спеціальні (псевдо-) пристрої:

   /dev/null — фізично цього пристрою не існує, але дані, що відправляються в нього, просто зникають, і повернути їх назад неможливо.

   /dev/random — генератор випадкових чисел, до якого ви можете під’єднатися.

   /dev/zero — спеціальний файл, що є джерелом постійного потоку нулів. При читанні цього файлу кінця ви не знайдете.

Так що ж “все є файлом” чи ні?

На поверхневому рівні для нас, як для користувачів Linux, все представлено у вигляді файлів (хоча їх може і фактично не бути в системі, але вони можуть відображатися через термінал), а “під капотом” ці файли поділяються на окремі категорії, наприклад, драйвери пристроїв (/dev/mouse, /dev/cdrom тощо), виконувані файли (аналоги .exe-файлів у Windows), звичайні текстові файли тощо.

Подання даних одне й те саме — файл, але самі дані можуть бути потоком, пристроєм, пам’яттю на жорсткому диску та ін.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (7 оцінок, середня: 5,00 з 5)
Завантаження...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *