Обо мне / Подготовка к assesment
Краткая справка для прохождения assesment на DevOps роль
OSI (Open Systems Interconnection) — модель взаимодействия устройств в компьютерных сетях
| Уровень | Название | Короткое описание | Применение | Используемые порты/интерфейсы | Ограничения |
|---|---|---|---|---|---|
| 7 | Прикладной (Application) | Интерфейс приложений к сети; сетевые сервисы | Веб (HTTP/HTTPS), почта, FTP, DNS, API | TCP/UDP-порты приложений (напр. 80, 443, 25, 53, 21, 22) | Зависимость от безопасности и форматов; уязвимости приложений |
| 6 | Представления (Presentation) | Кодирование/декодирование, шифрование, сжатие | TLS/SSL, кодировки (UTF-8), сжатие | N/A (функция формата/шифрования) | Нагрузка на CPU; несовместимости форматов |
| 5 | Сеансовый (Session) | Управление сессиями/диалогами (установление/завершение) | RPC, управление сессиями приложений, чекпоинты | N/A | Stateful — сложность восстановления и масштабирования |
| 4 | Транспортный (Transport) | End-to-end связь: надежность, управление потоком/ошибками | TCP (надежно), UDP (ненадежно), мультиплексирование по портам | TCP/UDP номера портов (well-known/registered) | TCP: задержки, Head‑of‑Line; UDP: отсутствие гарантий доставки |
| 3 | Сетевой (Network) | Логическая адресация и маршрутизация (IP) | Маршрутизация IPv4/IPv6, ICMP, BGP/OSPF | N/A (используются IP‑адреса) | MTU/фрагментация; масштаб таблиц маршрутизации |
| 2 | Канальный (Data Link) | Передача кадров по сети, MAC‑адресация, VLAN | Ethernet, ARP, VLAN, коммутаторы, PPP | MAC‑адреса; физические/коммутаторные порты | Broadcast‑домен, MTU, уязвимости на уровне LAN (ARP spoofing) |
| 1 | Физический (Physical) | Передача битов: электрические/оптические/радиосигналы, коннекторы | Кабели (UTP, fiber), Wi‑Fi, разъёмы (RJ‑45, SFP) | Физические порты/разъёмы (RJ‑45, SFP и т.д.) | Полоса, дальность, помехи, аппаратные поломки |
Краткая таблица протоколов
| Протокол | Расшифровка | Краткое описание | Поведение / особенности | Типичные порты / номера | Команды |
|---|---|---|---|---|---|
TCP |
Transmission Control Protocol | Надёжный протокол с установкой соединения и гарантией доставки | Connection‑oriented, handshake, retransmit | любые TCP‑порты (напр. 22, 80, 443) | ss -tna / tcpdump -n 'tcp port 22' -c 5 |
UDP |
User Datagram Protocol | Лёгкий протокол без гарантий доставки | Connectionless, низкие задержки | DNS 53 (UDP), DHCP 67/68, RTP/VoIP | ss -una / dig @8.8.8.8 example.com |
Broadcast |
Широковещательная доставка | Отправка пакета всем узлам подсети | L2/L3 broadcast, не маршрутизируется по умолчанию | MAC ff:ff:ff:ff:ff:ff; IP 255.255.255.255 | tcpdump -n broadcast -c 20 / arp -a |
ICMP |
Internet Control Message Protocol | Диагностика и сообщения об ошибках (ping) | Используется для ping/traceroute, нет портов | нет портов (типы/коды ICMP) | ping -c 3 8.8.8.8 / traceroute -n 8.8.8.8 |
DHCP |
Dynamic Host Configuration Protocol | Автоматическое выдача IP и параметров сети | Клиент‑сервер, discovery через broadcast | UDP 67 (server), UDP 68 (client) | tcpdump -n udp port 67 or udp port 68 -c 20 / sudo dhclient -v |
ARP |
Address Resolution Protocol | Разрешение IP → MAC в локальной сети | Broadcast запросы и кэширование | нет портов (L2) | arp -a / ip neigh show |
Коды ошибок в рамках сетевого взаимодействия
| Код | Значение | Краткое описание | Как диагностировать | Быстрое исправление |
|---|---|---|---|---|
200 |
OK | Успешный запрос | Логи приложения, ответ body | Нет действия |
201 |
Created | Ресурс создан | Логи API, Location header | Проверить запись в БД |
301 |
Moved Permanently | Постоянный редирект | curl -I, Location | Исправить URL/конфиг |
302 |
Found | Временный редирект | curl -I | Проверить логи редиректов |
400 |
Bad Request | Неверный запрос | Логи приложения, validation errors | Исправить запрос/валидацию |
401 |
Unauthorized | Нет/истёк токен | Заголовки Authorization | Проверить токен/аутентификацию |
403 |
Forbidden | Доступ запрещён | ACL/permission logs | Исправить права/ACL |
404 |
Not Found | Ресурс не найден | URL, роуты | Проверить роут/ресурс |
408 |
Request Timeout | Таймаут запроса | nginx/timeout logs | Увеличить таймаут/оптимизировать |
429 |
Too Many Requests | Rate limit | Заголовки rate-limit, метрики | Backoff, увеличить лимит |
500 |
Internal Server Error | Ошибка приложения | Application logs, stacktrace | Исправить баг/деплой |
502 |
Bad Gateway | Неверный ответ upstream | Nginx/HAProxy logs | Проверить/перезапустить upstream |
503 |
Service Unavailable | Сервис недоступен | Health checks, metrics | Масштаб/maintenance |
504 |
Gateway Timeout | Таймаут upstream | Nginx logs, slow backend | Оптимизировать backend/таймаут |
Команды для поиска проблем на сети
| Команда | Описание | Важные параметры | Пример | Как интерпретировать |
|---|---|---|---|---|
ping |
Проверка доступности хоста и RTT | -c <n> (кол‑во), -W (timeout) |
ping -c 4 8.8.8.8 |
Пакеты теряются → потеря связи/packet loss; высокий RTT → задержки |
traceroute / tracert |
Трассировка маршрута пакетов | -n (без DNS), -w (timeout) |
traceroute -n 8.8.8.8 |
Узкие места по hop; if * — ICMP/TTL blocking |
mtr |
Комбинация ping+traceroute (реaltime) | -r (report), -c |
mtr -r 8.8.8.8 |
Показывает packet loss и latency по hop |
tcpdump |
Сниффинг трафика (пакеты) | -i <iface>, -w file, фильтры BPF |
sudo tcpdump -i eth0 port 80 -c 100 |
Смотрим пакеты/handshake/RST; полезно для детального анализа |
ss / netstat |
Сокеты, порты, состояния соединений | -tuna, -l, -p |
ss -tuna |
TIME_WAIT/RST → проблемы закрытия; нет LISTEN → сервис не поднят |
ip route |
Таблица маршрутизации | — | ip route show |
Неправильный маршрут → трафик идёт не туда |
ip neigh |
ARP/NDP таблица | — | ip neigh |
Нет MAC → ARP проблемы, duplicate → ARP conflict |
dig / nslookup |
DNS резолвинг и диагностика | +short, @server, тип запроса |
dig +short example.com |
NXDOMAIN → нет записи; ответ от неправильного сервера → DNS конфиг |
curl / wget |
HTTP‑проверки (headers/body) | -I, -v, --max-time |
curl -I https://example.com |
HTTP code 5xx → backend ошибка; TLS handshake failure → cert/ALPN issues |
nmap |
Сканирование портов/хостов | -p, -sT/-sS, -Pn |
nmap -p 22,80 host |
Closed/Filtered/Open помогает понять firewall/NAT |
iftop / nload |
Мониторинг трафика в реальном времени | интерфейс | iftop -i eth0 |
Высокая полоса → нагрузка/утечка трафика |
arping |
Проверка ARP‑ответов | -c, -I |
arping -c 3 -I eth0 192.168.1.1 |
Нет ответа → L2/ARP проблема |
Таблица популярных HTTP методов
| Метод | Описание | Пример использования | Рекомендации |
|---|---|---|---|
| GET | Получение ресурса (без изменения) | GET /api/users/123 |
Идёмпотентен; кешировать, не использовать для изменений |
| POST | Создание ресурса или выполнение операции | POST /api/users с JSON body |
Не идёмпотентен; валидация входных данных |
| PUT | Полная замена ресурса | PUT /api/users/123 с полным объектом |
Идёмпотентен; использовать для полной замены |
| PATCH | Частичное обновление ресурса | PATCH /api/users/123 с частичным JSON |
Использовать для частичных изменений |
| DELETE | Удаление ресурса | DELETE /api/users/123 |
Идёмпотентен (повторный DELETE — OK) |
| HEAD | Получить только заголовки ответа | HEAD /api/users/123 |
Быстрое наличие ресурса, кеш/мета‑данные |
| OPTIONS | Получить поддерживаемые методы / CORS preflight | OPTIONS /api/users |
Используется для CORS и описания возможностей ресурса |
Список регулярных выражений
| Назначение | Regex (PCRE/ECMAScript) | Пример строки | Примечание |
|---|---|---|---|
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ |
user@example.com |
Простая проверка, не для 100% RFC‑совместимости | |
| IPv4 | ^((25[0-5]|2[0-4]\d|[01]?\d\d?)(\.|$)){4}$ |
192.168.0.1 |
Валидирует октеты 0–255 |
| URL (http/https) | ^https?://[^\s/$.?#].[^\s]*$ |
https://example.com/path |
Простая проверка, не для всех кейсов |
| Дата YYYY-MM-DD | ^\d{4}-\d{2}-\d{2}$ |
2025-10-19 |
Доп. валидация на корректность даты не выполняется |
| Целое число (опционально знак) | ^-?\d+$ |
-42 |
|
| Дробное число | ^-?\d+(\.\d+)?$ |
3.14 |
|
| UUID v4 | ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$ |
550e8400-e29b-41d4-a716-446655440000 |
Проверяет вариант v4 |
| Логический поисковый паттерн (contains) | (?i)error|fail|exception |
Error: something |
(?i) — case‑insensitive |
Список используемых файловых систем
| Файловая система | Где используется | Особенности | Ограничения |
|---|---|---|---|
| ext4 | Linux серверы/рабочие станции | Надёжная, широкая поддержка, journaling | Ограничения на масштаб (очень большие FS поддерживаются) |
| XFS | Высокопроизводительные диски, большие файлы | Отлично с большими объёмами и параллельной записью | Нельзя уменьшать файловую систему онлайн |
| Btrfs | Снэпшоты, дедупликация, субтомы | Copy‑on‑write, снэпшоты, компрессия | Исторически стабильность/производительность — проверить перед продом |
| ZFS | Большие хранилища, NAS, аналитика | Copy‑on‑write, контроль целостности, дедупликация, снэпшоты | Память и ресурсоёмкость; лицензирование/совместимость |
| NTFS | Windows, совместный доступ с Linux (ntfs-3g) | Поддерживает ACL, большие файлы | Плохо подходит как основной Linux FS (производительность/совместимость) |
| FAT32 / exFAT | Removable media, USB | Совместимость с ОС, простота | FAT32: max file 4GB; exFAT: лучше для больших файлов, менее защищённая |
| tmpfs | Временное хранение в памяти (RAM) | Очень быстро, tmpfs монтируется в RAM | Не персистентна; ограничена объёмом RAM |
| overlayfs | Контейнерные файловые слои (Docker) | Union FS, слои образов, copy‑up | Подходит для контейнеров, но имеет нюансы с permission/locks |
Crontab - способ запуска заданий по расписанию
| Поле | Значение | Описание | Пример поля |
|---|---|---|---|
| minute | 0-59 | Минуты запуска | 30 |
| hour | 0-23 | Часы запуска | 2 |
| day_of_month | 1-31 | День месяца | 1 |
| month | 1-12 или Jan-Dec | Месяц | */6 |
| day_of_week | 0-7 или Sun-Sat (0/7 = Sun) | День недели | 1-5 |
| special | @reboot/@daily/... | Специальные строки вместо 5 полей | @daily |
Примеры записей crontab:
| Cron entry | Описание |
|---|---|
30 2 * * * /usr/local/bin/backup.sh |
Запуск backup.sh каждый день в 02:30 |
*/5 * * * * /usr/bin/php /srv/app/cron.php |
Каждые 5 минут |
0 0 1 * * /usr/bin/find /var/log -type f -mtime +30 -delete |
Удалять логи старше 30 дней 1-го числа месяца |
@reboot /usr/bin/docker start myservice |
Запустить контейнер при загрузке системы |
0 3 * * 0 root /usr/bin/apt-get update && apt-get -y upgrade |
Обновление по воскресеньям в 03:00 (пример в /etc/crontab с полем user) |
Описание записей DNS зон
| Тип записи | Описание | Пример записи | Использование |
|---|---|---|---|
| A | IPv4 адрес для хоста | www IN A 192.0.2.10 |
Указывает IPv4 адрес для имени |
| AAAA | IPv6 адрес для хоста | www IN AAAA 2001:db8::1 |
IPv6 эквивалент A |
| CNAME | Каноническое имя (алиас) | app IN CNAME www.example.com. |
Алиас на другое имя (не на IP) |
| MX | Почтовый сервер и приоритет | @ IN MX 10 mail.example.com. |
Маршрутизация почты |
| TXT | Произвольный текст, SPF, DKIM, verification | @ IN TXT "v=spf1 mx -all" |
SPF, DKIM, доменная валидация |
| NS | Делегирование зоны | example.com. IN NS ns1.example.net. |
Указывает авторитативные NS |
| SOA | Start of Authority — метаданные зоны | @ IN SOA ns1.example.net. hostmaster.example.com. (...) |
Обязательная запись зоны |
| SRV | Сервисы с приоритетом/портом | _sip._tcp IN SRV 10 60 5060 sipserver.example. |
SIP, XMPP, Kubernetes headless discovery |
| PTR | Обратная запись (IP → имя) | 10.2.0.192.in-addr.arpa. IN PTR host.example.com. |
Reverse DNS для почты/логов |
| CAA | Разрешение CA выдавать сертификаты | @ IN CAA 0 issue "letsencrypt.org" |
Контроль выдачи TLS сертификатов |
Что такое DNS зона
Выделенный сегмент интернета, где хранится информация о доменах и связанных с ними ресурсах, которые находятся под управлением определённой организации или лица.
GIT - команды для работы с репозиториями
| Команда | Результат / что делает команда | Доступные параметры (частые) | Пример команды |
|---|---|---|---|
git init |
Создаёт новый локальный репозиторий (инициализирует .git). |
--bare (создаёт bare-репозиторий без рабочей копии) |
git init my-repo |
git clone |
Клонирует удалённый репозиторий в новую папку. | --depth <n> (shallow clone — только последние n коммитов), --branch <name> (клонировать указанную ветку) |
git clone https://github.com/user/repo.git |
git add |
Добавляет изменения в индекс (staging area) для следующего коммита. | -A (добавить/удалить все изменения), . (все изменения в текущей папке), <path> (конкретный путь/файл) |
git add . / git add src/main.c |
git status |
Показывает текущее состояние рабочей директории и индекс. | -s (короткий/сводный вывод) |
git status |
git diff |
Показ отличий: рабочая директория vs индекс; --staged — индекс vs последний коммит. |
--staged (показать отличия, подготовленные к коммиту), --name-only (только имена изменённых файлов) |
git diff / git diff --staged |
git commit |
Создаёт коммит из индекса. --amend исправляет последний коммит. |
-m <msg> (сообщение коммита), --amend (изменить последний коммит), -a (автоматически добавить отслеживаемые файлы) |
git commit -m "fix bug" / git commit --amend |
git log |
Показывает историю коммитов; --oneline — компактно, --graph — ASCII‑граф ветвления. |
--oneline (одна строка на коммит), --graph (визуализация ветвления), -n <N> (показать N последних) |
git log --oneline --graph |
git branch |
Работа с ветками: создать, перечислить, удалить. | -a (все локальные и remote ветки), -d (удалить ветку безопасно), -D (форсированное удаление), <name> (имя ветки) |
git branch feature/x / git branch -D old |
git checkout |
Переключение веток или восстановление файлов; -b создаёт новую ветку и переключается на неё. |
-b <branch> (создать и переключиться на ветку) |
git checkout -b feature/x / git checkout main |
git switch |
Современная команда для переключения/создания веток (альтернатива checkout для веток). |
-c <branch> (создать новую ветку и переключиться) |
git switch -c feature/x / git switch main |
git merge |
Слияние указанной ветки в текущую; при конфликте нужно решать вручную. | --no-ff (всегда создать merge-коммит), --squash (объединить изменения без создания merge-коммита) |
git merge feature/x |
git rebase |
Перенос (переписывание) коммитов на основе другой ветки; -i — интерактивное редактирование. |
-i (интерактивный rebase: squash, fixup, редактирование) |
git rebase main / git rebase -i HEAD~3 |
git fetch |
Получает обновления с удалённого репозитория, не меняя рабочую ветку. | --all (все удалённые), --prune (удалить remote‑ссылки, которых больше нет на сервере) |
git fetch origin / git fetch --all --prune |
git pull |
fetch + merge (по умолчанию). Часто используют --rebase для линейной истории. |
--rebase (выполнить rebase вместо merge после fetch) |
git pull --rebase origin main |
git push |
Отправляет локальные коммиты на удалённый репозиторий. | --force (форсировать перезапись истории — опасно), --set-upstream (установить upstream для ветки), origin <branch> (куда/какая ветка) |
git push origin feature/x / git push --set-upstream origin feature/x |
git remote |
Управление удалёнными репозиториями (добавить/удалить/показать). | add (добавить remote), remove (удалить), set-url (сменить URL), -v (показать URL) |
git remote add origin git@github.com:user/repo.git |
git tag |
Создаёт метки (теги) коммитов: lightweight или аннотированные. | -a <name> -m <msg> (аннотированный тег с сообщением), <name> (имя тега) |
git tag -a v1.0 -m "release 1.0" / git push origin v1.0 |
git stash |
Временно сохраняет незакоммиченные изменения и очищает рабочую директорию. | push (положить изменения в стек), pop (взять и удалить из стека), list (показать список), apply (применить без удаления) |
git stash push -m "WIP" / git stash pop |
git reset |
Перемещает указатель ветки: --soft сохраняет индекс/файлы, --hard откатывает всё. |
--soft (только переместить HEAD), --mixed (по умолчанию — сброс индекса), --hard (удалить изменения в рабочей директории — осторожно) |
git reset --soft HEAD~1 / git reset --hard HEAD~1 |
git revert |
Создаёт новый коммит, отменяющий указанный коммит (без переписывания истории). | -m <parent> (для merge — указать родителя, который считать "основным") |
git revert <commit> |
git cherry-pick |
Применяет выбранный коммит из другой ветки в текущую (копирует изменения). | <commit> (хеш коммита) |
git cherry-pick a1b2c3d |
git rm |
Удаляет файл из индекса и рабочей копии; --cached — только из индекса. |
-r (рекурсивно для папок), --cached (оставить локальный файл, удалить из индекса) |
git rm file.txt / git rm --cached file.txt |
git mv |
Переименовывает/перемещает файлы и фиксирует это как одно действие. | — | git mv oldname newname |
git blame |
Показывает, кто и в каком коммите изменил каждую строку файла. | -L <start>,<end> (ограничить диапазон строк) |
git blame -L 10,20 file.c |
git bisect |
Двоичный поиск проблемного коммита (поиск, где появился баг). | start (инициализация), good (отметить рабочую версию), bad (отметить проблемную) |
git bisect start; git bisect bad; git bisect good v1.0 |
git reflog |
Локальный журнал движений HEAD — помогает восстановить потерянные коммиты. | — | git reflog |
git config |
Настройки Git (имя, email, алиасы и т.д.). | --global (для пользователя), --local (для репозитория), user.name (параметр) |
git config --global user.name "Ivan" |
Популярные приложения/клиенты для работы с Git
- Git (CLI) — официальная командная строка.
- Visual Studio Code — встроенная поддержка Git + GUI.
- GitHub Desktop (Windows/macOS) — простой GUI для GitHub.
- Sourcetree (Atlassian) — бесплатный GUI с визуализацией веток.
- GitKraken — современный UI (есть бесплатные и платные версии).
- Tower — платный клиент для macOS/Windows.
- SmartGit — мультиплатформенный клиент.
- TortoiseGit — интеграция Git в проводник Windows.
- IntelliJ IDEA / PhpStorm / WebStorm — встроенная поддержка Git (JetBrains).
- Git Extensions — GUI для Windows.
CI/CD: этапы, описание, лучшие практики
| Этап | Описание | Лучшие практики |
|---|---|---|
| Source / Commit | Разработка, контроль версий | Малые коммиты, ветки feature, PR с ревью |
| Build | Компиляция/сборка артефакта | Детерминированные сборки, кэширование, BuildKit |
| Static analysis / Lint | Анализ кода, правила стиля | Запуск линтеров в CI, fail on error, авто‑форматирование |
| Unit tests | Быстрые модульные тесты | Быстро, изолированно, покрытие критичных модулей |
| Integration tests | Тесты взаимодействий компонентов | Использовать тестовые окружения/контейнеры, mock зависимости |
| Security / SCA | Сканы уязвимостей и секретов | Trivy/Dependabot, сканинг зависимостей, secret scanning |
| Package / Artifact | Упаковка, версияция артефактов | Хранить в registry/artifact repo, семантические теги |
| Deploy to staging | Деплой в тест/стейдж | Автоматический deploy, smoke tests, feature flags |
| E2E / Acceptance | End‑to‑end тесты на staging | Стабильные сценарии, изолированные данные |
| Release / Deploy to prod | Промежуток релиза в прод | Canary/Blue‑Green/Rolling, мониторинг и откат |
| Monitor & Observe | Логи, метрики, алерты | SLO/SLI, автоматические тревоги, runbooks |
| Rollback / Remediation | Откат при проблемах | Быстрые откаты, автоматический rollback при failed healthchecks |