Демони багато працюють для того, щоб ви могли зосередитися на своїй справі. Уявіть, що ви пишете статтю або книгу. Ви зацікавлені в тому, щоб писати. Зручно, що вам не потрібно вручну запускати принтер та мережеві служби, а потім стежити за ними весь день для того щоб переконатися, що все працює нормально.
Це все завдяки демонам, вони виконують цю роботу за нас. У сьогоднішній статті ми розглянемо що таке демони в Linux, а також для чого вони потрібні.
Зміст
- Що таке демони в понятті Linux
- Які демони працюють на вашому комп'ютері
- Запуск демонів у Linux
- Приклади демонів у Linux
- Як з'явився термін демон у Linux
Що таке демони в понятті Linux
Демон Linux - це програма, яка має певну унікальну мету. Зазвичай, це службові програми, які непомітно працюють у фоновому режимі для того, щоб відстежувати стан та обслуговувати певні підсистеми і гарантувати правильну роботу всієї операційної системи в цілому. Наприклад, демон принтера відстежує стан служб друку, а мережевий демон керує мережевими підключеннями та стежить за їх станом.
Багато людей, які перейшли в Linux з Windows знають демонів як служби або сервіси. В MacOS термін "Служба" має інше значення. Оскільки MacOS це теж Unix, в ній використовуються демони. А службами називаються програми, які знаходяться в меню Служби.
Демони виконують певні дії у запланований час або залежно від певних подій. В системі Linux працює безліч демонів і кожен з них призначений для того, щоб стежити за своєю невеликою частиною операційної системи. Оскільки вони не перебувають під безпосереднім контролем користувача, вони фактично невидимі, але тим не менш необхідні. Оскільки демони виконують більшу частину своєї роботи у фоновому режимі, вони можуть здаватися загадковими.
Які демони працюють на вашому комп'ютері
Зазвичай імена процесів демонів закінчуються на літеру d. У Linux прийнято називати демони саме так. Існує багато способів побачити працюючих демонів. Вони трапляються у списку процесів, що виводиться утилітами ps, top або htop. Але найбільше для пошуку демонів підходить утиліта pstree. Ця утиліта показує всі процеси, запущені у вашій системі у вигляді дерева. Відкрийте термінал і виконайте таку команду:
pstree
Ви побачите повний список усіх запущених процесів. Ви можете не знати за що відповідають ці процеси, але вони всі будуть тут перелічені. Вивід pstree - чудова ілюстрація того, що відбувається з вашою машиною. Тут зручно знайти запущені демони Linux.
Ось демони Linux, яких ви можете тут побачити: udisksd, gvfsd, systemd, logind та багато інших. Список процесів доволі великий, тому він не поміститься в одному вікні терміналу, але ви можете його гортати.
Запуск демонів у Linux
Давайте розберемося як запустити демона Linux. Ще раз. Демон - це процес, що працює у фоновому режимі та перебуває поза контролем користувача. Це означає, що демон не пов'язаний з терміналом, за допомогою якого можна було б ним керувати. Процес - це запущена програма. У кожен момент часу він може бути запущеним, сплячим або зомбі (процес, що виконав своє завдання, але очікує поки породжуючий процес прийме результат).
У Linux існує три типи процесів: інтерактивні, пакетні та демони. Інтерактивні процеси користувач запускає з командного рядка. Пакетні процеси, як правило, теж не пов'язані з терміналом. Зазвичай вони запускаються коли система мінімально завантажена і виконують свою роботу. Це можуть бути, наприклад, скрипти резервного копіювання або інші подібні обслуговуючі сценарії.
Інтерактивні та пакетні процеси не можна вважати демонами, хоча їх можна запускати у фоновому режимі і вони виконують певну роботу. Ключова відмінність у тому, що обидва види процесів потребують участі людини. Демонам не потрібна людина для того щоб їх запускати.
Коли завантаження системи завершується, система ініціалізації, наприклад, systemd, починає створювати демонів. Цей процес називається forking (розгалуження). Програма запускається як звичайний інтерактивний процес з прив'язкою до терміналу, але в певний момент вона ділиться на два ідентичних потоки. Перший процес, прив'язаний до терміналу може виконуватися далі або завершитися, а другий, вже ні до чого не прив'язаний продовжує працювати у фоновому режимі.
Існують й інші способи розгалуження програм у Linux, але традиційно для створення дочірніх процесів створюється копія поточного. Термін forking з'явився не з нізвідки. Його назва походить від функції мови програмування Сі. Стандартна бібліотека Сі містить методи для керування службами, і один з них називається fork. Використовується він для створення нових процесів. Після створення процесу, процес, на основі якого було створено демон, вважається для нього породжуючим процесом.
Коли система ініціалізації запускає демонів, вона просто розділяється на дві частини. У такому випадку система ініціалізації вважатиметься породжуючим процесом. Однак у Linux є ще один метод запуску демонів. Коли процес створює дочірній процес демона, а потім завершується. Тоді демон залишається без породжуючого процесу і тому ним стає система ініціалізації. Важливо не плутати такі процеси з зомбі. Зомбі - це процеси, що завершили свою роботу і очікують поки породжуючий процес прийме їх код виходу.
Приклади демонів у Linux
Найпростіший спосіб зрозуміти, що процес є демоном - подивитись на назву команди. Зазвичай вона містить літеру d наприкінці. Ось невеликий список демонів, які працюють у вашій системі. Кожен демон створено для виконання певного завдання.
- systemd - основне завдання цього демона уніфікувати конфігурацію та поведінку інших демонів у різних дистрибутивах Linux.
- udisksd - обробляє такі операції як: монтування, розмонтування, форматування, підключення та відключення пристроїв зберігання даних, таких як жорсткі диски, USB флешки тощо.
- logind - невеликий демон, що керує авторизацією користувачів.
- httpd - демон веб-сервера, дозволяє розміщувати на комп'ютері або сервері веб-сайти.
- sshd - дозволяє підключатися до сервера або комп'ютера віддалено, за протоколом SSH.
- ftpd - організовує доступ до комп'ютера за протоколом FTP для передачі файлів.
- crond - демон планувальника, що дозволяє виконувати потрібні завдання у визначений час.
Як з'явився термін демон у Linux
То звідки ж узявся цей термін? На перший погляд може здатися, що у творців операційної системи просто було викривлене почуття гумору. Але це не зовсім так. Це слово з'явилося в обчислювальній техніці ще до появи Unix. А історія самого слова ще більш давня.
Спочатку це слово писалося як daimon і означало ангелів-охоронців або духів-помічників, які допомагали формувати характери людей. Сократ стверджував, що у нього був демон, який йому допомагав. Демон Сократа говорив йому коли слід тримати язик за зубами. Він розповів про свого демона під час суду в 399 році до нашої ери. Тож віра в демонів існує досить давно. Іноді слово daimon пишеться як daemon. Це одне й те саме.
У той час як daemon - помічник, demon - це злий персонаж із біблії. Відмінності в написанні не випадкові й вочевидь так було вирішено десь у 16-му столітті. Тоді вирішили, що daemons - хороші хлопці, а demons - погані.
Використовувати слово демон (daemon) в обчислювальній техніці почали в 1963 році. Проєкт Project MAC (Project on Mathematics and Computation) був розроблений у Массачусетському технологічному інституті. І саме в цьому проєкті почали використовувати слово демон для позначення будь-яких програм, які працюють у фоновому режимі, стежать за станом інших процесів і виконують дії залежно від ситуації. Ці програми були названі на честь демона Максвелла.
Демон Максвелла - це результат уявного експерименту. У 1867 році Джеймс Клер Максвелл уявив собі істоту, здатну спостерігати та спрямовувати рух окремих молекул. Метою уявного експерименту було показати протиріччя в другому законі термодинаміки.
Однак є й інші варіанти значення цього слова. Наприклад це може бути абревіатура від Disk And Executive MONitor. Хоча первинні користувачі терміну демон не використовували його для цих цілей, тож варіант з абревіатурою, найімовірніше неправильний.
Тепер ви знаєте що таке демони в Linux. На завершення, зверніть увагу, що талісман BSD - демон. Він обраний на честь програмних демонів (daemons), але виглядає як злий демон (demon). Ім'я цього демона Beastie. Достеменно невідомо звідки взялося це ім'я, але є припущення, що воно походить від фрази: BSD. Try it; I did. Якщо вимовити це англійською швидко, вийде звук схожий на Beastie. А ще тризуб Beastie символізує розгалуження (forking) процесів у Linux.