Використання UNIX Частина 11
Частина, в якій пояснюється, де UNIX зберігаються важливі файли

Серія контенту:
Цей контент є частиною # із серії # статей: Використання UNIX
Цей контент є частиною серії: Використання UNIX
Слідкуйте за виходом нових статей цієї серії.
Я нещодавно придбав GPS-навігатор і вкрай задоволений цією покупкою. Дістатись з точки А в точку Б - більше не проблема: не потрібно шукати місце на карті та визначати, де схід, чи зупинятися у глушині, щоб уточнити, куди веде дорога. Я просто сідаю в машину, вказую пункт призначення і дотримуюсь голосових інструкцій. GPS-навігатор замінює провідника і дає новий сенс афоризму "куди ти йдеш, там ти і перебуваєш".
Цього місяця, щоб задовольнити мою тягу до подорожей, давайте пройдемося структурою файлової системи UNIX. Вивчимо її від каталогу /bin до каталогу /var, що зберігають багато цікавих речей, як добре вивчених, так і маловідомих, і тоді незабаром читач зможе орієнтуватися у файловій системі так само добре, як і у своєму рідному місті.
Що означає назви каталогів?
Файли в ОС UNIX організовані ієрархію. На верхівці ієрархії розташований кореневий каталог - / , іноді званий "сліш" (коса).
Якщо змінити робочий каталог на кореневий каталог / і виконати команду ls , можна побачити кілька підкаталогів із загадковими назвами, такими як etc, bin, var, home і tmp. Хоча тепер UNIX може підтримувати довгі назви файлів, назви більшості цих каталогів склалися близько 30 років тому, коли UNIX тільки з'явився. Відповідно до усталених традицій кожен із каталогів, що у кореневому каталозі, призначений для певної мети.
-
/bin - один із багатьох каталогів, що містять програми та утиліти. Однак /bin містить найважливіші утиліти операційної системи. Наприклад, каталог /bin оболонки містить команди для маніпулювання файлами, такі як cp і chmod , утиліти для архівування і діагностики.
/sbin також містить утиліти життєво важливі для функціонування та підтримки системи. Правда, програми, що знаходяться в /sbin, можуть бути виконані лише суперкористувачами (/sbin. скор. від superuser-bin).
Зазвичай імена каталогів, вказані вище, найчастіше використовуються, хоча деякі версії UNIX трохи відрізняються. Наприклад, у Mac OS X, що базується на FreeBSD®, каталог для зберігання домашніх каталогів користувачів називається /Users, а не /home.
Зберігаючи традиції
Насправді, назви etc, bin, lib і man настільки міцно увійшли до UNIX-культури, що більшість каталогів подібного призначення, де б вони не знаходилися, стали називатися саме так. Наприклад, якщо подивитися в домашній каталог досвідченого користувача UNIX, там можна знайти каталоги bin і lib для зберігання персональних додатків і сценаріїв з бібліотеками.
Правила найменування в UNIX
Щоб дізнатися більше про правила найменування в UNIX, вивчіть Додаток А. Виберіть стандарт, будь-який стандарт.
Дотримуючись правил каталог /usr/local часто містить etc, bin, lib і man. За традицією каталог /usr/local використовується для зберігання програм, які були розроблені або використовуються лише вами. У каталозі /usr/local/bin зберігаються додані нові програми або змінені версії стандартних системних утиліт. Наприклад, системний адміністратор віддасть перевагу використанню нової та більш функціональної версії Perl у каталозі /usr/local/bin/perl, зберігши каталог /usr/bin/perlбез змін як зразок та інших важливих утиліт, які від нього. Каталог /usr/local/lib доповнює каталог /usr/local/bin.
Каталог /usr/local може бути розташований на окремому розділі. Наприклад, на розділі, змонтованому з мережного накопичувача NAS (network attached storage) за допомогою мережної файлової системи NFS для спрощення відновлення системи. Якщо щось станеться з системою, адміністратор зможе перевстановити файли операційної системи, не турбуючись про пошкодження локальних даних.
Програмні продукти також відбивають структуру кореневого каталогу. Наприклад, MySQL при конфігурації з опцією --prefix=/usr/local/mysql створює свій власний кореневий каталог /usr/local/mysql у каталозі /usr/local та створює підкаталоги /usr/local/mysql/bin, /usr/local /mysql/lib і т.д.
Якщо потрібно встановити компоненти MySQL у каталоги /usr/local/bin, /usr/local/lib і т.д., слід використовувати опцію --prefix=/usr/local .
Інші важливі каталоги
Познайомимося з іншими важливими каталогами ОС UNIX.
Каталог /etc служить для зберігання файлів конфігурації, які зазвичай мають розширення .conf. Великий за розмірами програмний продукт може мати свій підкаталог для зберігання власних конфігураційних файлів. Web-сервер Apache є таким прикладом, особливо починаючи з версії 2.2, його конфігураційні файли були реорганізовані з монолітних в файли з окремих модулів.
Іншим нововведенням є каталог /etc/init.d, де міститься безліч сценаріїв ініціалізації, виконуваних під час завантаження системи. Якщо потрібно акуратно перезапустити демон, наприклад, після зміни його конфігурації, то треба в каталозі /etc/init.d знайти відповідний сценарій.Наприклад, перезапуск поштового транспортного агента Postfix виконується за допомогою наступного сценарію:
Каталог /etc/init.d також містить сценарії для відключення однокористувацького режиму, перезавантаження та вимкнення комп'ютера та заборони входу в систему.
Як згадувалося вище, каталог /var містить файли, розмір яких збільшується з часом. Як і кореневий каталог, каталог /var містить підкаталоги, призначені для певних цілей.
Якщо система надає централізовану службу для роботи з факсами, каталог /var/spool також відстежує чергу подібних запитів.
Основні сторінки довідника man для ОС UNIX знаходяться у каталозі /usr/man. Додаткові набори сторінок можна знайти у каталозі /usr/local/man та у каталозі man конкретного продукту, наприклад /usr/local/mysql5/man.
Оскільки сторінки man можуть бути у різних каталогах, програма man підтримує змінну оточення MANPATH, що працює аналогічно PATH. Щоб шукати сторінку man більш ніж в одному каталозі, задайте MANPATH список каталогів, що містять сторінки man.
У цьому прикладі першим буде проглядатися каталог $HOME/man (крайній ліворуч), за ним проглядатиметься каталог /usr/local/mysql/man і т.д. До речі, чотири команди, наведені вище, можна звести до однієї:
Проте, задаючи елементи MANPATH окремо, можна легко змінити порядок пошуку та додати нові каталоги. Крім того, якщо у вас багато шляхів, редагувати скорочену версію змінної MANPATH (як і PATH) стає важким завданням.
Файли, що підключаються
Файли, що підключаються (include files) або заголовні (header files) зберігають константи, макрокоманди та інші структури, що використовуються операційною системою або певноюбібліотекою. Замість того, щоб перевизначати конкретну структуру, можна просто підключити заголовний файл до вихідного коду (найпростіша форма повторного використання) і програмувати відповідно до специфікації заголовного файлу. (Секції 2 і 3 man призначені для подібних специфікацій, наприклад, спробуйте таку команду man 2 signal).
include - така сама стандартна назва каталогу, як bin і lib. Якщо з програмою поставляється комплект розробника й у програми створено свій кореневий каталог, то підкаталозі include можна знайти її заголовні файли.
Або якщо програма встановлена в загальний каталог /usr/local/, заголовні файли можна знайти в підкаталозі з ім'ям програми в каталозі /usr/local/include. Чим викликано такий виняток із загального правила зберігати все у загальному каталозі? Заголовні файли зазвичай мають стандартні назви, так що при встановленні всіх файлів в один каталог можуть виникнути колізії, коли одна програма перезапише файли заголовків іншої програми.
При складанні програм з вихідного коду (наприклад, якщо потрібно вивчити нову версію), коли заголовні файли знаходяться в нестандартному каталозі, може знадобитися додати опцію -I команди компілятора. Наприклад, якщо заголовки ImageMagick знаходяться в каталозі /opt/include/magick, потрібно додати -I/opt/include/magick у рядок запуску компілятора.
Висновок
На цьому сьогоднішню подорож каталогами UNIX завершено. Тепер читач зможе легко переміщатися по дереву каталогів UNIX, і якщо він загубиться, то повернутися у вихідний каталог зможе з допомогою cd . Також можна використовувати команди find і locate, щоб знайти об'єкти практично будь-якого типу: файли, бібліотеки та заголовні файли, що виконуються.
Додаток А. Виберіть стандарт, будь-який стандарт.
Програмне забезпечення, що поставляється разом з операційною системою, завжди встановлюється у певні каталоги /bin або /lib файлової системи, тоді як програмне забезпечення, яке локально встановлюється, можна виявити в будь-якому місці. Деякі системні адміністратори встановлюють додаткове програмне забезпечення каталоги /usr/local, інші використовують каталог /opt (англ. optional), оскільки ці програми не обов'язкові для функціонування системи. Крім того, деякі адміністратори розміщують всі файли, що виконуються в каталозі /usr/local/bin або /opt/bin, всі бібліотеки в каталозі /usr/local/lib або /opt/lib і т.д.
Інший підхід, якого я дотримуюся, передбачає створення кореневого каталогу для кожного встановлюваного додатка, особливо для великих додатків. Наприклад, я встановив MySQL у каталог /usr/local/mysql5.0 та Apache у каталог /usr/local/apache2.2. При встановленні кожної програми для нього створюється окремий каталог bin, lib і man усередині кореневого каталогу програми.
Недолік такого підходу полягає в тому, що кожен користувач повинен додавати безліч каталогів bin змінну оточення PATH. І хоча це обмеження не надто обтяжливе, його можна пом'якшити установкою для змінної PATH значення за замовчуванням у сценарії, що виконується у системі під час запуску оболонки. Наприклад, сценарій /etc/profile, що виконується під час запуску оболонки Bash, може містити в собі:
Проте зберігання програми у власній "папці-контейнері" має певні переваги:
- Завдяки цьому стає ясно, яким програмним продуктом забезпечується робота певної програми. Наслідуючи такий принцип класифікації можна дізнатисяназва програми, використовуючи команди which :
- Можна паралельно мати кілька версій одного продукту.
Наприклад, якщо потрібно використовувати Perl версії 5.6 та Perl 5.8, встановіть основну версію в каталог /usr/local/perl5.6 та останню версію в каталог /usr/local/perl5.8. Кожен користувач зможе вибрати, яку версію Perl використовувати, змінивши змінну PATH.
Паралельно можна тримати на комп'ютері кілька версій, але визначити версію за промовчанням за допомогою символічного посилання. Потрібно створити символічне посилання на версію програмного продукту, яка повинна використовуватися за умовчанням.
Наприклад, припустимо, що є дві версії Perl, згадані вище. Якщо потрібно, щоб за промовчанням використовувалася версія Perl 5.8, треба створити символічне посилання на каталог /usr/local/perl5.8 і назвати її perl:
Тоді користувач зможе додати шлях /usr/local/perl/bin до змінної PATH для запуску команди perl. І якщо потрібно переключитися на більш нову або стару версію Perl, то досить просто видалити символічне посилання і створити його заново, але вже вказує на інший каталог.
Символічні посилання виявляються незамінними для вирішення подібних завдань обслуговування, наприклад, підтримки кількох версій, перенаправлення шляхів та побудови колекцій для зручного доступу. Наприклад, можна додати до традиційного каталогу /usr/local/bin посилання на команди з інших програмних продуктів, наприклад, ln -s /usr/local/perl/bin/perl /usr/local/bin/perl . Можна створити символічне посилання на основі іншого символічного посилання.