Однією з визначальних особливостей 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), звичайні текстові файли тощо.
Подання даних одне й те саме — файл, але самі дані можуть бути потоком, пристроєм, пам’яттю на жорсткому диску та ін.
