План лекций
Целевая аудитория
Студенты с базовыми знаниями программирования. Знакомы с командной строкой на начальном уровне.
Платформа
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–3 | 1–3 | Терминал, процессы, bash-скрипты, права, systemd |
| Сети | 4–5 | 4–5 | Диагностика, SSH, файрвол, tcpdump, подсети |
| Контейнеризация и DevOps | 6–8 | 6–8 | Docker, Compose, CI/CD-пайплайн, сканирование |