© Ярослав Федевич, 2004.

Відразу обмовлюсь -- це не вичерпне джерело інформації! За таким дивіться Linux Filesystem Hierarchy. Я тільки спробую показати основи -- так, щоб не заблукати.

Ліричний відступ для користувачів Windows

Вам доведеться звикнути до декількох речей. Краще зараз, ніж потім...

Найперше -- це те, що на відміну від вінди, в *nix прийнято все розкладати по поличках. Самі програми -- в один каталог, бібліотеки -- в інший, довідку -- ще в один; документація, зображення й інші службові файли йдуть по своїх окремих каталогах. Це трохи відрізняється від думки, що програми повинні тримати свої дані в своєму каталозі, як це у вікнах, проте має певні переваги.

Наприклад, перевагою є те, що мені досить легко на чужій машині знайти дані, котрі мене цікавлять. Дуже вигідно, коли я реєструюсь на ssh на віддалений комп'ютер -- я знаю, де там мої документи, знаю, де програми, і мені не треба з такими запитаннями морочити голову його власникам. По-друге, такий стандарт притаманний всім дистрибуціям (ну, деякі різниці не рахуємо) не лише Linux, але й *nix'ів загалом. Тобто, мені досить легко зорієнтуватись на машинці з FreeBSD, наприклад.

Друга річ, до якої треба призвичаїтись -- це те, що в nix'ах нема чогось такого, як літери дисків. Останні дісталися вікнам у спадщину від DOS, у якого були досить туманні уявлення про те, які бувають блокові пристрої, скільки їх можна начепити й як буде розвиватись технологія взагалі. Через це програмістам випадало особливе задоволення писати величезні кавалки програм, котрі тільки те й робили, що створювали інтерфейси для різних пристроїв і файлових систем, щоб до них можна було звертатись "як до диску". В nix усе набагато елегантніше й продуманіше: є одна коренева система, до якої "монтуються" всі інші системи -- причому кожна з них виглядатиме лише як каталог у єдиному дереві каталогів (дивіться mount). До того ж, так складаються обставини, що деякі частини дерева каталогів корисно розміщувати на окремих дискових розділах -- і те, що вони виглядають у кінцевому результаті як каталоги, дуже полегшує роботу з ними.

Третє -- це те, що є різниця між малими й великими літерами. Це успадковано, швидше за все, від мови C, де ці літери розрізняються. Хоча на перший погляд це незручно, може дати певні переваги (про це якось в іншій темі поговоримо).

Ну й четверте: розділювачем каталогів є /, а не \. Варто запам'ятати, бо символ \ використовується зі спеціальною метою -- цитувати небуквоцифрові символи.

Зазирнімо в корінь

Якщо виконати команду ls /, то побачимо щось таке:

bin
boot
dev
etc
home
initrd
lib
lost+found
mnt
opt
proc
root
sbin
tmp
usr
var

Це -- те, що можна знайти практично в будь-якому *nix'і. Поглянемо коротко в кожен каталог детальніше.

/bin містить файли програм, котрі необхідні для діяльності системи. Це такі команди, як cp, mv, ls, dd, cat, chgrp, chown... Те, без чого працювати в системі неможливо. Туди часто запихають архіватори, якщо припускається, що колись систему доведеться відновлювати з резервних копій.

Всі програми, котрі тут є, доступні для виконання всім користувачам, на відміну від каталога /sbin. Тут також поміщено файли, необхідні для життя системи, проте доступні для виконання лише системному адміністраторові. Це всілякі-різні системні демони й програми, котрі просто вимагають для виконання прав root'а (так, root -- це найголовніший користувач *nix'ової системи).

В каталозі /etc розміщено файли конфігурації системи загалом. Наприклад, у каталогах rc й файлах rc можна знайти всі команди, котрі виконуються при старті системи й змінити це на свій смак, якщо достатньо прав. Проте, більшість програм тримає свої налаштування окремо для кожного користувача, а кожен користувач для цього має свою домівку -- каталог, де містяться його особисті файли (налаштування, документи й таке інше). Кожен такий каталог міститься в /home/реєстраційне ім'я користувача. Тобто, користувач elrond матиме особистий каталог /home/elrond/.

Каталог /initrd використовується для «двофазного» завантаження системи. Про неї розповім іншим разом, а наразі досить знати й те, що після завантаження він порожній, а якщо він є в системі, витирати його не варто.

В каталозі /lib містяться основні бібліотеки системи -- ті, що необхідні для виконання команд у /bin і /sbin. Бібліотеки закінчуються на .so, і є аналогами віндівських DLL.

В каталозі /mnt прийнято тримати каталоги-точки монтування файлових систем на зовнішніх пристроях, як-от дискетах, компакт-дисках і флешках.

Каталог /tmp призначений для всілякої тимчасової інформації різних програм; він не є надійним місцем зберігання інформації, бо періодично очищується.

Каталог /opt визначається стандартом як призначений для програм, котрі не є частиною стандартного дистрибутиву, а походять від третьої сторони. Зазвичай каталоги всередині /opt повинні нагадувати структуру того самого Program Files. Проте, якщо чесно, на даний час дистрибутиви мають такий обсяг програм, що цей каталог використовуватиметься рідко.

/root є домашнім каталогом користувача root.

/var містить тимчасові дані системи. Проте, на відміну від /tmp, ці дані мають практичну користь для користувачів: це файли поштової й принтерної черги, туди процеси-сервери записують свої ідентифікатори, щоб інші програми могли з ними сконтактуватись, і тому подібні дані. Крім того, туди кладуться дані, котрі часто змінюються, проте не є тимчасовими, як, наприклад, репозиторії CVS та бази даних.

Було колись так, що в каталог /usr закидували домашні каталоги користувачів. Проте згодом призначення каталога змінилось -- він став призначатись для буквально всього прикладного софту, тобто такого, що ані не є системно важливим (система й без нього проживе), ані не вимагає маніпуляцій у режимі ядра. Тобто, всі ваші текстові процесори, процесори електронних таблиць, редактори картинок -- усі йдуть туди. Окрім того, там же й початкові тексти програм (/usr/src), а також усе, що пов'язано з віконною системою X (/usr/X11R6).

Всередині на нас чекає така ж сама структура каталогів, як у корені (окрім каталогів /boot, /mnt і, ясна річ, /usr). Призначення їх, відповідно, аналогічне. Тобто, файли програм у /bin, файли конфігурації в /etc (хоч насправді ним мало хто користується, всі використовують /etc) і так далі. Особливо цікавим може виявитись каталог /usr/local, особливо ж для охочих власноруч збирати для себе програми з початкових кодів. Наприклад, я туди збираю програми, котрих нема в дистрибутиві, й щодо котрих я впевнений, що не буду інтегрувати їх із системою занадто тісно. Суп окремо, як кажуть, мухи -- окремо. Проте насправді, що робити і як -- це залежить від вас самих або від корпоративної політики.