GNU/Linux — сім’я вільних операційних систем, заснованих на ядрі Linux і інструментах проекту GNU. Ядро Linux було створене ліннійцем Фінляндії Лінусом Торвальдсом у 1991 році як вільна альтернатива UNIX. Сьогодні GNU/Linux застосовується на серверах, у хмарних сервісах, в вбудованих системах і на станціонарних пк по всьому світу.
Архітектура
GNU/Linux має монолітну архітектуру: ядро (kernel), системні бібліотеки GNU, команднооболонка (shell), система ініціалізації і графічне середовище (необов’язково).
Статистика
Linux працює на 96.3% всіх серверів світу. 100% хмарних платформ (AWS, Google, Azure) базуються на Linux. Він якою базою використовується на мобільних пристроях Android.
Юрідичний статус
Розповсюджується за ліцензією GPL v2. Код відкритий, безкоштовний, без ліцензійних зборів. Можна вільно модифікувати і розповсюджувати зі збереженням ліцензії.
Компоненти
Kernel — ядро ОС.
Shell — Bash, zsh, fish.
GNU Coreutils — базові утиліти.
Init — systemd / SysVinit.
Package manager — apt, dnf, pacman.
Безпека
Система прав (root / користувачі), вбудовання ізоляція, аудит активності, SELinux/AppArmor, щотижні оновлення безпеки з репозиторів.
Коротка хронологія
1983 — проект GNU (Річард Столман).
1991 — ядро Linux v0.01.
1992 — об’єднання GNU+Linux.
Сьогодні — ядро v6.x+.
«Linux — це лише хобі, який змінив світ.»
— Лінус Торвальдс, створець LinuxНайпопулярніший дистрибутив для стаціонарних пк і серверів. Debian-база, apt. @ Canonical.
Батьківський дистрибутив для Ubuntu і багатьох інших. Надзвичайна стабільність. рахуються сервери.
Редакція Red Hat. Найсвіжіші технології. dnf пакетний менеджер. Зупиняється розробниками.
RHEL-сумісний дистрибутив для корпоративних серверів і адміністраторів.
Minimalist для досвідчених. Rolling-реліз. pacman. Дозволяє зібрати кожен компонент окремо.
Ubuntu-база. Зручний для переходу з Windows. Cinnamon/MATE робочий стіл. Элегантний інтерфейс.
Справжній тул YaST. Варіанти Leap (стабільний) і Tumbleweed (rolling). zypper.
Спеціалізований для тестування на проникнення. 600+ інструментів безпеки із коробки.
Obov 5 MB об’єм. Орієнтований на Docker-контейнери. musl libc + BusyBox. Надшвидко запускається.
«Дистрибутив — це не лише інша операційна система — це інша філософія. Ubuntu каже: "людина існує через інших людей". Arch каже: "налаштуй все самостійно".»
— Спільнота лінуксового жартовинняpwd
Показати поточню директорію
Print Working Directory — виводить повний шлях до поточньої робочої директорії. Допомагає зрозуміти, де ви знаходитесь у файловій системі.
$ pwd /home/student $ pwd /var/www/html
echo
Вивести текст / значення змінної
echo — виводить рядок тексту або значення змінної на екран або перенаправляє в файл. Незамінний при написанні скриптів.
$ echo "Hello, World!" Hello, World! $ echo "Ваш шлях: $HOME" Ваш шлях: /home/student $ echo "рядок" > file.txt # записати у файл $ echo "ще рядок" >> file.txt # дописати в кінець
ls
Перегляд вмісту директорії
list — виводить перелік файлів і директорій. Найбільш використовувана команда в Linux. Підтримує множину прапорців для контролю виводу.
$ ls Desktop Documents Downloads Music Pictures $ ls -l drwxr-xr-x 2 student student 4096 Oct 1 09:00 Desktop -rw-r--r-- 1 student student 142 Oct 1 08:55 notes.txt $ ls -la # включаючи приховані файли $ ls -lh # розмір у KB / MB $ ls -lt # сортування за датою $ ls /var/log # вміст конкретної директорії
cd
Змінити директорію
Change Directory — переміщує поточню робочу директорію. Розуміє абсолютні і відносні шляхи, спеціальні символи ~ і -.
$ cd /home/student/Documents # абсолютний шлях $ cd projects # відносний шлях (підпапка) $ cd .. # на рівень вище $ cd ../.. # на два рівні вище $ cd ~ # домашня директорія $ cd - # повернутись у попередню
touch
Створити порожній файл
touch — створює порожній файл або оновлює час останньої модифікації файлу (timestamp). Використовується для швидкого створення файлів.
$ touch index.html # створити один файл $ touch a.txt b.txt c.txt # кілька файлів одразу $ touch logs/app.log # у піддиректорії $ ls -l index.html -rw-r--r-- 1 student student 0 Oct 1 09:05 index.html
mkdir
Створити директорію
Make Directory — створює одну або кілька директорій. З прапорцем -p створює весь ланцюжок шляху автоматично.
$ mkdir my-project $ mkdir -p src/components/ui # весь ланцюжок $ mkdir docs tests scripts # кілька директорій $ ls docs my-project scripts src tests
cp
Копіювати файли або директорії
Copy — копіює файли в нове місце. Для копіювання директорій потрібний прапорець -r (recursive).
$ cp notes.txt backup.txt # копія файлу $ cp notes.txt Documents/ # скопіювати в папку $ cp -r project/ project-backup/ # копія директорії $ cp -i a.txt b.txt # питати перед заміною
mv
Перемістити / перейменувати
Move — переміщує файли або перейменовує їх. Оригінал завжди видаляється (відмінність від cp).
$ mv old-name.txt new-name.txt # перейменувати $ mv report.pdf Documents/ # перемістити $ mv temp-folder/ archive/ # перемістити директорію $ mv *.log logs/ # перемістити за маскою
rm
Видалити файли або директорії
Remove — видаляє файли назавжди, минаючи кошик. Будьте обережні з rm -rf — відновити дані не можна!
$ rm temp.txt # видалити файл $ rm -i important.txt # питати перед видаленням $ rm *.tmp # за маскою $ rm -r old-project/ # рекурсивно (директорія) $ rm -rf cache/ # ⚠️ без підтвердження!
history
Перегляд історії команд
history — виводить список попередніх команд. Команду можна виконати повторно за номером !N або поновнити останню з !!.
$ history 1 pwd 2 ls -la 3 cd Documents 4 mkdir my-project 5 touch README.md $ history 10 # останні 10 команд $ history | grep "mkdir" # пошук в історії $ !4 # повторити команду #4 $ !! # повторити останню команду $ history -c # очистити всю історію
#!/bin/bash # ================================================ # login.sh — імітація авторизації в текстовому режимі # Використання: ./login.sh # ================================================ # ── Налаштування ────────────────────────────── readonly CORRECT_USER="admin" readonly CORRECT_PASS="secure123" readonly MAX_ATTEMPTS=3 readonly LOG_FILE="/tmp/login_attempts.log" # ── Кольори для виводу ──────────────────────── RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' # No Color (скидання кольору) # ── Функція: записати в журнал ──────────────── log_attempt() { local status="$1" local user="$2" local timestamp timestamp=$(date '+%Y-%m-%d %H:%M:%S') echo "[$timestamp] $status — користувач: '$user'" >> "$LOG_FILE" } # ── Функція: намалювати банер ───────────────── show_banner() { clear echo -e "${CYAN}" echo " ╔══════════════════════════════════╗" echo " ║ GNU/Linux — Авторизація ║" echo " ║ Навчальний портал ║" echo " ╚══════════════════════════════════╝" echo -e "${NC}" } # ── Функція: відображення сеансу ───────────── show_session() { local user="$1" echo echo -e "${GREEN}✔ Авторизацію успішно пройдено!${NC}" echo "════════════════════════════════════" echo -e " Вітаємо, ${YELLOW}${user}${NC}!" echo -e " Дата входу : $(date '+%d.%m.%Y %H:%M:%S')" echo -e " Хост : $(hostname)" echo -e " IP-адреса : $(hostname -I | awk '{print $1}')" echo "════════════════════════════════════" echo echo "Доступні команди сеансу:" echo " [1] Переглянути файли (ls -la)" echo " [2] Поточна директорія (pwd)" echo " [3] Системна інформація (uname -a)" echo " [4] Вийти" echo while true; do read -rp "${user}@portal:~\$ " cmd case "$cmd" in 1) ls -la ;; 2) pwd ;; 3) uname -a ;; 4|exit|quit|logout) echo -e "${CYAN}До побачення, ${user}!${NC}" log_attempt "LOGOUT" "$user" exit 0 ;; *) echo "Невідома команда: '$cmd'" ;; esac done } # ══ ГОЛОВНА ЛОГІКА ════════════════════════════ show_banner attempt=1 while [ "$attempt" -le "$MAX_ATTEMPTS" ]; do echo -e " Спроба ${YELLOW}${attempt}/${MAX_ATTEMPTS}${NC}\n" # Зчитати ім'я користувача read -rp " Логін : " input_user # Зчитати пароль (без відображення символів) read -rsp " Пароль : " input_pass echo # перенос рядка після введення пароля echo # Перевірка облікових даних if [ "$input_user" = "$CORRECT_USER" ] && \ [ "$input_pass" = "$CORRECT_PASS" ]; then log_attempt "SUCCESS" "$input_user" show_session "$input_user" else log_attempt "FAILED" "$input_user" echo -e " ${RED}✗ Невірний логін або пароль!${NC}\n" if [ "$attempt" -lt "$MAX_ATTEMPTS" ]; then remaining=$(( MAX_ATTEMPTS - attempt )) echo -e " Залишилось спроб: ${YELLOW}${remaining}${NC}\n" fi fi (( attempt++ )) done # Блокування після вичерпання спроб echo -e "\n ${RED}╔══════════════════════════════════════╗" echo " ║ ДОСТУП ЗАБЛОКОВАНО. Спроб: 0/3 ║" echo -e " ╚══════════════════════════════════════╝${NC}\n" log_attempt "BLOCKED" "$input_user" exit 1
🚀 Як запустити скрипт
# 1. Зберегти скрипт у файл login.sh $ nano login.sh # або будь-який редактор # 2. Зробити виконуваним $ chmod +x login.sh # 3. Запустити $ ./login.sh # Правильні дані для тестування: Логін : admin Пароль : secure123 # Переглянути журнал спроб $ cat /tmp/login_attempts.log
📋 Що робить скрипт: запитує логін і пароль (пароль вводиться без відображення), перевіряє дані і дає 3 спроби. Після успішного входу — відображає інформацію про сеанс (ім’я, дата, IP), міні-меню з командами. Усі спроби записуються у журнал /tmp/login_attempts.log.