Операційна система GNU/Linux
Вільна, відкрита та наднадійна операційна система, що живить увесь сучасний світ: від серверів, хмарних платформ і суперкомп'ютерів до мобільних пристроїв та систем безпеки.
Що таке GNU/Linux?
GNU/Linux — це повнофункціональна Unix-подібна операційна система з відкритим вихідним кодом. Вона складається з двох фундаментальних компонентів:
- Ядро Linux (Linux Kernel) — створене фінським студентом Лінусом Торвальдсом у 1991 році. Ядро безпосередньо керує процесором, оперативною пам'яттю, файловими системами та пристроями введення-виведення.
- Утиліти та середовище GNU — створені проектом Річарда Столлмана (Free Software Foundation) з 1983 року: компілятор GCC, базова бібліотека C (glibc), командний інтерпретатор Bash, утиліти Coreutils тощо.
Ключові архітектурні переваги:
• Багатозадачність і багатокористувацький режим: одночасне виконання сотень ізольованих процесів кількома користувачами.
• Розмежування прав та безпека: сувора POSIX-модель прав (rwx), механізми DAC/MAC (AppArmor, SELinux) та namespaces.
• Принцип «Все є файлом» (Everything is a file): уніфікований доступ до пристроїв (/dev), інформації про процеси (/proc) та системних налаштувань (/sys).
• Гнучкість та кастомізація: можливість заміни будь-якого компонента (ядра, шелла, графічної оболонки, менеджера пакетів).
Сьогодні Linux використовується скрізь: на смартфонах під керуванням Android, у марсоходах NASA Perseverance, у серверах веб-сервісів Google, Meta та Cloudflare, а також у бортових комп'ютерах сучасних автомобілів.
Найбільш популярні дистрибутиви Linux
Дистрибутив Linux — це операційна система, зібрана на базі ядра Linux, системних утиліт GNU, пакетного менеджера та набору програмного забезпечення під конкретні задачі (робоча станція, сервер, безпека, контейнери).
Приклади команд роботи в Linux CLI
Інтерфейс командного рядка (CLI) — серце адміністрування Linux. Нижче наведено детальні приклади роботи з 10 обов'язковими командами файлової системи та навігації.
Виводить абсолютний шлях від кореня / до каталогу, в якому зараз перебуває сеанс терміналу.
Прапор -P розкриває символічні посилання до фізичного шляху.
Шелл: /bin/bash
Домашній каталог: /home/user
Прапор -e активує інтерпретацію спецсимволів escape (\n — новий рядок, \t — табуляція).
Прапор -n вимикає перенесення на новий рядок у кінці.
drwxr-xr-x 4 user user 4.0K Sep 26 13:00 .
drwxr-xr-x 3 root root 4.0K Sep 20 09:12 ..
-rw-r--r-- 1 user user 220 Sep 20 09:12 .bash_logout
-rw-r--r-- 1 user user 3.7K Sep 20 09:12 .bashrc
drwxr-xr-x 3 user user 4.0K Sep 26 12:45 projects
-rw-r--r-- 1 user user 1.2K Sep 26 13:00 notes.txt
Найчастіші прапори: -l (довгий формат з правами доступу, власником та розміром),
-a (всі файли, включаючи приховані, що починаються з крапки), -h (human-readable розміри: K, M, G).
Якщо вказаний файл вже існує, команда не перезаписує його вміст, а лише оновлює мітки часу atime та mtime.
Ключ -p (parents) запобігає помилкам, якщо батьківські каталоги ще не створені,
і не видає помилку, якщо папка вже існує.
Прапор -a (archive) зберігає атрибути файлів, права, власників, часові мітки та симлінки (ідеально для бекапів).
Критична пересторога: У Linux немає «Кошика» для терміналу.
Команда rm -rf видаляє назавжди без можливості штатного відновлення.
Ніколи не запускайте sudo rm -rf /!
1022 mkdir -p src/utils
1023 touch src/utils/math.c
1024 gcc -Wall src/utils/math.c -o app
1025 history | tail -n 5
BASH-скрипт: Імітація текстової авторизації в системі
Скрипт демонструє класичний механізм входу до Linux у консольному режимі (TTY/SSH).
Реалізовано: кольорове оформлення ANSI, ASCII-логотип системи, приховане введення пароля (read -s),
лічильник невдалих спроб, блокування облікового запису на таймер та інтерактивну оболонку після входу.
#!/usr/bin/env bash # ============================================================================== # login_simulation.sh — Імітація текстової консольної авторизації в GNU/Linux # Курс: Системне програмування # ============================================================================== # --- Налаштування кольорів ANSI --- readonly RED='\033[0;31m' readonly GREEN='\033[0;32m' readonly YELLOW='\033[1;33m' readonly CYAN='\033[0;36m' readonly BOLD='\033[1m' readonly DIM='\033[2m' readonly NC='\033[0m' # Скинути стиль # --- Конфігурація системи --- readonly HOSTNAME="sp-workstation" readonly VALID_USER="admin" readonly VALID_PASS="linux2026" readonly MAX_ATTEMPTS=3 readonly LOCKOUT_TIME=10 # Секунди блокування при вичерпанні спроб attempts=0 # --- Функція: Банер входу системи --- print_banner() { clear echo "" echo -e " ${CYAN}${BOLD}██████╗ ███╗ ██╗██╗ ██╗ ██╗ ██╗███╗ ██╗██╗ ██╗██╗ ██╗${NC}" echo -e " ${CYAN}██╔════╝ ████╗ ██║██║ ██║ ██║ ██║████╗ ██║██║ ██║╚██╗██╔╝${NC}" echo -e " ${CYAN}██║ ███╗██╔██╗ ██║██║ ██║ ██║ ██║██╔██╗ ██║██║ ██║ ╚███╔╝ ${NC}" echo -e " ${CYAN}██║ ██║██║╚██╗██║██║ ██║ ██║ ██║██║╚██╗██║██║ ██║ ██╔██╗ ${NC}" echo -e " ${CYAN}╚██████╔╝██║ ╚████║╚██████╔╝ ███████╗██║██║ ╚████║╚██████╔╝██╔╝ ██╗${NC}" echo -e " ${CYAN} ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝${NC}" echo "" echo -e " ${DIM}ОС: Ubuntu 24.04 LTS (Noble Numbat) | Ядро: $(uname -r 2>/dev/null || echo '6.8.0-generic')${NC}" echo -e " ${DIM}Хост: ${HOSTNAME} | Дата: $(date '+%d.%m.%Y %H:%M:%S')${NC}" echo "" echo -e " ${YELLOW}Введіть облікові дані для авторизації:${NC}" echo "" } # --- Функція: Блокування при перевищенні ліміту --- lockout_user() { echo "" echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" echo -e "${RED} [БЕЗПЕКА] Перевищено ліміт спроб (${MAX_ATTEMPTS})! Вхід заблоковано.${NC}" echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" for ((sec=LOCKOUT_TIME; sec>0; sec--)); do printf "\r Зачекайте перед повторною спробою: ${YELLOW}%02d сек${NC}... " "$sec" sleep 1 done echo -e "\n\n ${GREEN}Блокування знято. Відновлення форми входу...${NC}" sleep 1.5 attempts=0 print_banner } # --- Функція: Успішна авторизація (MOTD) --- welcome_screen() { local user="$1" clear echo "" echo -e "${GREEN}=================================================================${NC}" echo -e "${GREEN}${BOLD} ✓ Авторизація успішна! Ласкаво просимо, ${user}.${NC}" echo -e "${GREEN}=================================================================${NC}" echo "" echo -e " ${CYAN}Системний статус (MOTD):${NC}" echo -e " • Останній вхід : $(date '+%a %b %d %T %Y') з 127.0.0.1" echo -e " • Uptime : $(uptime -p 2>/dev/null || echo 'up 5 days, 12 hours')" echo -e " • Використання : Диск 34% (34G/100G) | RAM 2.4G/16G" echo -e " • Доступ : /home/${user} (права: rwx)" echo "" echo -e " ${DIM}Доступні демо-команди: whoami, pwd, ls, date, clear, exit${NC}" echo "" } # --- Головний цикл аутентифікації --- print_banner while true; do printf " ${HOSTNAME} login: " read -r input_user # Прапор -s вимикає echo-відображення символів пароля printf " Password: " read -rs input_pass echo "" if [[ "$input_user" == "$VALID_USER" && "$input_pass" == "$VALID_PASS" ]]; then welcome_screen "$input_user" break else (( attempts++ )) local_remaining=$(( MAX_ATTEMPTS - attempts )) echo "" echo -e " ${RED}Login incorrect. Спроба помилкова.${NC}" if [[ $attempts -ge $MAX_ATTEMPTS ]]; then lockout_user else echo -e " ${YELLOW}Залишилось спроб: ${local_remaining} з ${MAX_ATTEMPTS}${NC}\n" fi fi done # --- Інтерактивна міні-оболонка після успішного входу --- while true; do printf "${GREEN}${VALID_USER}@${HOSTNAME}:${CYAN}~${NC}$ " read -r cmd case "$cmd" in exit|logout) echo -e " ${CYAN}Завершення сеансу. logout.${NC}\n" exit 0 ;; whoami) echo " $VALID_USER" ;; pwd) echo " /home/$VALID_USER" ;; ls) echo -e " ${CYAN}Desktop Documents Downloads projects public_html${NC}" ;; date) date ;; clear) clear ;; "") ;; *) echo -e " bash: $cmd: команда не знайдена (режим симуляції)" ;; esac done
Як протестувати локально:
1. Створіть файл скрипта: nano login_simulation.sh
2. Додайте права на виконання: chmod +x login_simulation.sh
3. Запустіть у терміналі: ./login_simulation.sh
Тестові дані для входу: логін: admin, пароль: linux2026.
Джерела інформації по темі GNU/Linux
Офіційні портали документації, книги, відкриті курси та корисні спільноти для поглибленого вивчення: