Linux. Основи.
( * Відповідь на питання розгорніть за допомого трикутного значка |> )
- Що таке LA? В яких одиницях вимірюється?
LA (load average) — параметр, що визначає середнє навантаження на систему за період часу (1 хв, 5 хвилин, 15 хвилин). Вимірюється в кількості задач на одне ядро процесора. На навантаження системи також впливає кількість задач введення-виведення та затримка мережі. Також вплив на розрахунок LA надає: 1. Технологія Hyper-Threading, яка ділить одне фізичне ядро на 2 логічних, 2. Технологія Turbo Bust, яка дозволяє розганяти тактову частоту процесора і працювати на частоті вище заявленої, тобто вище номінальної частоти (час на обробку однієї задачі зменшується).
- Що буде якщо на сервері LA = 100?
Ймовірно, що на сервері буде спостерігатися уповільнена робота сервісів, але якщо параметр LA дорівнює кількості ядер в системі або кількості потоків в системі, то дане навантаження є нормальним.
- Чому при високих показниках значення LA на сервері може не спостерігатися проблем (консоль ssh відгукується, сервіси працюють у звичайному режимі)?
На параметр навантаження LA впливає також і очікування введення-виведення (параметр wa в утиліті top) в дисків та затримка мережі. Дані параметри можуть не впливати на роботу основних сервісів в системі, але враховуються при розрахунку загального навантаження на систему.
- *Представлено вивід команди top. Що означає кожен запис у виводі?*
top - 21:29:24 up 14:18, 1 user, load average: 0,78, 1,48, 1,10
Tasks: 277 total, 3 running, 274 sleeping, 0 stopped, 0 zombie
%Cpu(s): 12,4 us, 2,5 sy, 0,1 ni, 84,8 id, 0,1 wa, 0,0 hi, 0,1 si, 0,0 st
KiB Mem : 7106404 total, 306972 free, 3127144 used, 3672288 buff/cache
KiB Swap: 8191996 total, 8191996 free, 0 used. 3270520 avail Mem
top – назва утиліти.
21:29:24 – поточний час системи.
up 14:18 – скільки годин:хвилин система працює з моменту останнього запуску.
1 user – кількість користувачів авторизованих в системі.
load average: 0,78, 1,48, 1,10 – параметр середнього навантаження на систему за період часу 1 хвилина, 5 хвилин, 15 хвилин.
277 total – всього процесів в системі.
3 running – кількість процесів в роботі.
274 sleeping – кількість процесів в стані sleeping: очікує якоїсь події або сигналу.
0 stopped – кількість призупинених процесів сигналом STOP або виконанням трасування.
0 zombie – кількість зомбі-процесів, які завершили своє виконання, але присутні в системі, щоб дати батьківському процесу зчитати свій код завершення.
| Параметр | Опис |
|——————————-|————————————————————————————————|
| us (user) | Використання процесора користувацькими процесами |
| sy (system) | Використання процесора системними процесами |
| ni (nice) | Використання процесора процесами зі зміненим пріоритетом за допомогою команди nice |
| id (idle) | Простій процесора. Можна сказати, що це вільні ресурси |
| wa (IO-wait) | Говорить про простій, пов’язаний з введенням/виведенням |
| hi (hardware interrupts) | Показує скільки процесорного часу було витрачено на обслуговування апаратного переривання |
| si (software interrupts) | Показує скільки процесорного часу було витрачено на обслуговування програмного переривання |
| st (stolen by the hypervisor) | Показує скільки процесорного часу було «вкрадено» гіпервізором |
KiB Mem – кількість оперативної пам’яті в кібібайтах (кратно 1024):
7106404 total — всього доступно оперативної пам’яті в системі,
306972 free — вільно оперативної пам’яті для використання,
3127144 used — використано оперативної пам’яті,
3672288 buff/cache — буферизовано/закешовано оперативної пам’яті.
KiB Swap – кількість swap-пам’яті в кібібайтах (кратно 1024), які виділено на диску:
8191996 total – всього виділено swap-пам’яті,
8191996 free – вільно swap-пам’яті
0 used – використано swap-пам’яті,
3270520 avail Mem – доступно для використання swap-пам’яті.
- Як в утиліті top в Linux подивитися навантаження на кожне ядро процесора?
В утиліті top натиснути 1
, щоб відобразити всі ядра в системі.
- Як в утиліті top в Linux подивитися якою командою був запущений процес?
В утиліті top натиснути c
, щоб відобразити команди, якими були запущені процеси.
- Де зберігаються імена файлів/директорій?
- Inodes не містять імен файлів, тільки інші метадані файлу.
- Каталоги Unix являють собою списки асоціативних структур, кожна з яких містить одне ім’я файлу і один номер індексу.
- Драйвер файлової системи повинен знайти каталог, що шукає певне ім’я файлу, а потім перетворити ім’я файлу в правильний відповідний номер індексу.
Таким чином ім’я файлу/директорії зберігається в інформаційній структурі каталогів.
- Як видалити файл з іменем
-rf
?
rm ./-rf
- Як подивитися опис дескриптора? Як подивитися час останньої модифікації файлу?
Подивитися повну інформацію по дескриптору можливо командою stat
.
Час модифікації:
stat --format=%y dira
- Для чого потрібна змінна оточення PATH?
Змінна оточення PATH містить абсолютні шляхи директорій, в яких проводиться пошук виконуваних файлів при введенні команд
- Як подивитися навантаження на диски?
Встановити утиліту sysstat
, перевірити навантаження на диски iostat -xtc
.
- Що таке файл в поняттях Unix-like операційних системах?
Файли – це об’єкти, в які ми записуємо інформацію та наші дані, виконувані файли, але крім цих звичних нам понять тут є файли спеціального призначення – файли пристроїв, файли тунелів, сокетів і багато іншого.
Типи файлів в Linux:
- Звичайні файли, для зберігання інформації;
- Спеціальні файли – для пристроїв та тунелів;
- Директорії.
- Що таке RAID? Які масиви бувають?
RAID (Redundant Array of Independent Disks) – надлишковий масив незалежних дисків, технологія віртуалізації даних для об’єднання декількох фізичних дискових пристроїв в логічний модуль для підвищення відмовостійкості та продуктивності.
В залежності від кількості дисків та класу відмовостійкості існують наступні основні типи RAID:
RAID 0:
RAID 1:
RAID 5:
RAID 6:
RAID 10:
- При якій кількості одночасно вийшли з ладу дисків забезпечує працездатність RAID 6?
2 диски.
- В чому різниця між оголошенням змінної
export VAR="VALUE"
таVAR="VALUE"
в bash?
При оголошенні змінної через export – змінна буде доступна в будь-яких інших процесах, при звичайному оголошенні змінної – змінна буде доступна тільки в запущеному процесі.
- Як зупинити виконання скрипта в bash при виникненні помилки в команді?
Команда set -e
завершить скрипт з помилкою, в разі, якщо в нижченаведеному bash коді буде виявлена помилка. За замовчуванням bash скрипт продовжує роботу, якщо в ході виконання виникла помилка.
- Що в bash скрипті означає команда
set -euo pipefail
?
Команда set
встановлює атрибути оболонки з певних опцій.
Опція -e
– означає, що скрипт буде зупинений, коли відбудеться помилка в ході його виконання.
Опція -u
– означає, що скрипт буде зупинений, якщо в ході скрипта, буде виявлена змінна, яка не визначена.
Опція -o pipefail
– означає, що скрипт буде зупинений, якщо в ході пайплайна команд буде виявлена помилка.
- Як активувати debug режим в bash?
Команда set -x
на початку скрипта активує вивід в консоль debug інформації.
- Що значить
$@
в bash?
$@
– всі параметри передані скрипту.
- Який код сигналу буде виконаний при виконанні команди
kill
?
Сигнал SIGTERM (код 15) – це сигнал за замовчуванням, що відправляється при виклику команди kill. Це вказує процесу на завершення роботи і зазвичай вважається сигналом для використання при чистому завершенні роботи.
- Як виконати фільтрацію виводу команди, щоб на екран були виведені тільки помилки (STDERR), ігноруючи STDOUT?
cmd 2>&1 >/dev/null | grep pattern
- Яку команду необхідно виконати, щоб подивитися які користувачі увійшли в систему?
Команда w
покаже список користувачів, які увійшли на сервер.
- Який файл необхідно відредагувати, щоб відключити ssh аутентифікацію по паролю?
Необхідно редагувати файл /etc/ssh/sshd_config
, що відповідає за конфігурацію сервісу ssh.
- В якому файлі знаходиться інформація про змонтовані каталоги в файлову систему?
Файл /etc/fstab
містить інформацію про змонтовані каталоги в файлову систему.
- Що виведе команда
cat a
і чому?
mkdir /tmp/abc
cd /tmp/abc
ls >a 2>b
cat a
cat a
виведе
a
b
Обробка команди йде справа наліво. Спочатку створюється файл b, потім створюється файл a, команда ls
відображає список файлів в поточній директорії (файли a і b вже створені) в один стовпець і перенаправляє стандартний потік виводу (>
) в файл a, а стандартний потік помилок 2
в файл b.
- В bash-скрипті вказаний атрибут оболонки
set -x
. В одній з команд відбувається помилка і скрипт завершує свою роботу. Як зробити, щоб при виникненні помилки в певній команді скрипт продовжив свою роботу?
1 варіант: вказати || true
після виконання команди з помилкою.
<command with error> |
|
true
2 варіант: до виконання даної команди вказати set +e
для ігнорування помилок, починаючи з наступного рядка і після виконання команди вказати set -e
для завершення роботи скрипта в разі помилки, починаючи з наступного рядка.
set -e <command 1> <command 2> set +e <command 3 wih error> set -e
- Що таке системний виклик, які вони бувають?
Системний виклик – звернення програми до ядра операційної системи для виконання якоїсь операції.
В Unix, Unix-like та інших POSIX-сумісних операційних системах популярними системними викликами є:
- open,
- read,
- write,
- close,
- wait,
- exec,
- fork,
- exit,
- kill.
- Що таке сигнал в Unix, навіщо вони потрібні і різниця між 9 та 15 сигналами?
Сигнал – в Unix-like операційних системах – асинхронне (у випадковий час) сповіщення процесу для обробки якоїсь події. Один з основних способів взаємодії між процесами.
Посилка сигналів від одного процесу до іншого зазвичай здійснюється за допомогою системного виклику kill. Його перший параметр – PID процесу, якому посилається сигнал; другий параметр – номер сигналу.
kill(1111, SIGTERM);
Стандарт POSIX визначає 28 сигналів. Деякі з них:
| Сигнал | Код | Опис |
|-|-|-|
| SIGTERM | 15 | Сигнал завершення (сигнал за замовчуванням для утиліти kill) |
| SIGKILL | 9 | Безумовне завершення |
| SIGSTOP | 23 | Зупинка виконання процесу |
| SIGHUP | 1 | Закриття терміналу (перечитати конфігурацію) |
| SIGINT | 2 | Сигнал переривання (Ctrl-C) з терміналу |
- Що таке inode? Яка інформація там зберігається?
Inode (індексний дескриптор) – структура даних, в якій зберігаються метадані файлу і перелічені блоки з даними файлу. Зберігає всю інформацію, крім імені файлу і даних. Кожен файл в даному каталозі є записом з іменем файлу і номером індексу. Вся інша інформація про файл витягується з таблиці індексів шляхом посилання на номер індексу. Номери inodes унікальні на рівні розділу. Кожен розділ як власна таблиця індексів. Якщо у вас закінчилися inode, ви не можете створювати нові файли, навіть якщо у вас є вільне місце на даному розділі.
Inodes зберігає метадані про файл, до якого він відноситься. Ці метадані містять всю інформацію про вказаний файл.
- Розмір.
- Дозвіл.
- Власник/група.
- Розташування жорсткого диску.
- Дата/час.
- Будь-яка інша необхідна інформація.
- Що таке hard link? В чому різниця між hard link та soft link? Приклади їх практичного застосування.
Hard link:
Посилання на файл в файловій системі з використанням такого ж inode ідентифікатора, як у файлу, на який посилаємося.
Створимо файл realFile.
touch realFile
Створимо hard link командою ln <цільовий_файл> <файл_посилання>
:
ln realFile hardLink
Перевіримо, що inode у файлу realFile і hard посиланні hardLink мають однаковий ідентифікатор.
$ ls -li
итого 0
2359720 -rw-r--r-- 2 rmntrvn rmntrvn 0 апр 25 23:24 hardLink
2359720 -rw-r--r-- 2 rmntrvn rmntrvn 0 апр 25 23:24 realFile
Як видно realFile і hardLink мають однаковий ідентифікатор inode.
Soft link:
Створимо soft посилання на файл realFile.
ln -s realFile softLink
Перевіримо, що числовий ідентифікатор softLink відрізняється від числового ідентифікатора realFile.
$ ls -li
итого 0
2359720 -rw-r--r-- 2 rmntrvn rmntrvn 0 апр 25 23:24 hardLink
2359720 -rw-r--r-- 2 rmntrvn rmntrvn 0 апр 25 23:24 realFile
2366763 lrwxrwxrwx 1 rmntrvn rmntrvn 8 апр 25 23:29 softLink -> realFile
Деякі нюанси:
- Soft посилання використовують різні номери inode, ніж основні файли.
- Soft посилання стають корисними, якщо вихідний файл був видалений.
- Soft посилання можуть бути створені з каталогів.
- Soft посилання може бути створене на перетині файлових систем.
- Hard посилання може розміщуватися тільки на тому ж логічному розділі, що і оригінальний файл. Це пов’язано з незалежною ідентифікацією файлів на різних розділах.
- Створення жорстких посилань не підтримується для папок — тільки для файлів.
- Файлова система повинна підтримувати роботу з hard посиланнями.
- Які стани процесів існують? Що значить стан процесу D?
| Статус | Опис |
|:———————————————-:|:—————————————:|
| R (running or runnable) | Виконується або готовий до виконання |
| D (uninterruptible sleep) | Очікує запису на диск |
| S (interruptible sleep) | Неактивний (< 20 s) |
| T (stopped by job control signal) | Зупинений або трасується відладчиком |
| Z (zombie) | зомбі |
| W (paging (not valid since the 2.6.xx kernel)) | Процес вивантажений на диск |
| < | Процес має підвищений пріоритет nice |
| N | Процес має знижений пріоритет nice |
| L (locked) | Деякі сторінки заблоковані в ядрі |
| s | Процес є лідером сеансу |
- Що таке процес-зомбі та процес-сирота? Чи можна самостійно зробити зомбі?
Процес-зомбі – дочірній процес в Unix-системі, що завершив своє виконання, але ще присутній в списку процесів операційної системи, щоб дати батьківському процесу зчитати код завершення.
Видалення зомбі покладається на батьківський процес або системний виклик wait()
також може це виконати, тому перед її викликом не потрібно перевіряти, чи продовжує виконуватися потрібний дочірній процес. Якщо батьківський процес не видалить своїх нащадків, то вони залишаться в стані зомбі.
Вбити зомбі-процес неможливо. Щоб вбити зомбі-процес потрібно знайти батьківський процес і завершити його або перезапустити. Знайти зомбі-процеси та їх батьків можна наступною командою:
ps ajx | grep -w Z
PID’и процесів батьків в 3 колонці. Вбити процес наступною командою:
kill -9 <PID процесу батька>
Процес-сирота — в сімействі операційних систем UNIX допоміжний процес, чий основний процес (або зв’язок з ним) був завершений нештатно (не подавши сигналу на завершення роботи).
—
Відмінність в тому, що процес-сирота (orphan process) все ще активний. Його батьківський процес був з якоїсь причини перерваний, і сирота тепер переходить під керівництво init, чий ID процесу дорівнює 1. PPID orphan процесу отримає значення 1. Користувач також може створити подібний процес, від’єднавши його від терміналу. Сирітські процеси використовують багато ресурсів, їх легко знайти за допомогою top або htop.
На відміну від процесу-сироти, зомбі-процес неактивний, але контролюється батьківським процесом, поки той не вирішить, що статус виходу дочірніх процесів більше не потрібен. Він не використовує ресурси і не може бути запланований для виконання. Іноді батьківський процес утримує дочірній процес в стані зомбі, щоб гарантувати, що майбутні дочірні процеси не отримають той же PID. Якщо ви знищите батька зомбі-процесу, зомбі-процес теж помре. Для цього знайдіть батьківський PID (PPID) зомбі і відправте йому сигнал SIGCHLD (17): kill -17 ppid.
- Що таке файловий дескриптор? Яка інформація там зберігається?
Файловий дескриптор – невід’ємне ціле число, яке використовується в інтерфейсі між простором користувача і простором ядра (kernel) для ідентифікації ресурсів файлу / сокету. Коли створюється новий потік введення-виведення, ядро повертає процесу, що створив потік введення-виведення, його файловий дескриптор.
- Що таке buffer/cache пам’ять? Для чого потрібна?
buff/cache пам’ять – розрахована пам’ять, яка зарезервована, але може бути звільнена при необхідності і використовується для швидкого доступу програмами до даних, які знаходяться в оперативній пам’яті (швидкій пам’яті).
buffers — буфери в пам’яті — сторінки пам’яті, зарезервовані системою для виділення їх процесам, коли вони зажадають цього, так само відома як heap-memory;
cached — файли, які нещодавно були використані системою/процесами і що зберігаються в пам’яті на випадок якщо незабаром вони знову знадобляться.
- Представлено вивід команди
free
.
$ free -m
total used free shared buff/cache available
Mem: 6930 3598 843 183 2489 2919
Swap: 15999 4 15995
Чому доступної (available) пам’яті зараз 2919, якщо вільної (free) пам’яті 843?
- Total. Ця цифра представляє всю існуючу пам’ять.
- Used обчислення загального значення оперативної пам’яті системи за вирахуванням виділеної вільної, розділюваної, буферної і кеш-пам’яті.
used = total - free - buff/cache
- Free – вільна пам’ять в системі.
- Shared – пам’ять, що використовується (переважно) в tmpfs
- Buffer, і Cache ідентифікують пам’ять, що використовується для потреб ядра / операційної системи. Буфер і кеш складаються разом, а сума вказується в розділі «buff/cache».
- Available – приблизна кількість оперативної пам’яті, доступна для запуску нових додатків без використання ними розділу підкачки. На відміну від поля free, це поле приймає в розрахунок сторінку cache і також те, що не вся рекуперована (придатна для повторного використання) пам’ять буде повернена для рекуперації через те, що елементи використовуються в даний момент.
- Порядок завантаження дистрибутива Linux.
- Увімкнення комп’ютера кнопкою.
- Завантажити BIOS / UEFI з NVRAM.
- Зібрати відомості про апаратуру.
- Вибрати пристрої для запуску (диск, мережа).
- Ідентифікувати системний розділ EFI.
- Завантажити BIOS / UEFI з NVRAM.
- Визначити яке ядро завантажити.
- Завантажити ядро.
- Створити структури даних ядра.
- Запустити init / systemd як PID 1.
- Виконати сценарії запуску.
- Запустити систему.