Ієрархія каталогів і файлових систем в Linux h2>
Віктор Костромін p>
Структура
каталогів поняття чисто логічне і до реальних механізмів роботи з файлами
відношення не має. Кожна конкретна операційна система могла б будувати її
по-своєму, що призвело б до несумісності і непереносимості програм. Групою
ентузіастів був розроблений стандарт FHS ієрархії файлових систем для
Unix-подібних операційних систем. P>
Будь-який
користувач знаком сьогодні з поняттями файлу та каталогу (з точки зору Unix
каталог той же файл) [1-3]. Групою ентузіастів зі спільноти розробників
програм з відкритим кодом була запропонована специфікація структури каталогів для
Unix-подібних систем, так званий стандарт ієрархії файлових систем
(Filesystem Hierarchy Standard, FHS). P>
Робота
над FHS почалася в серпні 1993 року зі спроби упорядкувати структуру файлів і
каталогів Linux. Спочатку його називали проектом стандартів файлової системи
Filesystem Standards Project (FSSTND), а перша версія була випущена 14 лютого
1994 року. На початку 1995 року було поставлено завдання щодо створення більш загальної
версії FSSTND, призначеної не лише для Linux, але і для інших
Unix-подібних систем, в першу чергу BSD 4.4. З огляду на розширення сфери
дії стандарту, його перейменували в FHS (www.pathname.com/fhs). Стандарт
увібрав позитивні якості, властиві BSD та інших систем в частині підтримки
різних архітектур та обліку вимог роботи в гетерогенних мережах. p>
По-перше,
враховувалося, що, хоча в Unix-подібних системах структура каталогів
представлена у вигляді єдиного дерева, окремі його «гілки» можуть розташовуватися
на різних носіях або в різних файлових системах. Розміщення файлів на різних
носіях дозволяє оптимізувати процеси завантаження, подальшого
функціонування та можливого оновлення системи. При цьому файлові системи
можуть фізично розташовуватися на різних комп'ютерах і бути різними за своєю
внутрішньої організації (ext2fs, vfat і т.д.). По-друге, будь-яка Unix-система --
система мережева. Тому при розміщенні окремих файлів у різних частинах
файлової структури враховувалося, що деякі файли повинні бути доступні з
інших комп'ютерів в мережі, а до інших файлів доступ по мережі необхідно
обмежити. Група неподільні файлів вичленяються як з міркувань
безпеки, так і просто тому, що ці файли визначають локальну
конфігурацію системи і тому потрібні лише на даному комп'ютері. Виділення
групи розділяються файлів дозволяє також економити загальне дисковий простір.
По-третє, існують файли, змінювати які може тільки адміністратор, і ті,
які будь-який користувач може змінювати самостійно. До числа статичних
відносяться виконувані файли, бібліотеки, документація та ін Для пересічних
користувачів ці файли повинні бути доступні тільки на читання. Знання цих
передумов допомагає зрозуміти логіку розміщення окремих файлів і каталогів в
структурі каталогів, що пропонується стандартом FHS. p>
Кореневий каталог h2>
Стандарт
FHS пропонує створити в кореневому каталозі наступні підкаталоги: p>
bin
- Файли основних команд (утиліт), які необхідні, коли жодна інша
файлова система ще не змонтована (наприклад, у одного користувача режимі);
p>
boot
- Незмінні файли, необхідні для запуску системи; p>
dev
- Файли пристроїв; p>
etc
- Файли конфігурації системи на даному комп'ютері; p>
home
- Домашні каталоги користувачів (факультативно); p>
lib
- Основні колективні бібліотеки та модулі ядра; p>
lib
- Основні колективні бібліотеки для альтернативних форматів (факультативно); p>
mnt
- Точку монтування для тимчасово підключаються файлових систем; p>
root
- Домашній каталог користувача root (факультативно); p>
opt
- Додаткові пакети програмного забезпечення; p>
sbin
- Основні системні виконувані файли; p>
tmp
- Тимчасові файли; p>
usr
- Ієрархію другого рівня; p>
var
- Змінні дані. p>
В
відповідно до вимог стандарту програми не повинні створювати файли і
каталоги або вимагати наявності якихось спеціальних файлів і каталогів (крім
перерахованих) у кореневому каталозі. По-перше, розмір кореневої файлової системи
бажано зберігати по можливості малим, а по-друге, стандарт FHS
забезпечує достатню гнучкість і зручність розміщення файлів, що не потрапили в
кореневу систему, в інших файлових системах і підкаталогах. Деякі
підкаталоги кореневого каталогу факультативно. Але вже якщо вони існують, то
повинні розміщуватися в кореневому каталозі, але не обов'язково в кореневої файлової
системі. p>
Каталог
/ bin містить команди, які можуть використовуватися як адміністратором, так і
рядовими користувачами, причому тільки ті команди, які необхідні, коли
ніяка інша файлова система, крім кореневої, ще не змонтована (наприклад,
в одного користувача режимі). Ті програми які не так важливі, щоб
розміщуватися в кореневій файловій системі, повинні розміщуватися в каталозі
/ usr/bin. В/bin обов'язково мають бути такі команди (або
символічні посилання на них): cat, chgrp, chmod, chown, cp, date, dd, df,
dmesg, echo, false, hostname, kill, ln, login, ls, mkdir, mknod, more, mount,
mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true, umount, uname, csh, ed,
tar, cpio, gzip, gunzip, zcat, netstat, ping. У каталозі/bin не повинно бути
підкаталогів. p>
Каталог
/ boot містить все, що необхідно в процесі завантаження, виключаючи конфігураційні
файли і інсталятора карти завантаження. Ядро операційної системи має
розташовуватися або в кореневому каталозі /, або в/boot; програми, необхідні
завантажувачу для організації завантаження файлів, повинні розміщуватися в/sbin, а
конфігураційні файли завантажувача - в/etc. p>
/dev
- Місце розташування спеціальних файлів пристроїв. На випадок, якщо буде потрібно
створювати файли пристроїв вручну, каталог/dev повинен містити команду
MAKEDEV, яка може створити файл пристрою у випадку необхідності. P>
Каталог
/ etc містить конфігураційні файли та каталоги, специфічні для даної
конкретної системи, але в ньому не повинно бути двійкових файлів. Відповідно до
стандартом FHS каталог в обов'язковому порядку повинен містити підкаталог/opt,
в якому повинні розміщуватися підкаталоги з файлами налаштувань окремих
пакетів та програм. Для кожного встановленого пакета повинен
створюватися конфігураційний каталог/etc/opt/package. У каталозі/etc повинні
міститися такі каталоги і файли: p>
/X11
- Конфігураційні файли X Window; p>
/sgml
- Конфігураційні файли для SGML і XML; p>
csh.login
- Загальносистемний ініціалізації файл для csh; p>
exports
- Список контролю доступу для мережевої файлової системи NFS; p>
fstab
- Постійна інформація для монтування файлових систем; p>
ftpusers
- Список контролю доступу для демона FTP; p>
gateways
- Список шлюзів для демона routed; p>
gettydefs
- Установки терміналу, що використовуються демоном getty; p>
group
- Список груп користувачів у системі; p>
host.conf
- Файл конфігурації для системи розпізнавання імен; p>
hosts
- Постійна інформація про імена хостів; p>
hosts.allow
- Список хостів, з яких дозволено доступ до системи; p>
hosts.deny
- Список хостів, з яких заборонений доступ до системи; p>
hosts.equiv
- Список довірених хостів для rlogin, rsh, rcp; p>
hosts.lpd
- Список довірених хостів для демона друку lpd; p>
inetd.conf
- Конфігураційний файл для демона inetd; p>
inittab
- Конфігураційний файл для демона init; p>
issue
- Повідомлення, що видається системою до реєстрації користувача; p>
ld.so.conf
- Список каталогів для пошуку бібліотек, що розділяються; p>
motd
- Повідомлення, що видається системою після реєстрації користувача; p>
mtab
- Динамічно змінюється інформація про змонтованих файлових системах; p>
mtools.conf
- Конфігураційний файл для mtools p>
networks
- Статична інформація про мережеві імена; p>
passwd
- Файл паролів користувачів; p>
printcap
- База даних з настройками принтерів для демона lpd; p>
profile
- Загальносистемний файл ініціалізації для оболонки, що запускається при вході
користувача в систему; p>
protocols
- Перелік IP-протоколів; p>
resolv.conf
- Конфігураційний файл для системи розпізнавання імен; p>
rpc
- Перелік протоколів віддаленого виклику процедур; p>
securetty
- Файл зі списком пристроїв, з яких може заходити користувач root; p>
services
- Імена портів для мережевих служб; p>
shells
- Список наявних в системі оболонок; p>
syslog.conf
- Конфігураційний файл для демона syslogd. p>
Файл
mtab не відповідає незмінною природі файлів, розміщених в/etc, і
поміщений до каталогу як виняток, з історичних причин. p>
В
невеликих системах кожен домашній каталог користувача є одним з
безпосередніх підкаталогів каталогу/home, таких як/home/smith,
/ home/operator і т.д. У великих системах (особливо коли каталоги/home
є розділяються між багатьма хостами) корисно об'єднати домашні
каталоги в групи, ввівши підкаталоги груп, такі як/home/staff,
/ home/students. Оскільки структура домашніх каталогів різниться від хоста до
хосту, ніяких вимог на неї не накладається. p>
/lib
містить бібліотеки, необхідні для завантаження системи і запуску
команд з каталогів/bin і/sbin. Принаймні, один з файлів,
відповідних кожному з наступних шаблонів, має знайтися в даному каталозі
(це можуть бути або реальні файли, або символічні посилання): libc.so. *,
динамічно під'єднуються бібліотеки Cи; ld *, завантажувач/часу виконання.
Не повинні розташовуватися в/lib колективні бібліотеки, які необхідні
тільки виконуваним файлів, розташованим в/usr (таким, як двійкові файли X
Window). Зокрема, бібліотека libm.so. * може бути розташована в/usr/lib,
якщо вона не потрібна ніяким програмам з/bin або/sbin. Може існувати
більше одного варіанта каталогу/lib в системах, що підтримують більше одного
формату виконуваних файлів (наприклад, 32-розрядні і 64-розрядні формати), при
цьому для кожного формату потрібен свій окремий варіант бібліотек, що розділяються
(які можуть називатися/lib32 та/lib64). p>
/mnt
призначений для тимчасового монтування файлових систем в міру необхідності.
Вміст цього каталогу індивідуально для кожної системи і не повинно жодним
чином впливати на роботу запускаються програм. p>
/opt
резервується стандартом FHS для встановлення додаткових пакунків.
Передбачається, що будь-який такий пакет повинен розміщувати свої статичні файли в
окремій структурі/opt /, де - назва
пакету. Виконувані програми розташовуються в каталозі
/ opt// bin, а в/opt// man розміщуються сторінки звичайного
для Unix інтерактивного керівництва man. Файли пакету, які є
змінними (змінними при виконанні стандартних операцій), повинні
встановлюватися в/var/opt, а специфічні для хоста конфігураційні дані
повинні встановлюватися в/etc/opt.
поза каталогів/opt,/var/opt та/etc/opt, крім тих файлів, які повинні
опинитися в інших місцях з тієї причини, що інакше пакет не зможе
функціонувати нормально. Наприклад, файли блокування пристроїв повинні
розташовуватися в/var/lock, а файли пристроїв повинні розташовуватися в/dev. p>
/root
- Домашній каталог користувача root. Рекомендоване місце його розташування --
коренева файлова система. У FHS підкреслюється, що обліковий запис
суперкористувача повинна використовуватися виключно для системного
адміністрування і його не рекомендується витрачати для виконання завдань,
які можуть бути виконані непривілейованим користувачем. З цієї причини
не варто розміщувати в root підкаталоги для пошти та інших програм. Пошта для
адміністраторських таких ролей, як root, postmaster і webmaster повинна
пересилатися відповідному користувачеві. p>
/sbin
надає інструменти для виконання завдань системного адміністрування (та інші
команди, що використовуються тільки користувачем root). Цей каталог містить
виконувані файли, необхідні для завантаження системи та її відновлення в
різних ситуаціях (restoring, recovering, and/or repairing the system), не
що потрапили в каталог/bin. Єдина команда, яка обов'язково повинна
бути присутнім в/sbin, - shutdown. Наприклад, команда ping, хоча вона абсолютно
необхідна адміністратор, часто використовується і рядовими користувачами, і
з цієї причини повинна розміщуватися в/bin. Автори стандарту рекомендують
надати всім користувачам право на читання і виконання для всіх файлів,
розташованих в/sbin, крім, може бути тих програм, для яких встановлені
біти setuid і setgid. Поділ каталогів/bin і/sbin робиться з метою
встановлення явного розходження між виконуваними файлами, які використовуються
всіма, і тими інструментами, які в основному використовуються для вирішення
адміністративних завдань. З точки зору безпеки немає ніяких переваг у
тому, щоб зробити/sbin недоступним для користувачів. p>
Каталог
/ tmp призначений для зберігання тимчасових файлів, що створюються в процесі роботи
різних програм. Рекомендується видаляти всі файли та каталоги в/tmp при
кожному завантаженні системи. p>
Для
збереження сумісності з іншими системами (до тих пір, поки всі реалізації
не почнуть використовувати каталоги, розміщені безпосередньо в/var) можуть
створюватись такі символічні посилання: p>
/usr/spool ->/var/spool p>
/usr/tmp ->/var/tmp p>
/usr/spool/locks ->/var/lock p>
Каталог
/ usr/local використовується для встановлення програм, які будуть використовуватися
локально в рамках даного хоста. Він може використовуватися для програм і даних,
не потрапили в каталог/usr, доступ до яких дозволено з інших хостів. Цей
каталог не повинен перезаписуватися при оновлення системного програмного
забезпечення. Оскільки в цей каталог встановлюються програмні пакети, в ньому
створюється структура підкаталогів, аналогічна структурі кореневого каталогу й
каталозі/usr. p>
/usr/share
містить всі файли, які призначені тільки для читання і не залежать від
архітектури. Скажімо, комп'ютери на платформах i386, Alpha і PowerPC можуть
підтримувати один загальний каталог/usr/share, який монтується на інших
комп'ютерах. Прикладами файлів, які розміщуються в цьому каталозі, можуть
служити файли документації (man, doc) або бази даних (dict, terminfo,
zoneinfo). Будь-яка програма або пакет, який містить або вимагає даних, не
підлягають модифікації, повинні зберігати ці дані у каталозі/usr/share (або
/ usr/local/share, якщо пакет встановлено локально). У каталозі/usr/share
створюються наступні підкаталоги або символічні посилання: p>
man
- Інтерактивні керівництва; p>
misc
- Різні архітектурно-незалежні дані, для яких не потрібен окремий
підкаталог в/usr/share; p>
dict
- Словники (факультативно), звичайно тут знаходиться тільки файл words для
англійської мови, який використовується утилітою look і різними програмами
перевірки правопису; списки слів для інших мов можуть бути додані,
використовуючи англійська назва відповідної мови, наприклад,/usr/share/dict/french,
/ usr/share/dict/danish і т.д.; p>
doc
- Різна документація (факультативно); p>
games
- Файли статичних даних для/usr/games (факультативно); p>
info
- Основний каталог для системи GNU Info (факультативно); p>
locale
- Локальна інформація (факультативно); p>
nls
- Каталоги повідомлень для підтримки мов (факультативно); p>
sgml
- Дані для SGML і XML (факультативно); p>
terminfo
- Каталог бази даних для terminfo (факультативно); p>
tmac
- Макроси для troff (факультативно); p>
zoneinfo
- Конфігураційні файли та інформація про тимчасову зоні (факультативно). p>
Дані
ігрових програм, які зберігаються в/usr/share/games, повинні бути статичними.
Будь-які модифікуються файли, такі як файли з протоколами і результатами ігор,
повинні розміщуватися в каталозі/var/games. p>
Як
відомо, сторінки інтерактивного керівництва man традиційно розбиті на
секції. Для кожної секції створюється окремий каталог з ім'ям
//manN /, де - вказівка на
архітектуру (наприклад, i386), а рядок визначає мову, країну і
кодування і мають такий вигляд: p>
[_][.][,]. p>
Каталог
/ var містить файли з змінними даними: каталоги і файли черг, дані
про адміністрування, тимчасові файли. Деякі частини каталоговій структури
/ var не є розділяються між різними системами. До них відносяться
/ var/log,/var/lock та/var/run. Інші частини можуть бути розділяються, наприклад,
/ var/mail,/var/cache/man,/var/cache/fonts та/var/spool/news. Структура
каталогів/var визначається в стандарті FHS з тією метою, щоб зробити
можливим монтування каталозі/usr в режимі тільки для читання. Все, що
записується на диск у процесі виконання системних операцій (у
протилежність процесам установки і підтримки програм), що має розміщуватися
в каталозі/var. Кілька підкаталогів «зарезервовані» - вони не повинні
використовуватися довільним чином, оскільки це суперечить сформованій
практиці:/var/backups,/var/cron,/var/msgs, p>
/var/preserve. p>
Програми
в загальному випадку не повинні додавати каталоги безпосередньо в/var. Такі
кат?? логи повинні створюватися у відповідних підкаталогах. Каталог/var/cache
призначений для кешування даних додатками. На відміну від/var/spool,
кешовані файли можуть бути видалені без втрати даних. Але ці дані повинні
зберігатися між сеансами роботи програми, але при перезавантаження системи.
Додаток повинен завжди мати можливість продовжити роботу, навіть після
видалення цих файлів адміністратором (наприклад, при нестачі дискового
простору). Існування окремого каталогу для Кешована даних
дозволяє системним адміністраторам встановлювати для цього каталогу правила
використання та резервного копіювання, що відрізняються від правил, що встановлюються
для інших каталогів у/var. Зазвичай в цьому каталозі створюються підкаталоги fonts
(локально згенеровані шрифти), man (локально відформатовані сторінки
керівництва), www (кеш даних для WWW-проксі), (Кешована
дані пакета)./var/cache/man передбачений для сайтів, в
яких файлова система/usr монтується тільки на читання, але в них
допускається створення сторінок керівництва, що відформатували локально. Сайти, в
яких/usr монтується з правом запису (наприклад, коли у системи всього один
користувач) можуть не створювати каталозі/var/cache/man, а використовувати замість
нього каталоги cat безпосередньо в/usr/share/man. p>
Файли
блокування пристроїв та інших ресурсів, що використовуються багатьма додатками,
такі як файли блокування послідовних портів, повинні зберігатися в
каталозі/var/lock. Назви цих файлів повинні формуватися відповідно до
угодою, відповідно до якого використовується префікс «LCK ..», за яким слідує
базове ім'я пристрою. Файли блокування в/var/lock повинні бути доступні всім
з читання. p>
Каталог
/ var/log містить різноманітні файли протоколів: lastlog (запис про останній
вході в систему кожного користувача); messages (системні повідомлення від
syslogd); wtmp (записи про всіх входах і виходах користувачів у систему). p>
Область
спулінга для пошти повинна розміщуватися в каталозі/var/mail, а імена файлів з
повідомленнями повинні мати вигляд. Файли поштових скриньок в цих
каталогах повинні зберігатися у форматі стандартних поштових скриньок Unix. p>
Змінні
дані для пакунків, встановлених в/opt, повинні розміщуватися в
/ var/opt /, де - назва структури каталогів в
/ opt, в якій зберігаються статичні дані додаткового пакету ПЗ, виключаючи
ті випадки, коли розміщення явно вказано в будь-якому файлі з/etc. На
внутрішню структуру каталогу/var/opt/ніяких обмежень не
накладається. p>
Каталог
/ var/run містить дані, що описують стан системи з моменту її завантаження.
Програми можуть мати підкаталоги в каталозі/var/run, тим більше, якщо вони
використовують більше одного файлу часу виконання. У цьому каталозі повинні бути,
зокрема, розміщені файли з ідентифікаторами запущених процесів (PID).
Угода про імена цих файлів наступне:. Pid.
Вміст PID-файлу являє собою ідентифікатор процесу в коді ASCII,
записаний в десяткового нотації, за яким слідує символ кінця рядка.
Наприклад, якщо crond запущений як процес з номером 25,/var/run/crond.pid буде
містити три символи: два, п'ять і символ нового рядка. В/var/run розташований
також файл utmp, в якому зберігається інформація про те, хто в даний момент
використовує систему. Непривілейованих користувачі повинні бути позбавлені права
записи в каталог/var/run. p>
Каталог
/ var/spool містить дані, які чекають якоїсь подальшої обробки:
підкаталоги lpd (спулінг для принтера), mqueue (черга вихідної пошти), news
(спулінг новин), uucp (спулінг для UUCP) і т.п. p>
Каталог
/ var/tmp використовується програмами, яким потрібно тимчасові файли або
каталоги для зберігання даних, які зберігаються між перезавантаження системи. p>
Ієрархія файлових систем h2>
В
кореневої файлової системи має знаходитися інформація для завантажувача і
Основні файли, необхідні в процесі старту системи (наприклад, ядро). Тут
ж повинні розміщуватися файли конфігурації і все, що необхідно для монтування
інших файлових систем, включаючи такі утиліти, як mount. Щоб забезпечити
можливість відновлення системи після збоїв, в кореневій файловій системі
повинні бути присутніми всі утиліти, необхідні для адміністратора
діагностування проблем та реконструкції системи після будь-якої аварійної
ситуації. Тут же повинні бути розташовані і ті програми які необхідні для
відновлення даних з резервних копій. p>
За
ряду причин розмір кореневої файлової системи бажано зробити досить
малим. p>
Іноді
доводиться монтувати кореневу файлову систему з носія малого обсягу. p>
Коренева
файлова система звичайно містить неподільні файли, специфічні для
конкретної системи. Розділяються файли можна розмістити на мережних дисках. Це
дозволяє використовувати в якості робочих станцій в мережі комп'ютери з
маленькими за обсягом локальними жорсткими дисками. p>
Маленька
коренева файлова система менш схильна до руйнування у випадку збоїв. p>
З
стандарту можна зробити висновок про те, що в кореневій файловій системі
обов'язково повинні цілком розташовуватися каталоги/bin,/dev,/etc,/lib,/sbin
і, можливо,/root. p>
Каталог
/ boot в силу апаратних обмежень може виявитися необхідним розмістити на
окремому розділі диску, розташованому цілком у межах перших 1024 циліндрів
завантажувального диска. p>
Решта
підкаталоги кореневого каталогу (home, mnt, opt, tmp, usr, var) можуть
розміщуватися в інших файлових системах (на інших розділах або дисках). Більше
того, в стандарті явно постулюється, що в каталогах/usr,/opt та/var
розміщуються такі файли, які можуть розташовуватися в інших розділах диска
або в інших файлових системах. Розробники стандарту радять в тому випадку,
коли/var не може бути розміщений в окремому розділі диску, перемістити каталог
/ var з кореневого розділу в розділ з каталогом/usr. Однак/var не можна робити
посиланням на/usr тому що це утруднює поділ/usr та/var і може
призвести до конфлікту імен, краще вже зробити/var посиланням на/usr/var. p>
Відзначимо,
що в статті мова йде тільки про вимоги і рекомендації стандарту FHS,
розробленого з орієнтацією на операційні системи Linux та BSD. Навіть
конкретні дистрибутиви Linux не у всьому слідують цим стандартом. Так, в Red
Hat Linux версій 7.3 та 8.0 каталог/etc/opt хоч і створений, але порожній, а
конфігураційні каталоги пакетів розміщуються безпосередньо в/etc. Можна
вказати і інші відхилення від стандарту. Але все ж в основному структура
каталогів витримується відповідно до FHS, так що знайомство з цим
стандартом, безумовно, корисно для всіх користувачів Linux, а тим більше
розробникам. p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://www.winsov.ru
p>