Перейти к содержимому

План лекций

Целевая аудитория

Студенты с базовыми знаниями программирования. Знакомы с командной строкой на начальном уровне.

Платформа

Linux (Ubuntu/Debian). Все примеры и команды ориентированы на Linux.

Цель курса

Дать системное понимание устройства ОС и сетей, научить работать с Linux на уровне администратора, познакомить с современными инструментами контейнеризации и DevOps-практиками.


Структура курса (8 лекций)

Блок I. Операционные системы (лекции 1–3)

Лекция 1. Введение в операционные системы

  • Понятие ОС, функции, классификация
  • Историческое развитие: пакетная обработка → многозадачность → персональные ОС → мобильные и облачные
  • Семейства ОС: Unix/Linux, Windows NT, macOS — общие корни и различия
  • Архитектура ОС: монолитное ядро (Linux) vs микроядро (Minix, QNX) vs гибрид (Windows NT, macOS/XNU)
  • Понятие ядра: пространство ядра vs пространство пользователя, системные вызовы как интерфейс
  • Режимы работы процессора: user mode и kernel mode, ловушки и прерывания
  • Оболочка (shell) как интерфейс к ядру: CLI vs GUI, понятие командного интерпретатора
  • Обзор: как устроена ОС «под капотом» — от нажатия кнопки питания до рабочего стола (POST → загрузчик → ядро → init/systemd)

Лекция 2. Процессы, потоки и планирование

  • Понятие процесса: адресное пространство, контекст, PCB (Process Control Block)
  • Жизненный цикл процесса: создание, готовность, выполнение, ожидание, завершение
  • Создание процессов: fork()/exec() в Unix, CreateProcess() в Windows — сравнение моделей
  • Потоки (threads): отличие от процессов, модели многопоточности (1:1, N:1, M:N)
  • Планирование CPU: критерии (throughput, latency, fairness)
  • Алгоритмы планирования: FCFS, SJF, Round Robin, приоритетное, многоуровневые очереди
  • Планирование в реальных ОС: CFS в Linux, планировщик Windows — общие принципы
  • Межпроцессное взаимодействие (IPC): каналы (pipes), сигналы, очереди сообщений, разделяемая память, сокеты
  • Проблемы конкурентного доступа: гонки (race conditions), взаимные блокировки (deadlock), голодание (starvation)
  • Механизмы синхронизации: мьютексы, семафоры, мониторы — концептуально

Лекция 3. Управление памятью и файловые системы

  • Иерархия памяти: регистры → кэш → RAM → диск → сеть; принцип локальности
  • Адресация: физические vs логические (виртуальные) адреса
  • Виртуальная память: страничная организация, таблица страниц, MMU
  • Подкачка (swapping/paging): алгоритмы замещения страниц (FIFO, LRU, Clock)
  • Сегментация vs страничная организация — сравнение подходов
  • Файловая система: понятие, задачи, метаданные
  • Структура ФС: суперблок, inode (Unix), MFT (NTFS) — сравнение подходов
  • Типы ФС: ext4, XFS, Btrfs (Linux), NTFS (Windows), APFS (macOS) — ключевые отличия
  • Ссылки: жёсткие и символические — концепция и различия
  • Права доступа: модели (Unix rwx, ACL, RBAC) — общие принципы разграничения
  • Пользователи, группы и политика минимальных привилегий — кроссплатформенный взгляд

Блок II. Сети (лекции 4–5)

Лекция 4. Основы компьютерных сетей

  • Модель OSI: 7 уровней — назначение каждого
  • Модель TCP/IP: 4 уровня — соответствие с OSI
  • Физический и канальный уровень: Ethernet, MAC-адреса, коммутаторы
  • Сетевой уровень: IP-адресация (IPv4, IPv6), маски подсетей, CIDR
  • Маршрутизация: таблицы маршрутов, шлюзы, ip route
  • DHCP и NAT: автоматическая настройка и трансляция адресов
  • Утилиты: ip, ping, traceroute, nslookup, dig

Лекция 5. Транспортный и прикладной уровень. Практика сетей в Linux

  • Транспортный уровень: TCP vs UDP — различия, применение
  • TCP: трёхстороннее рукопожатие, контроль потока, надёжность
  • UDP: дейтаграммы, применение (DNS, VoIP, игры)
  • Порты и сокеты: понятие, диапазоны (well-known, registered, dynamic)
  • Прикладной уровень: HTTP/HTTPS, DNS, SSH, FTP/SFTP
  • DNS: иерархия, записи (A, AAAA, CNAME, MX, TXT), резолвинг
  • SSH: ключи, аутентификация, ssh, scp, ssh-keygen, конфигурация
  • Межсетевые экраны: iptables/nftables, ufw — базовые правила
  • Практика: ss, netstat, tcpdump, curl, wget

Блок III. Контейнеризация и DevOps (лекции 6–8)

