Тема: Linux і командний рядок

Операційна система GNU/Linux

Коротко про ОС і популярні дистрибутиви, приклади команд терміналу, Bash-скрипт авторизації та демо-термінал, у якому все можна спробувати самостійно.

01Що таке GNU/Linux

GNU/Linux — сімейство вільних Unix-подібних операційних систем з відкритим вихідним кодом. Назва поєднує дві складові: Linux — це ядро, яке керує процесором, пам'яттю, файлами та пристроями, а GNU — набір системних програм, що перетворюють ядро на повноцінну ОС: оболонка bash, компілятор gcc, базові утиліти ls, cp, mv та інші.

Проєкт GNU у 1983 році започаткував Річард Столлман, а ядро Linux у 1991 році написав фінський студент Лінус Торвальдс. Сьогодні Linux працює на більшості серверів і хмарних платформ, на всіх суперкомп'ютерах зі списку TOP500, у смартфонах на Android, роутерах, телевізорах та інших «розумних» пристроях.

Як влаштована система

Користувачвводить команди, запускає програми
Прикладні програмибраузер, офісний пакет, редактор коду
Оболонка Bash і утиліти GNUbash, ls, cp, mv, grep, gcc…
Ядро Linuxпроцеси, пам'ять, файлова система, драйвери
Апаратне забезпеченняпроцесор, оперативна пам'ять, диски, мережа

Ключові особливості

  • Вільна та відкрита. Код доступний кожному (ліцензія GNU GPL): систему можна безкоштовно використовувати, вивчати, змінювати й поширювати.
  • Багатокористувацька й багатозадачна. Одночасно працюють багато користувачів і процесів, кожен — зі своїми правами доступу.
  • Надійна й безпечна. Розмежування прав (звичайний користувач / root), регулярні оновлення, мінімум вірусів.
  • «Усе є файлом». Диски, пристрої та налаштування доступні як файли в єдиному дереві каталогів, що починається з кореня /.
  • Потужний термінал. Будь-яку дію можна виконати командою або автоматизувати скриптом.

Коротка історія

  1. Річард Столлман оголошує проєкт GNU

  2. Лінус Торвальдс публікує перше ядро Linux

  3. Ядро переходить на ліцензію GNU GPL

  4. З'являються Slackware і Debian

  5. Виходить Ubuntu — Linux для всіх

  6. Перший смартфон на Android (ядро Linux)

  7. Усі 500 найпотужніших суперкомп'ютерів — на Linux

02Популярні дистрибутиви

Дистрибутив — це готова до встановлення операційна система: ядро Linux + утиліти GNU + менеджер пакетів + графічне середовище та набір програм. Дистрибутивів сотні, але більшість належить до кількох «родин» зі спільною основою та форматом пакетів:

Ubuntu

2004

Найпопулярніший дистрибутив для ПК і серверів від компанії Canonical. Простий у встановленні, LTS-версії отримують оновлення щонайменше 5 років.

Для новачків, розробників і серверів
Debianapt

Debian

1993

Один із найстаріших дистрибутивів, який повністю розвиває спільнота. Еталон стабільності й основа для сотень інших систем: Ubuntu, Mint, Kali.

Для серверів і стабільних робочих станцій
Debianapt

Linux Mint

2006

Створений на базі Ubuntu. Звичний інтерфейс Cinnamon у стилі Windows і готовий набір програм одразу після встановлення.

Для тих, хто переходить з Windows
Debianapt

Fedora

2003

Спільнотний дистрибутив за підтримки Red Hat. Першим отримує нові технології, які згодом потрапляють у RHEL.

Для розробників і любителів новинок
Red Hatdnf

Arch Linux

2002

Мінімалістичний дистрибутив з постійними оновленнями (rolling release): систему збирають «під себе» з нуля. Славиться документацією Arch Wiki.

Для досвідчених користувачів
Archpacman

Red Hat Enterprise Linux

2002

