В книзі Стартове керівництво ви дізналися про поняття власника файла і правах доступу до файлу, але для того, щоб насправді зрозуміти файлову систему UNIX® (а це також стосується й файлових систем Linux), необхідно, щоб ми знову визначили концепцію “Що таке файл”.
Тут “все” дійсно означає все. Жорсткий диск, розділ на жорсткому диску, паралельний порт, підключення до веб-сайту, карта Ethernet - все це є файли. Навіть каталоги є файлами. Linux розрізняє багато типів файлів на додаток до стандартних файлів і каталогів. Зверніть увагу, що тут під типом файла ми не розуміємо вміст файла: в GNU/Linux, як і в будь-якій системі UNIX®, файл, чи то зображення PNG, бінарний файл чи щось ще - це просто потік байтів. Поділ файлів відповідно до їх вмісту залишається програмам.
Коли ви виконуєте команду ls -l, символ перед правами доступу визначає тип файла. Ми вже бачили два типи файлів: звичайні файли (-
) і каталоги (d
). Коли ви мандруєте по дереву файлів і переглядаєте вміст каталогів, ви можете також зустріти й інші типи файлів:
Файли символьного режиму: ці файли є або спеціальними системними файлами (типу /dev/null
, який ми вже розглядали), або периферійними пристроями (послідовні чи паралельні порти), характерною рисою яких є те, що їх вміст (якщо він є) не буферизується (тобто він не зберігається в пам'яті). Такі файли позначаються літерою c
.
Файли блокового режиму: ці файли є периферійними пристроями, і на відміну від символьних файлів їх вміст буферизується. Файлами цієї категорії є, наприклад, жорсткі диски, розділи жорсткого диска, дисководи, приводи CD-ROM й інші пристрої для зберігання даних. Приклади файлів блокового доступу: /dev/hda
, /dev/sda5
. Такі файли позначаються літерою b
.
Символічні посилання: ці файли є дуже поширеними і широко використовуються у процедурі запуску системи Mandriva Linux (див. Розділ 11, Завантажувальні файли: init sysv). Як випливає з їх імені, їх мета - пов'язувати файли символічним способом. Це означає, що вони є файлами, вмістом яких є шлях до іншого файлу. Вони можуть вказувати на неіснуючий файл. Дуже часто їх називають “м'якими посиланнями”, і позначаються такі файли літерою “l”.
Іменовані канали: якщо вас це здивувало, то так воно і є. Так, вони дуже схожі на канали, використовувані в командах shell
'а, але з тією різницею, що в цих каналів й справді є імена. Проте вони дуже рідкісні й малоймовірно, що ви зустрінете їх під час своєї подорожі по дереву файлів. Такі файли позначаються літерою p
. Дивіться Параграф 4, ““Анонімні” канали та іменовані канали”.
Сокети: це тип файла для всіх мережевих підключень, але тільки деякі з них мають назви. А найголовніше те, що існує кілька типів сокетів, а зв'язок можна встановити лише через один з цих типів, але це вже виходить за рамки цієї книги. Такі файли позначаються літерою 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= $
Inode'и - це фундаментальна частина будь-якої файлової системи UNIX® поряд із парадигмою “Усе є файлом”. Слово “inode” - це скорочення від Information NODE (інформаційний вузол).
Inode'и зберігаються на диску в таблиці inode. Вони існують для всіх типів файлів, які можуть зберігатися в файловій системі, включаючи каталоги, іменовані канали, файли символьного режиму і так далі. Звідси випливає інша відома фраза: “Inode - це файл”. З допомогою inode'ів UNIX® ідентифікує файл унікальним способом.
Так, ви усе правильно прочитали: UNIX® ідентифікує файл не за його ім'ям, а за номером його inode[4]. Причина цього полягає в тому, що той самий файл може мати кілька імен, або взагалі не мати імені. В UNIX® ім'я файла - це просто пункт в каталозі inode. Такий пункт називається посиланням. Давайте розглянемо посилання докладніше.
[4] Важливо: зверніть увагу, що номери inode унікальними у межах однієї файлової системи, тобто inode з тим самим номером може існувати в інший файловій системі. Це призводить до розрізнення дискових inode'ів і inode'ів “в пам'яті”. Тоді як два дискових inode'а можуть мати однакові номери, якщо вони знаходяться на двох файлових системах, inode'и “в пам'яті” мають номери, унікальні для всієї системи. Наприклад, одне з рішень отримання унікальності - хеш номеру дискового inode'а проти ідентифікатора блокового пристрою.