Лекция 6. Docker: контейнеризация

  • Проблема: «у меня работает» — зачем нужны контейнеры
  • Виртуализация vs контейнеризация: гипервизоры vs контейнерный рантайм
  • Docker: архитектура (daemon, CLI, registry)
  • Образы (images): слои, кэширование, Docker Hub
  • Контейнеры: жизненный цикл, изоляция (namespaces, cgroups)
  • Dockerfile: инструкции (FROM, RUN, COPY, WORKDIR, EXPOSE, CMD, ENTRYPOINT)
  • Лучшие практики Dockerfile: минимизация слоёв, multi-stage builds, .dockerignore
  • Команды: docker build, docker run, docker ps, docker exec, docker logs, docker stop/rm
  • Volumes и bind mounts: персистентное хранение данных
  • Сети Docker: bridge, host, none — когда что использовать

Лекция 7. Docker Compose и оркестрация

  • Docker Compose: назначение и формат docker-compose.yml
  • Сервисы, сети, volumes в Compose
  • Переменные окружения: .env, environment, env_file
  • Healthchecks и зависимости между сервисами (depends_on, healthcheck)
  • Практический пример: многоконтейнерное приложение (web + БД + кэш)
  • Реестры образов: Docker Hub, GitHub Container Registry, приватные реестры
  • Введение в оркестрацию: зачем нужна, обзор Kubernetes (общие концепции: Pod, Service, Deployment — без углубления)
  • Docker в CI/CD: использование контейнеров для сборки и тестирования

Лекция 8. Основы DevOps-практик

  • Философия DevOps: культура, автоматизация, измерение, обмен знаниями (CALMS)
  • Git для DevOps: ветвление, GitFlow/Trunk-based development, теги
  • CI/CD: концепция непрерывной интеграции и доставки
  • GitHub Actions: workflow, jobs, steps, runners — практический пример пайплайна
  • Мониторинг и логирование: общие концепции, стек (Prometheus + Grafana — обзор)
  • Инфраструктура как код (IaC): идея, обзор инструментов (Ansible, Terraform — концептуально)
  • Безопасность: управление секретами, сканирование образов, принцип наименьших привилегий
  • Обзор современных трендов: GitOps, serverless containers, Podman как альтернатива Docker
  • Итоги курса: от ядра Linux до развёртывания приложений

Практические занятия (8 штук)

Блок I. Операционные системы

Практика 1. Знакомство с Linux: терминал и файловая система

  • Навигация по файловой системе: pwd, ls -la, cd, tree
  • Создание структуры каталогов для учебного проекта (mkdir -p, touch)
  • Работа с файлами: cp, mv, rm, cat, head, tail, wc
  • Перенаправление потоков: >, >>, 2>, |, tee
  • Поиск: find (по имени, размеру, дате), grep (по содержимому, рекурсивно, с regex)
  • Архивация: tar, gzip, zip/unzip
  • Написание простых однострочников: цепочки из grep | sort | uniq -c | sort -rn
  • Мини-проект: анализ лог-файла — извлечь топ-10 IP-адресов, количество ошибок 4xx/5xx, отсортировать по частоте

Практика 2. Процессы, мониторинг и скрипты

  • Исследование процессов: ps aux, top/htop, pstree, /proc/<pid>/status
  • Управление процессами: запуск в фоне (&, nohup), jobs, fg, bg, kill, killall
  • Приоритеты: nice, renice — наблюдение за влиянием на загрузку
  • Сигналы: отправка SIGTERM, SIGKILL, SIGHUP, SIGUSR1 и наблюдение за поведением
  • Каналы и IPC: создание именованных каналов (mkfifo), передача данных между процессами
  • Трассировка: strace — наблюдение за системными вызовами простой программы
  • Написание bash-скрипта: переменные, условия, циклы, функции, аргументы ($1, $@, $?)
  • Мини-проект: скрипт мониторинга — каждые N секунд записывает загрузку CPU, памяти, количество процессов в CSV-файл; по Ctrl+C выводит итог

Практика 3. Файловые системы, пользователи, права и systemd

  • Изучение inode: ls -i, stat, создание жёстких (ln) и символических (ln -s) ссылок, проверка отличий
  • Права доступа: chmod (числовой и символьный формат), chown, chgrp
  • Расчёт umask: определить маску, предсказать права нового файла/каталога
  • Специальные биты: SUID (наблюдение на /usr/bin/passwd), Sticky bit (/tmp)
  • Управление пользователями: useradd, usermod, userdel, groupadd, passwd, изучение /etc/passwd, /etc/shadow
  • sudo: настройка /etc/sudoers через visudo, политика минимальных привилегий
  • Пакетный менеджер: apt update, apt install, apt search, dpkg -L
  • systemd: systemctl status/start/stop/enable/disable, чтение логов journalctl -u <сервис>, изучение unit-файла
  • Мини-проект: создание собственного systemd-сервиса: bash-скрипт → unit-файл → systemctl enable → проверка автозапуска и логирования

Блок II. Сети

