🐧 GNU/Linux & Bash

Вивчаємо GNU/Linux і Bash

Архітектура ОС, популярні дистрибутиви, базові команди CLI, скрипт авторизації та джерела для поглибленого вивчення.

01
Коротка інформація про GNU/Linux
Світова вільна ОС з відкритим вихідним кодом

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
02
Найпопулярніші дистрибутиви
Дистрибутив — це редакція GNU/Linux з певним пакетним менеджером і налаштуваннями
Ubuntu Початківцям

Найпопулярніший дистрибутив для стаціонарних пк і серверів. Debian-база, apt. @ Canonical.

Debian Стабільний

Батьківський дистрибутив для Ubuntu і багатьох інших. Надзвичайна стабільність. рахуються сервери.

Fedora Сучасний

Редакція Red Hat. Найсвіжіші технології. dnf пакетний менеджер. Зупиняється розробниками.

CentOS Stream Сервер

RHEL-сумісний дистрибутив для корпоративних серверів і адміністраторів.

Arch Linux Просунутий

Minimalist для досвідчених. Rolling-реліз. pacman. Дозволяє зібрати кожен компонент окремо.

Linux Mint Початківцям

Ubuntu-база. Зручний для переходу з Windows. Cinnamon/MATE робочий стіл. Элегантний інтерфейс.

openSUSE Універсальний

Справжній тул YaST. Варіанти Leap (стабільний) і Tumbleweed (rolling). zypper.

Kali Linux Безпека

Спеціалізований для тестування на проникнення. 600+ інструментів безпеки із коробки.

Alpine Linux Мікро

Obov 5 MB об’єм. Орієнтований на Docker-контейнери. musl libc + BusyBox. Надшвидко запускається.

«Дистрибутив — це не лише інша операційна система — це інша філософія. Ubuntu каже: "людина існує через інших людей". Arch каже: "налаштуй все самостійно".»

— Спільнота лінуксового жартовиння
03
Приклади команд роботи в Linux CLI
pwd, echo, ls, cd, touch, mkdir, cp, mv, rm, history — основні команди командного рядка
1
pwd Показати поточню директорію

Print Working Directory — виводить повний шлях до поточньої робочої директорії. Допомагає зрозуміти, де ви знаходитесь у файловій системі.

bash
$ pwd
/home/student

$ pwd
/var/www/html
2
echo Вивести текст / значення змінної

echo — виводить рядок тексту або значення змінної на екран або перенаправляє в файл. Незамінний при написанні скриптів.

bash
$ echo "Hello, World!"
Hello, World!

$ echo "Ваш шлях: $HOME"
Ваш шлях: /home/student

$ echo "рядок" > file.txt      # записати у файл
$ echo "ще рядок" >> file.txt   # дописати в кінець
3
ls Перегляд вмісту директорії

list — виводить перелік файлів і директорій. Найбільш використовувана команда в Linux. Підтримує множину прапорців для контролю виводу.

bash
$ 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      # вміст конкретної директорії
4
cd Змінити директорію

Change Directory — переміщує поточню робочу директорію. Розуміє абсолютні і відносні шляхи, спеціальні символи ~ і -.

bash
$ cd /home/student/Documents   # абсолютний шлях
$ cd projects                  # відносний шлях (підпапка)
$ cd ..                        # на рівень вище
$ cd ../..                     # на два рівні вище
$ cd ~                         # домашня директорія
$ cd -                         # повернутись у попередню
5
touch Створити порожній файл

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

bash
$ 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
6
mkdir Створити директорію

Make Directory — створює одну або кілька директорій. З прапорцем -p створює весь ланцюжок шляху автоматично.

bash
$ mkdir my-project
$ mkdir -p src/components/ui   # весь ланцюжок
$ mkdir docs tests scripts       # кілька директорій
$ ls
docs  my-project  scripts  src  tests
7
cp Копіювати файли або директорії

Copy — копіює файли в нове місце. Для копіювання директорій потрібний прапорець -r (recursive).

bash
$ cp notes.txt backup.txt          # копія файлу
$ cp notes.txt Documents/           # скопіювати в папку
$ cp -r project/ project-backup/   # копія директорії
$ cp -i a.txt b.txt               # питати перед заміною
8
mv Перемістити / перейменувати

Move — переміщує файли або перейменовує їх. Оригінал завжди видаляється (відмінність від cp).

bash
$ mv old-name.txt new-name.txt   # перейменувати
$ mv report.pdf Documents/        # перемістити
$ mv temp-folder/ archive/       # перемістити директорію
$ mv *.log logs/                  # перемістити за маскою
9
rm Видалити файли або директорії

