Ubuntu
2004Найпопулярніший дистрибутив для ПК і серверів від компанії Canonical. Простий у встановленні, LTS-версії отримують оновлення щонайменше 5 років.
Для новачків, розробників і серверівКоротко про ОС і популярні дистрибутиви, приклади команд терміналу, Bash-скрипт авторизації та демо-термінал, у якому все можна спробувати самостійно.
GNU/Linux — сімейство вільних Unix-подібних операційних систем з відкритим вихідним кодом. Назва поєднує дві складові: Linux — це ядро, яке керує процесором, пам'яттю, файлами та пристроями, а GNU — набір системних програм, що перетворюють ядро на повноцінну ОС: оболонка bash, компілятор gcc, базові утиліти ls, cp, mv та інші.
Проєкт GNU у 1983 році започаткував Річард Столлман, а ядро Linux у 1991 році написав фінський студент Лінус Торвальдс. Сьогодні Linux працює на більшості серверів і хмарних платформ, на всіх суперкомп'ютерах зі списку TOP500, у смартфонах на Android, роутерах, телевізорах та інших «розумних» пристроях.
/.Річард Столлман оголошує проєкт GNU
Лінус Торвальдс публікує перше ядро Linux
Ядро переходить на ліцензію GNU GPL
З'являються Slackware і Debian
Виходить Ubuntu — Linux для всіх
Перший смартфон на Android (ядро Linux)
Усі 500 найпотужніших суперкомп'ютерів — на Linux
Дистрибутив — це готова до встановлення операційна система: ядро Linux + утиліти GNU + менеджер пакетів + графічне середовище та набір програм. Дистрибутивів сотні, але більшість належить до кількох «родин» зі спільною основою та форматом пакетів:
.deb, менеджер apt.rpm, менеджер dnfpacman, rolling release.rpm, менеджер zypperНайпопулярніший дистрибутив для ПК і серверів від компанії Canonical. Простий у встановленні, LTS-версії отримують оновлення щонайменше 5 років.
Для новачків, розробників і серверівОдин із найстаріших дистрибутивів, який повністю розвиває спільнота. Еталон стабільності й основа для сотень інших систем: Ubuntu, Mint, Kali.
Для серверів і стабільних робочих станційСтворений на базі Ubuntu. Звичний інтерфейс Cinnamon у стилі Windows і готовий набір програм одразу після встановлення.
Для тих, хто переходить з WindowsСпільнотний дистрибутив за підтримки Red Hat. Першим отримує нові технології, які згодом потрапляють у RHEL.
Для розробників і любителів новинокМінімалістичний дистрибутив з постійними оновленнями (rolling release): систему збирають «під себе» з нуля. Славиться документацією Arch Wiki.
Для досвідчених користувачівКомерційна система для бізнесу: платна підтримка, сертифікації та 10-річний життєвий цикл. Стандарт корпоративних серверів.
Для компаній і дата-центрівСпільнотний дистрибутив за підтримки SUSE. Дві гілки: стабільна Leap і постійно оновлюваний Tumbleweed; зміни можна відкотити через знімки Btrfs.
Для робочих станцій і серверівСпеціалізований дистрибутив на базі Debian для кібербезпеки й тестування на проникнення: сотні попередньо встановлених інструментів.
Для фахівців з кібербезпекиТакож відомі: Manjaro, Pop!_OS, Zorin OS, elementary OS, Rocky Linux, AlmaLinux, Alpine Linux, Gentoo, Slackware. Актуальний рейтинг інтересу до дистрибутивів веде сайт DistroWatch.
CLI (Command Line Interface) — текстовий інтерфейс: користувач вводить команди в терміналі, а командна оболонка Bash їх виконує. Загальний вигляд команди: команда [опції] [аргументи].
pwdprint working directoryВиводить повний (абсолютний) шлях до поточного каталогу — місця у файловій системі, де ви зараз працюєте.
pwd -P — фізичний шлях, без символьних посиланьpwd /home/kyrylik cd Documents pwd /home/kyrylik/Documents
echo«відлуння»Виводить текст або значення змінних на екран. Разом з операторами перенаправлення записує текст у файл.
-n — не переходити на новий рядок-e — обробляти спецсимволи \n, \t> — записати у файл (вміст буде перезаписано)>> — дописати в кінець файлуecho "Привіт, Linux!" Привіт, Linux! echo "Я — $USER, оболонка $SHELL" Я — kyrylik, оболонка /bin/bash echo "Перший рядок" > notes.txt echo "Другий рядок" >> notes.txt cat notes.txt Перший рядок Другий рядок
lslistПоказує вміст каталогу: файли та підкаталоги. У рядку 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
cdchange directoryПереходить в інший каталог. Шлях може бути абсолютним (від кореня /) або відносним (від поточного каталогу).
cd або cd ~ — у домашній каталогcd .. — на рівень вищеcd - — у попередній каталогcd / — у кореневий каталогcd Documents # відносний шлях cd .. # на рівень вище cd /var/log # абсолютний шлях cd # додому (як cd ~) cd - # у попередній каталог /var/log
touch«доторкнутися»Створює новий порожній файл (розмір 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 # оновить лише дату
mkdirmake 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
cpcopyКопіює файли й каталоги. Спочатку вказують, що копіювати, останнім аргументом — куди.
-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'
mvmoveПереміщує файли й каталоги в інше місце. Якщо місце призначення — нове ім'я в тому ж каталозі, файл просто перейменовується.
-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
rmremoveВидаляє файли, а з опцією -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 # каталог з усім вмістом
history«історія»Показує раніше виконані команди з їхніми номерами. Історія зберігається у файлі ~/.bash_history, тож її видно й після перезапуску терміналу.
history 5 — останні 5 команд!101 — повторити команду №101, !! — останнюhistory -c — очистити історіюhistory 5 101 cd Documents 102 ls -la 103 mkdir project 104 cp notes.txt Documents/ 105 history 5 !101 cd Documents history -c
clear)Скрипт login.sh імітує вхід у систему в текстовому режимі, як у консолі Linux (tty): показує екран входу, запитує логін і пароль (під час введення пароль не відображається), перевіряє їх, дає 3 спроби і записує кожну подію в журнал auth.log.
#!/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
nano login.sh (зберегти — Ctrl+O, Enter; вийти — Ctrl+X).chmod +x login.sh./login.shcat 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
────────────────────────────────────────────── 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 — доступ заблоковано. |
Симуляція терміналу Bash прямо в браузері: віртуальна файлова система, усі 10 команд з цієї сторінки та скрипт login.sh. Нічого не встановлюється й нічого не зламається — будь-коли натисніть «Скинути». Введіть help, щоб побачити всі команди.