Комерційна система для бізнесу: платна підтримка, сертифікації та 10-річний життєвий цикл. Стандарт корпоративних серверів.

Для компаній і дата-центрів
Red Hatdnf

openSUSE

2005

Спільнотний дистрибутив за підтримки SUSE. Дві гілки: стабільна Leap і постійно оновлюваний Tumbleweed; зміни можна відкотити через знімки Btrfs.

Для робочих станцій і серверів
SUSEzypper

Kali Linux

2013

Спеціалізований дистрибутив на базі Debian для кібербезпеки й тестування на проникнення: сотні попередньо встановлених інструментів.

Для фахівців з кібербезпеки
Debianapt

Також відомі: Manjaro, Pop!_OS, Zorin OS, elementary OS, Rocky Linux, AlmaLinux, Alpine Linux, Gentoo, Slackware. Актуальний рейтинг інтересу до дистрибутивів веде сайт DistroWatch.

03Команди Linux CLI

CLI (Command Line Interface) — текстовий інтерфейс: користувач вводить команди в терміналі, а командна оболонка Bash їх виконує. Загальний вигляд команди: команда [опції] [аргументи].

  • kyrylik@ubuntu користувач@комп'ютер
  • :~ поточний каталог (~ — домашній)
  • $ звичайний користувач (# — root)
  • ls команда
  • -l опція (ключ)
  • Documents аргумент

1pwdprint working directory

Виводить повний (абсолютний) шлях до поточного каталогу — місця у файловій системі, де ви зараз працюєте.

  • pwd -P — фізичний шлях, без символьних посилань
pwd
/home/kyrylik
cd Documents
pwd
/home/kyrylik/Documents

2echo«відлуння»

Виводить текст або значення змінних на екран. Разом з операторами перенаправлення записує текст у файл.

  • -n — не переходити на новий рядок
  • -e — обробляти спецсимволи \n, \t
  • > — записати у файл (вміст буде перезаписано)
  • >> — дописати в кінець файлу
echo "Привіт, Linux!"
Привіт, Linux!
echo "Я — $USER, оболонка $SHELL"
Я — kyrylik, оболонка /bin/bash
echo "Перший рядок" > notes.txt
echo "Другий рядок" >> notes.txt
cat notes.txt
Перший рядок
Другий рядок

3lslist

Показує вміст каталогу: файли та підкаталоги. У рядку drwxr-xr-x літера d означає каталог, а r, w, x — права на читання, запис і виконання для власника, групи та інших.

  • -l — детальний список: права, власник, розмір, дата
  • -a — показати приховані файли (назва з крапки)
  • -h — розміри у зручному вигляді (K, M, G)
  • -R — рекурсивно, з усіма підкаталогами
ls
Documents  Downloads  login.sh  notes.txt
ls -la
total 32
drwxr-x--- 4 kyrylik kyrylik 4096 Sep 24 10:15 .
drwxr-xr-x 3 root    root    4096 Sep  1 09:00 ..
-rw-r--r-- 1 kyrylik kyrylik 3771 Sep  1 09:00 .bashrc
drwxr-xr-x 2 kyrylik kyrylik 4096 Sep 20 18:30 Documents
drwxr-xr-x 2 kyrylik kyrylik 4096 Sep 20 18:30 Downloads
-rwxr-xr-x 1 kyrylik kyrylik 4058 Sep 24 10:12 login.sh
-rw-r--r-- 1 kyrylik kyrylik   48 Sep 24 10:14 notes.txt
-rw-r--r-- 1 kyrylik kyrylik  807 Sep  1 09:00 .profile

4cdchange directory

Переходить в інший каталог. Шлях може бути абсолютним (від кореня /) або відносним (від поточного каталогу).

  • cd або cd ~ — у домашній каталог
  • cd .. — на рівень вище
  • cd - — у попередній каталог
  • cd / — у кореневий каталог
cd Documents    # відносний шлях
cd .. # на рівень вище
cd /var/log     # абсолютний шлях
cd       # додому (як cd ~)
cd -            # у попередній каталог
/var/log

5touch«доторкнутися»

Створює новий порожній файл (розмір 0 байт). Якщо файл уже існує — лише оновлює дату й час його зміни.

  • кілька файлів за раз: touch a.txt b.txt
  • -c — не створювати файл, якщо його немає
touch index.html style.css
ls -l index.html style.css
-rw-r--r-- 1 kyrylik kyrylik 0 Sep 24 10:20 index.html
-rw-r--r-- 1 kyrylik kyrylik 0 Sep 24 10:20 style.css
touch notes.txt  # оновить лише дату

6mkdirmake directory

Створює новий каталог (папку). Можна створити кілька каталогів однією командою.

  • -p — створити всі проміжні каталоги; без помилки, якщо каталог уже є
  • -v — повідомляти про кожен створений каталог
mkdir project
mkdir -p web/css/img  # усі рівні
mkdir -v photos music
mkdir: created directory 'photos'
mkdir: created directory 'music'
mkdir project
mkdir: cannot create directory ‘project’: File exists

7cpcopy

Копіює файли й каталоги. Спочатку вказують, що копіювати, останнім аргументом — куди.

  • -r — копіювати каталог разом із вмістом
  • -i — запитувати перед перезаписом файлу
  • -v — показувати, що саме копіюється
cp notes.txt backup.txt
cp notes.txt Documents/
cp -r Documents Documents_copy
cp -v login.sh /tmp/
'login.sh' -> '/tmp/login.sh'
cp Downloads /tmp/
cp: -r not specified; omitting directory 'Downloads'

8mvmove

Переміщує файли й каталоги в інше місце. Якщо місце призначення — нове ім'я в тому ж каталозі, файл просто перейменовується.

  • -i — запитувати перед перезаписом
  • -n — ніколи не перезаписувати наявні файли
  • -v — показувати виконані дії
mv backup.txt old.txt  # перейменувати
mv old.txt Documents/  # перемістити
mv -v Documents_copy archive
renamed 'Documents_copy' -> 'archive'
ls Documents
notes.txt  old.txt  plan.txt

9rmremove

Видаляє файли, а з опцією -r — каталоги разом із вмістом.

  • -r — видалити каталог з усім вмістом
  • -i — запитувати підтвердження
  • -f — без запитань і повідомлень про помилки
  • -v — показувати, що видалено

У терміналі немає «Кошика»: видалені через rm файли не відновити. Будьте особливо уважні з rm -r та rm -rf.

rm index.html
rm -i style.css
rm: remove regular empty file 'style.css'? y
rm archive
rm: cannot remove 'archive': Is a directory
rm -r archive  # каталог з усім вмістом

10history«історія»

Показує раніше виконані команди з їхніми номерами. Історія зберігається у файлі ~/.bash_history, тож її видно й після перезапуску терміналу.

  • history 5 — останні 5 команд
  • !101 — повторити команду №101, !! — останню
  • history -c — очистити історію
  • Ctrl+R — пошук в історії
history 5
  101  cd Documents
  102  ls -la
  103  mkdir project
  104  cp notes.txt Documents/
  105  history 5
!101
cd Documents
history -c

Корисні клавіші терміналу

  • Tab — автодоповнення команд і шляхів
  • ↑ ↓ — гортати історію команд
  • Ctrl+C — перервати виконання команди
  • Ctrl+L — очистити екран (як clear)
  • Ctrl+R — пошук в історії команд
  • Ctrl+D — кінець введення / вихід з оболонки

04Bash-скрипт авторизації

Скрипт login.sh імітує вхід у систему в текстовому режимі, як у консолі Linux (tty): показує екран входу, запитує логін і пароль (під час введення пароль не відображається), перевіряє їх, дає 3 спроби і записує кожну подію в журнал auth.log.

login.sh
#!/usr/bin/env bash
# ==================================================================
#  login.sh — імітація авторизації в системі у текстовому режимі
#  Автор:   Кирилюк Микола, 2026
#  Запуск:  chmod +x login.sh && ./login.sh
# ==================================================================

# ---------- Налаштування ----------
readonly MAX_ATTEMPTS=3        # максимальна кількість спроб входу
readonly DELAY=2               # пауза (с) після невдалої спроби
readonly LOG_FILE="auth.log"   # журнал подій входу

# ---------- Кольори тексту (ANSI escape-коди) ----------
readonly RED=$'\e[31m' GREEN=$'\e[32m' YELLOW=$'\e[33m'
readonly CYAN=$'\e[36m' BOLD=$'\e[1m' RESET=$'\e[0m'

# ---------- Облікові записи: логін -> SHA-256 хеш пароля ----------
# Як і в /etc/shadow, паролі не зберігаються у відкритому вигляді.
# Отримати хеш:  printf '%s' 'пароль' | sha256sum
declare -A USERS=(
    [student]="791e4e58b732fdf54ab99f052d4e99d058fbe4bdd74e3463b8535e04d3d2da9d"
    [admin]="6051fc84a7a0d74c225fb18a496b09952da5642e60723ecae543298edd7d82d6"
)

# ---------- Функції ----------
hash_password() {              # SHA-256 хеш рядка
    printf '%s' "$1" | sha256sum | cut -d ' ' -f 1
}

log_event() {                  # запис у журнал: дата час СТАТУС логін
    echo "$(date '+%F %T') $1 $2" >> "$LOG_FILE"
}

show_banner() {                # «екран входу» текстового режиму
    clear
    echo "${CYAN}──────────────────────────────────────────────${RESET}"
    echo "  ${BOLD}$(uname -o) $(uname -r)${RESET}  ·  $HOSTNAME"
    echo "  Система авторизації користувачів"
    echo "${CYAN}──────────────────────────────────────────────${RESET}"
    echo
}

# Ctrl+C: повертаємо відображення вводу і коректно завершуємо роботу
trap 'stty echo 2>/dev/null; echo; echo "${YELLOW}Вхід скасовано.${RESET}"; exit 130' INT

# ---------- Основна програма ----------
show_banner

for (( attempt = 1; attempt <= MAX_ATTEMPTS; attempt++ )); do
    read -r  -p "$HOSTNAME login: " login
    read -rs -p "Password: " password
    echo                               # новий рядок після прихованого вводу

    # Логін існує і хеш введеного пароля збігається зі збереженим?
    if [[ -n $login && -n ${USERS[$login]} &&
          $(hash_password "$password") == "${USERS[$login]}" ]]; then
        last=$(grep " SUCCESS $login\$" "$LOG_FILE" 2>/dev/null | tail -n 1 | cut -d ' ' -f 1,2)
        log_event SUCCESS "$login"

        echo
        echo "${GREEN}${BOLD}✔ Доступ дозволено.${RESET} Ласкаво просимо, ${BOLD}$login${RESET}!"
        echo "  Останній вхід:    ${last:-перший вхід у систему}"
        echo "  Поточний час:     $(date '+%F %T')"
        echo "  Домашній каталог: /home/$login"
        [[ $login == admin ]] && echo "${YELLOW}  Увага: ви працюєте з правами адміністратора.${RESET}"
        exit 0
    fi

    log_event FAIL "${login:-(порожній)}"
    echo "${RED}✘ Невірний логін або пароль.${RESET} Залишилось спроб: $(( MAX_ATTEMPTS - attempt ))"
    echo
    sleep "$DELAY"
done

log_event LOCKED "${login:-(порожній)}"
echo "${RED}${BOLD}✘ Доступ заблоковано: перевищено ліміт спроб ($MAX_ATTEMPTS).${RESET}"
exit 1

Тестові облікові записи: student / linux123 і admin / admin2026

Як запустити

  1. Створіть файл і вставте в нього код: nano login.sh (зберегти — Ctrl+O, Enter; вийти — Ctrl+X).
  2. Дозвольте виконання файлу: chmod +x login.sh
  3. Запустіть скрипт: ./login.sh
  4. Перегляньте журнал входів: cat auth.log

Скрипт працює в будь-якому дистрибутиві Linux, а на Windows — у WSL чи Git Bash. Якщо з'являється помилка $'\r': command not found, файл збережено з Windows-закінченнями рядків — виправте командою sed -i 's/\r$//' login.sh.

Приклад роботи

Успішний вхід з другої спроби
──────────────────────────────────────────────
  GNU/Linux 6.8.0-45-generic  ·  ubuntu
  Система авторизації користувачів
──────────────────────────────────────────────

ubuntu login: student
Password:
✘ Невірний логін або пароль. Залишилось спроб: 2

ubuntu login: student
Password:

✔ Доступ дозволено. Ласкаво просимо, student!
  Останній вхід:    2026-09-23 18:42:07
  Поточний час:     2026-09-24 10:31:15
  Домашній каталог: /home/student
cat auth.log
2026-09-23 18:42:07 SUCCESS student
2026-09-24 10:31:09 FAIL student
2026-09-24 10:31:15 SUCCESS student
Блокування після 3 невдалих спроб
──────────────────────────────────────────────
  GNU/Linux 6.8.0-45-generic  ·  ubuntu
  Система авторизації користувачів
──────────────────────────────────────────────

ubuntu login: admin
Password:
✘ Невірний логін або пароль. Залишилось спроб: 2

ubuntu login: admin
Password:
✘ Невірний логін або пароль. Залишилось спроб: 1

ubuntu login: root
Password:
✘ Невірний логін або пароль. Залишилось спроб: 0

✘ Доступ заблоковано: перевищено ліміт спроб (3).
echo $?
1

Як працює скрипт

КонструкціяПризначення
#!/usr/bin/env bashШебанг: вказує системі, що скрипт виконує інтерпретатор Bash.
readonlyКонстанти з налаштуваннями: кількість спроб, пауза, ім'я журналу.
$'\e[31m'ANSI escape-коди для кольорового тексту в терміналі.
declare -A USERSАсоціативний масив «логін → хеш пароля» — імітація файлу /etc/shadow.
sha256sumОбчислює хеш введеного пароля: паролі порівнюються за хешем, а не у відкритому вигляді.
hash_password() { … }Функції для повторюваних дій: хешування, запис у журнал, екран входу.
trap '…' INTПерехоплює Ctrl+C: повертає відображення вводу й коректно завершує скрипт.
for (( … ))Цикл з лічильником, що обмежує кількість спроб входу.
read -p / read -sЗчитує логін із підказкою та пароль без відображення символів.
[[ … ]]Перевіряє, що логін існує і хеш пароля збігається зі збереженим.
>> "$LOG_FILE"Дописує подію (дата, час, статус, логін) у кінець журналу.
sleep "$DELAY"Пауза після помилки ускладнює підбір пароля (brute force).
exit 0 / exit 1Код завершення: 0 — успішний вхід, 1 — доступ заблоковано.

05Демо-термінал: спробуйте самі

Симуляція терміналу Bash прямо в браузері: віртуальна файлова система, усі 10 команд з цієї сторінки та скрипт login.sh. Нічого не встановлюється й нічого не зламається — будь-коли натисніть «Скинути». Введіть help, щоб побачити всі команди.

kyrylik@ubuntu: ~
Швидкі команди:

06Джерела інформації

Офіційна документація

Навчальні матеріали

Інструменти та статистика

  • DistroWatchКаталог і рейтинг дистрибутивів
  • ShellCheckПеревірка Bash-скриптів на помилки
  • explainshellПояснює будь-яку команду по частинах
  • TOP500Статистика суперкомп'ютерів світу