Ноу Інти, лекція, основи адміністрування системи
Оскільки ми з самого початку вважаємо, що мова в книзі йде про персональному комп'ютері, треба приділити належну увагу завданням адміністрування системи. Адже у вас не буде системного адміністратора, до якого можна звернутися, зіткнувшись з якоюсь проблемою. Хочеться тільки з самого початку нагадати, що, в більшості випадків, для конфігурації системи необхідно мати права суперкористувача root.
І ще одне попереднє зауваження, яке допоможе вам легше зрозуміти і освоїти принципи адміністрування Linux: будь-які налаштування цієї ОС можуть бути виконані шляхом редагування файлів сценаріїв (або скриптів) і конфігураційних файлів, які Новомосковскются скриптами. Причому і ті, і інші (т. Е. І скрипти, і конфігураційні файли) є простими текстовими файлами. Звичайно, в Linux існують різні спеціальні утиліти конфігурації і адміністрування системи (типу linuxconf або printtool), однак результати роботи цих програм все одно записуються в тих же конфігураційних файлах. Образно висловлюючись, про Linux (і UNIX взагалі) можна сказати "це майже цілком обробник тексту". Якщо з самого початку пам'ятати про цю особливість, можна значно легше освоїти питання системного адміністрування Linux.
Основні завдання системного адміністрування. Процеси і їх ідентифікатори
До обов'язків системного адміністратора зазвичай відносять такі завдання:
- підключення та налаштування апаратних пристроїв;
- установка і оновлення програмного забезпечення;
- запуск і настройка загальносистемних сервісів (конфігурація системи);
- Керування користувачами;
- управління процесами;
- розподіл ресурсів;
- забезпечення безпеки.
Питання підключення та налаштування апаратних засобів, а також процедури встановлення та оновлення програмного забезпечення ми розглянемо в двох наступних лекціях. Решта завдань системного адміністрування будуть коротко розглянуті в цьому розділі. Почнемо з розгляду того, як відбувається процес завантаження ОС. Справа в тому, що цей етап багато в чому визначає режим подальшої роботи системи і її конфігурацію. Якщо ви вмієте впливати на процес завантаження, значить, ви вже зможете домогтися бажаної конфігурації системи після завантаження.
Але для розуміння процедури початкового завантаження необхідно мати загальне уявлення про те, що таке процес в системі, оскільки це поняття буде постійно використовуватися в подальшому.
У найпершому наближенні можна вважати, що процес - це завантажена в оперативну пам'ять програма. Але це не зовсім точно, правильніше було б сказати, що "процес виконує програму". Справа в тому, що в Linux спочатку запускається процес, який завантажує в оперативну пам'ять програму з зазначеного йому файлу і починає її виконувати. Це означає, що кожен процес повинен бути запущений (як кажуть - "породжений") якимось іншим процесом. Тобто для кожного процесу однозначно визначено його "батько" (або "предок"), для якого цей процес є "дочірнім" (або "нащадком"). Якщо ви хочете побачити "дерево" запущених у вашій системі процесів, виконайте команду pstree. Висновок цієї команди дозволяє побачити, що "батьком" усіх процесів в системі (або "коренем дерева процесів") є процес init. який першим запускається після завантаження ядра.
Кожен процес в системі має унікальний ідентифікатор - PID. який призначається процесу при запуску. Процес з ідентифікатором 1 виконує програму init. Саме за цими ідентифікаторами система розрізняє процеси. Кожен запущений процес в будь-який момент часу знаходиться в одному з наступних станів: активний (R), призупинено (T) або "спить" (S). Поточний стан процесу називають статусом процесу.
Крім ідентифікатора і статусу для кожного процесу в спеціальних структурах ядра зберігаються такі дані (що приводиться нижче перелік є далеко не повним):
Оскільки Linux - система багатозадачна, одночасно може бути запущено багато процесів. Втім, слово "одночасно" тут вжито не зовсім коректно, оскільки насправді в кожен момент часу виконується тільки один процес. (Для точності слід зауважити, що в багатопроцесорних системах, на яких Linux теж може працювати, одночасно можуть виконуватися декілька процесів, але ми розглядаємо тільки однопроцесорні системи). Планувальник процесів виділяє кожному процесу невеликої квант часу і після закінчення цього кванта передає управління наступному процесу. Кванти часу, що виділяються кожному процесу, так малі, що у користувача створюється ілюзія одночасного виконання багатьох процесів. А для того, щоб деякі, найбільш важливі процеси, отримували більше процесорного часу, для кожного процесу встановлено пріоритет.
Користувачі можуть "спілкуватися" з процесами шляхом посилки їм сигналів. Процеси теж спілкуються один з одним за допомогою сигналів. Коли ми натискаємо комбінацію клавіш
Особливим видом процесів є демони. Взагалі-то в них немає нічого особливого. Це просто процеси, які працюють у фоновому режимі, без виведення будь-яких даних на термінал. Демони зазвичай використовуються для виконання сервісних функцій, обслуговування запитів від інших процесів, причому не обов'язково виконуються на даному комп'ютері.
Треба ще згадати, що процеси можуть запускати ( "всередині себе") окремі нитки (thread), або потоки. Нитки - це паралельно виконувані частини однієї програми, які в Linux реалізовані як процеси, що запускаються зі спеціальним прапором. З точки зору системи вони відрізняються від інших процесів тільки тим, що для них не створюється окреме оточення, вони виконуються в середовищі батьківського процесу.
Наведених даних про процеси нам поки досить (до розгляду процесів ми ще повернемося пізніше).