Remove — видаляє файли назавжди, минаючи кошик. Будьте обережні з rm -rf — відновити дані не можна!

bash
$ rm temp.txt                    # видалити файл
$ rm -i important.txt            # питати перед видаленням
$ rm *.tmp                        # за маскою
$ rm -r old-project/             # рекурсивно (директорія)
$ rm -rf cache/                  # ⚠️ без підтвердження!
10
history Перегляд історії команд

history — виводить список попередніх команд. Команду можна виконати повторно за номером !N або поновнити останню з !!.

bash
$ 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     # очистити всю історію
04
BASH-скрипт: імітація авторизації
Скрипт, що імітує вхід в систему в текстовому режимі (логін / пароль)
login.sh — система авторизації
#!/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

🚀 Як запустити скрипт

bash
# 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.

05
Джерела інформації
Рекомендовані ресурси для поглибленого вивчення GNU/Linux і Bash
✨ AI-асистент

Запитай про GNU/Linux і Bash

є питання? Асистент відповість на будь-що про команди, дистрибутиви та скрипти

🤖
LinuxBot
Онлайн
🤖
Привіт! Я LinuxBot — ваш асистент з GNU/Linux і Bash. 🐧

Запитайте мене про дистрибутиви, команди CLI, скрипти або будь-що інше з цього матеріалу!
Bash — Командний рядок Linux/Unix
🖥️ Командний рядок Unix/Linux

Вивчаємо Bash з нуля

Повний навчальний матеріал: від теорії командного рядка до практичних команд, скриптів, автоматизації та прав доступу у Unix/Linux системах.

01
Що таке Bash?
Bourne Again Shell — командна оболонка та мова сценаріїв

Bash (Bourne Again Shell) — командна оболонка та мова сценаріїв для Unix/Linux систем. Створена у 1989 році Браяном Фоксом як вільна альтернатива Bourne Shell (sh). Bash є стандартною оболонкою в більшості дистрибутивів Linux і macOS.

💻
Що це таке?

Bash — інтерпретатор командного рядка. Він читає команди, які ви вводите, і виконує їх. Bash є прошарком між вами і ядром операційної системи.

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

1977 — Bourne Shell (sh).
1989 — Bash (GNU Project).
1993 — zsh, fish.
Сьогодні — стандарт на серверах.

🎯
Навіщо вчити Bash?

Автоматизація завдань, DevOps, CI/CD, керування серверами — все це вимагає Bash. Без нього неможливо ефективно працювати в Linux-середовищі.

🌐
Де використовується?

Linux сервери, macOS термінал, WSL (Windows), Docker, GitHub Actions, CI/CD, AWS/GCP/Azure.

«Якщо ви хочете бути справжнім DevOps-інженером або системним адміністратором, вивчення Bash — це не варіант, це обов’язок.»

— Загальноприйнята мудрість у Linux-спільноті
03
Робота з файлами
cat, cp, mv, rm, echo, touch — створення, копіювання, видалення
1
cat / less / head / tail Перегляд вмісту файлу

cat — виводить весь файл. less — з прокруткою. head/tail — перші/останні рядки.

bash
cat README.md
cat -n script.sh   # з нумерацією рядків
less server.log    # прокрутка великого файлу
head -n 20 file   # перші 20 рядків
tail -n 20 file   # останні 20 рядків
tail -f server.log # стежити за файлом в реальному часі
2
cp Копіювання файлів

Copy — копіює файли або директорії. Для рекурсивного копіювання директорій потрібен прапорець -r.

bash
cp file.txt backup.txt
cp file.txt /backup/
cp -r src/ backup-src/  # рекурсивно
cp -i file.txt dest     # питати перед перезаписом
3
mv Переміщення та перейменування

Move — переміщує або перейменовує файли. Оригінал видаляється.

bash
mv old.txt new.txt        # перейменувати
mv file.txt /other/dir/   # перемістити
mv old-dir/ new-dir/      # перейменувати директорію
4
rm Видалення файлів

Remove — видаляє файли назавжди (без Кошику!). Будьте ВКРАЙ обережні з &#code style="color:var(--green);font-family:'Fira Code',monospace">-rf.

bash
rm file.txt
rm -i file.txt          # питати
rm -r old-folder/       # рекурсивно
rm -rf temp/            # ⚠️ без підтвердження!
rm *.log                # за маскою
5
echo / touch Виведення тексту та створення файлів