Практика 4. Сетевая диагностика и конфигурация

  • Изучение сетевых интерфейсов: ip addr, ip link, ifconfig (сравнение)
  • Проверка связности: ping (IPv4, IPv6), traceroute/mtr — анализ маршрута
  • DNS: nslookup, dig (A, AAAA, MX, CNAME, TXT записи), изучение /etc/resolv.conf, /etc/hosts
  • Маршрутизация: ip route, добавление/удаление маршрутов, определение шлюза по умолчанию
  • Расчёт подсетей: по заданному IP и маске определить адрес сети, broadcast, диапазон хостов, CIDR-нотацию (серия задач)
  • ARP-таблица: ip neigh, наблюдение за MAC-адресами
  • Настройка статического IP: редактирование /etc/netplan/ (Ubuntu) или /etc/network/interfaces
  • Мини-проект: диагностический скрипт — проверяет: интерфейс UP, IP присвоен, шлюз доступен, DNS резолвит, интернет доступен; выводит отчёт с цветным OK/FAIL

Практика 5. Протоколы, SSH, файрвол и сниффинг

  • TCP vs UDP: наблюдение через ss -tlnp, ss -ulnp — какие порты слушают
  • curl и HTTP: GET/POST запросы, заголовки (-H), коды ответов, -v для отладки
  • SSH: генерация ключей (ssh-keygen -t ed25519), копирование на сервер (ssh-copy-id), вход по ключу, настройка ~/.ssh/config
  • SCP и SFTP: передача файлов, rsync через SSH
  • tcpdump: перехват пакетов на интерфейсе, фильтрация по порту/хосту/протоколу, сохранение в .pcap
  • Файрвол (ufw): включение, добавление правил (allow/deny по порту, IP), проверка статуса, удаление правил
  • Написание простого сервера: nc (netcat) — чат между двумя терминалами, передача файлов
  • Мини-проект: настройка безопасного сервера — создать пользователя, настроить SSH-доступ только по ключу, закрыть файрволом всё кроме 22 и 80 порта, проверить tcpdump-ом

Блок III. Контейнеризация и DevOps

Практика 6. Docker: первые контейнеры

  • Установка Docker, проверка docker info, docker version
  • Запуск первого контейнера: docker run hello-world, анализ вывода
  • Работа с образами: docker pull, docker images, docker rmi, исследование слоёв (docker history)
  • Интерактивный режим: docker run -it ubuntu bash — установка пакетов изнутри, выход, сравнение с docker run --rm
  • Написание Dockerfile: FROM → RUN → COPY → WORKDIR → CMD. Сборка образа для простого Python/Node-приложения
  • Multi-stage build: собрать Go/C-программу в одном слое, скопировать бинарник в scratch/alpine — сравнить размер образов
  • Volumes: docker volume create, запуск PostgreSQL/MySQL с volume, проверка персистентности данных после удаления контейнера
  • Сети: создание bridge-сети, запуск двух контейнеров в одной сети, docker exec + ping между ними
  • .dockerignore: создание файла, анализ контекста сборки
  • Мини-проект: контейнеризация веб-приложения — Dockerfile, запуск на порту 8080, volume для данных, проверка через curl

Практика 7. Docker Compose: многоконтейнерные приложения

  • Установка/обновление Docker Compose, docker compose version
  • Первый docker-compose.yml: один сервис, build, ports, volumes
  • Многосервисное приложение: web (Python Flask/FastAPI или Node) + PostgreSQL + Redis
  • Переменные окружения: .env-файл, environment, env_file в compose
  • Зависимости: depends_on, healthcheck для БД (pg_isready), наблюдение за порядком запуска
  • Логирование: docker compose logs -f, docker compose logs <service>
  • Масштабирование: docker compose up --scale web=3, наблюдение за балансировкой
  • Пуш образа: тегирование (docker tag), пуш в Docker Hub / GitHub Container Registry
  • Команды жизненного цикла: up -d, down, restart, build --no-cache, exec
  • Мини-проект: полноценный стек — приложение + БД + кэш + nginx как reverse proxy; docker-compose.yml с healthchecks, volumes, env-файлами; проверка curl-запросами

Практика 8. CI/CD и DevOps на практике

  • Git-основы для CI/CD: ветки, pull request, merge, теги (git tag -a)
  • GitHub Actions: создание .github/workflows/ci.yml, триггеры (push, pull_request)
  • Пайплайн — этап 1 (lint/test): линтинг кода + запуск тестов в контейнере
  • Пайплайн — этап 2 (build): сборка Docker-образа, пуш в registry
  • Пайплайн — этап 3 (deploy): деплой на сервер через SSH (или симуляция через docker compose up на runner)
  • Секреты: secrets в GitHub Actions, использование в workflow
  • Docker Scout / Trivy: сканирование образа на уязвимости, интеграция в пайплайн
  • Makefile: написание Makefile с целями build, test, lint, deploy, clean — единый интерфейс
  • Мини-проект: полный цикл — приложение с тестами → Dockerfile → docker-compose.yml → GitHub Actions пайплайн (lint → test → build → push); при пуше в main — автоматическая сборка и публикация образа

Примерное распределение акцентов

БлокЛекцииПрактикиФокус
Операционные системы1–31–3Терминал, процессы, bash-скрипты, права, systemd
Сети4–54–5Диагностика, SSH, файрвол, tcpdump, подсети
Контейнеризация и DevOps6–86–8Docker, Compose, CI/CD-пайплайн, сканирование