2. Усе є файлом

В книзі Стартове керівництво ви дізналися про поняття власника файла і правах доступу до файлу, але для того, щоб насправді зрозуміти файлову систему UNIX® (а це також стосується й файлових систем Linux), необхідно, щоб ми знову визначили концепцію “Що таке файл”.

Тут “вседійсно означає все. Жорсткий диск, розділ на жорсткому диску, паралельний порт, підключення до веб-сайту, карта Ethernet - все це є файли. Навіть каталоги є файлами. Linux розрізняє багато типів файлів на додаток до стандартних файлів і каталогів. Зверніть увагу, що тут під типом файла ми не розуміємо вміст файла: в GNU/Linux, як і в будь-якій системі UNIX®, файл, чи то зображення PNG, бінарний файл чи щось ще - це просто потік байтів. Поділ файлів відповідно до їх вмісту залишається програмам.

2.1. Різні типи файлів

Коли ви виконуєте команду ls -l, символ перед правами доступу визначає тип файла. Ми вже бачили два типи файлів: звичайні файли (-) і каталоги (d). Коли ви мандруєте по дереву файлів і переглядаєте вміст каталогів, ви можете також зустріти й інші типи файлів:

  1. Файли символьного режиму: ці файли є або спеціальними системними файлами (типу /dev/null, який ми вже розглядали), або периферійними пристроями (послідовні чи паралельні порти), характерною рисою яких є те, що їх вміст (якщо він є) не буферизується (тобто він не зберігається в пам'яті). Такі файли позначаються літерою c.

  2. Файли блокового режиму: ці файли є периферійними пристроями, і на відміну від символьних файлів їх вміст буферизується. Файлами цієї категорії є, наприклад, жорсткі диски, розділи жорсткого диска, дисководи, приводи CD-ROM й інші пристрої для зберігання даних. Приклади файлів блокового доступу: /dev/hda, /dev/sda5. Такі файли позначаються літерою b.

  3. Символічні посилання: ці файли є дуже поширеними і широко використовуються у процедурі запуску системи Mandriva Linux (див. Розділ 11, Завантажувальні файли: init sysv). Як випливає з їх імені, їх мета - пов'язувати файли символічним способом. Це означає, що вони є файлами, вмістом яких є шлях до іншого файлу. Вони можуть вказувати на неіснуючий файл. Дуже часто їх називають м'якими посиланнями, і позначаються такі файли літерою “l”.

  4. Іменовані канали: якщо вас це здивувало, то так воно і є. Так, вони дуже схожі на канали, використовувані в командах shell'а, але з тією різницею, що в цих каналів й справді є імена. Проте вони дуже рідкісні й малоймовірно, що ви зустрінете їх під час своєї подорожі по дереву файлів. Такі файли позначаються літерою p. Дивіться Параграф 4, ““Анонімні” канали та іменовані канали”.

  5. Сокети: це тип файла для всіх мережевих підключень, але тільки деякі з них мають назви. А найголовніше те, що існує кілька типів сокетів, а зв'язок можна встановити лише через один з цих типів, але це вже виходить за рамки цієї книги. Такі файли позначаються літерою s.

Ось приклади для кожного з файлів:

$ ls -l /dev/null /dev/sda  /etc/rc.d/rc3.d/S20random /proc/554/maps \
/tmp/ssh-queen/ssh-510-agent
crw-rw-rw-    1 root     root       1,   3 May  5  1998 /dev/null
brw-rw----    1 root     disk       8,   0 May  5  1998 /dev/sda
lrwxrwxrwx    1 root     root           16 Dec  9 19:12 /etc/rc.d/rc3.d/
  S20random -> ../init.d/random*
pr--r--r--    1 queen  queen         0 Dec 10 20:23 /proc/554/maps|
srwx------    1 queen  queen         0 Dec 10 20:08 /tmp/ssh-queen/
  ssh-510-agent=
$

2.2. Inode'и

Inode'и - це фундаментальна частина будь-якої файлової системи UNIX® поряд із парадигмою “Усе є файлом”. Слово inode - це скорочення від Information NODE (інформаційний вузол).

Inode'и зберігаються на диску в таблиці inode. Вони існують для всіх типів файлів, які можуть зберігатися в файловій системі, включаючи каталоги, іменовані канали, файли символьного режиму і так далі. Звідси випливає інша відома фраза: “Inode - це файл”. З допомогою inode'ів UNIX® ідентифікує файл унікальним способом.

Так, ви усе правильно прочитали: UNIX® ідентифікує файл не за його ім'ям, а за номером його inode[4]. Причина цього полягає в тому, що той самий файл може мати кілька імен, або взагалі не мати імені. В UNIX® ім'я файла - це просто пункт в каталозі inode. Такий пункт називається посиланням. Давайте розглянемо посилання докладніше.



[4] Важливо: зверніть увагу, що номери inode унікальними у межах однієї файлової системи, тобто inode з тим самим номером може існувати в інший файловій системі. Це призводить до розрізнення дискових inode'ів і inode'ів “в пам'яті”. Тоді як два дискових inode'а можуть мати однакові номери, якщо вони знаходяться на двох файлових системах, inode'и “в пам'яті” мають номери, унікальні для всієї системи. Наприклад, одне з рішень отримання унікальності - хеш номеру дискового inode'а проти ідентифікатора блокового пристрою.