echo — виводить текст в термінал або записує у файл. touch — створює порожній файл.

bash
echo "Hello, World!"
echo "рядок" > file.txt    # записати (перезаписує)
echo "рядок" >> file.txt   # дописати в кінець
touch new-file.txt          # порожній файл
04
Права доступу
chmod, chown, sudo — керування правами у Linux

У Linux кожен файл має три рівні прав: для власника (u), групи (g) та інших (o). Права: r (читання=4), w (запис=2), x (виконання=1). ls -l показує права у форматі -rwxr-xr--.

1
chmod Зміна прав доступу

Change Mode — змінює права доступу. Підтримує числовий (octal) та символьний формат.

bash
# r=4, w=2, x=1
chmod 755 script.sh   # rwxr-xr-x (виконуваний скрипт)
chmod 644 file.txt    # rw-r--r-- (звичайний файл)
chmod 600 .env        # rw------- (лише власник)
chmod +x script.sh   # додати виконання
chmod -R 755 dir/   # рекурсивно
2
chown Зміна власника файлу

Change Owner — змінює власника та/або групу файлу. Зазвичай потребує sudo.

bash
sudo chown user file.txt
sudo chown user:group file
sudo chown -R www-data:www-data /var/www
3
sudo Виконання з правами суперкористувача

Substitute User Do — виконує команду з правами root. Завжди думайте двічі перед використанням.

bash
sudo apt update
sudo apt install nginx
sudo systemctl restart nginx
sudo -i                    # стати root
sudo !!                    # повторити останню команду
06
Pipes та перенаправлення
|, >, >>, <, 2> — з’єднуємо команди у ланцюжки

📥
stdin <

Перенаправляє входідний потік з файлу. Напр.: command < input.txt

📤
stdout > / >>

> перезаписує файл, >> дописує. Напр.: ls > files.txt

⚠️
stderr 2>

2> перенаправляє помилки. 2>&1 — stderr у stdout. Напр.: cmd 2>err.log

🔗
Pipe |

З’єднує вивід однієї команди з входом іншої. Напр.: cat log | grep err | wc -l

bash — приклади
# Порахувати рядки з "error"
cat server.log | grep "error" | wc -l

# Топ-5 найбільших файлів
ls -la | sort -k5 -rn | head -5

# Зберегти список процесів
ps aux > processes.txt

# Дописати з міткою часу
echo "[$(date)] Старт" >> deploy.log

# Vдалити stderr, зберегти stdout
find / -name "*.conf" 2>/dev/null > configs.txt

# Топ-5 IP з лога access.log
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -5
07
Bash-скрипти та автоматизація
Змінні, умови, цикли, функції — пишемо перший скрипт
📜

Shebang

Перший рядок скрипта #!/bin/bash вказує системі яким інтерпретатором виконувати файл.

📊

Змінні

Оголошення: NAME="value" (без пробілів!). Використання: $NAME або ${NAME}.

❓

Умовні оператори

if [ cond ]; then ... fi. Перевірка файлів: -f, -d, -e.

🔄

Цикли

for, while, until. Ітерація по файлах, масивах, числах.

bash — повний приклад скрипта
#!/bin/bash
# backup.sh — резервне копіювання

SOURCE_DIR="/var/www/html"
BACKUP_DIR="/backups"
DATE=$(date +%Y-%m-%d)
BACKUP_FILE="backup-${DATE}.tar.gz"

# Перевірка директорії
if [ ! -d "$BACKUP_DIR" ]; then
  mkdir -p "$BACKUP_DIR"
  echo "Директорію створено"
fi

# Функція
make_backup() {
  local src="$1"
  local dest="$2"
  tar -czf "$dest" "$src" && echo "Backup OK: $dest" || echo "ERROR!"
}

make_backup "$SOURCE_DIR" "$BACKUP_DIR/$BACKUP_FILE"

# Цикл for по файлах
for file in *.sh; do
  echo "Скрипт: $file"
done

# Хібні бекапи (старіші 7 днів)
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
echo "Очищення завершено"
08
Джерела інформації
Рекомендовані ресурси для поглибленого вивчення Bash
✨ AI-асистент

Запитай про Bash

є питання? Асистент відповість на будь-що про команди, скрипти та термінал

🤖
BashBot
Онлайн
🤖
Привіт! Я BashBot — ваш асистент з Bash та командного рядка. 🖥️

Запитайте мене про будь-яку команду, синтаксис скриптів, pipes, права доступу або автоматизацію. Спробуйте одну з підказок нижче!