Вступление
Готовишься к собеседованию в Яндекс, VK, Сбер или другой IT-компании?
Тогда тебе нужна не просто справка по Linux, а практичная и жёстко отобранная шпаргалка, чтобы пройти техническое интервью с первого раза.
В этой статье — команды, которые реально задают в вопросах по Linux, Bash, Git, Docker, Kubernetes и безопасности. Всё чётко, по делу и на senior-уровне.
Описание поста
Эта шпаргалка создана для тех, кто хочет уверенно пройти DevOps собеседование на позицию в топовых компаниях России.
Подходит как для повторения перед собеседованием, так и для подготовки к тестам.
Команды, советы, подводные камни, безопасные удаления и что на самом деле спрашивают на интервью — всё в одном месте.
💡 DevOps - Шпаргалка
1. Основы Linux и Bash (для собеседований)
📁 Навигация по файловой системе
- pwd — показать текущую директорию (Print Working Directory)
- cd — сменить директорию
- cd .. — на уровень вверх
- cd ~ или просто cd — в домашнюю директорию
- cd / — в корень системы
- cd - — вернуться в предыдущую директорию
- ls — вывести список файлов
- ls -l — в виде таблицы
- ls -a — с учётом скрытых файлов
- ls -alt — по дате изменения, включая скрытые файлы
- realpath файл — показать абсолютный путь до файла
- basename путь — имя файла из пути
- dirname путь — директория из пути
🧪 Часто спрашивают:
Как быстро вернуться назад в предыдущую директорию?
Чем отличается ls -l от ls -a?
🗂 Работа с файлами и папками
- mkdir имя — создать папку
- mkdir -p a/b/c — создать вложенные директории
- rmdir имя — удалить пустую папку
- rm -r имя — удалить папку с содержимым (ОПАСНО)
- rm -rf имя — удалить без подтверждения (только если понимаешь, что делаешь)
- touch файл — создать пустой файл
- cp исходный целевой — скопировать файл
- cp -r папка1 папка2 — рекурсивно папку
- mv имя1 имя2 — переименовать/переместить
- rm файл — удалить файл
- rm -i файл — с подтверждением удаления
- tee файл — записать вывод команды в файл и в терминал одновременно
🧪 Часто спрашивают:
Как удалить все .pyc файлы во всей директории?
Как скопировать каталог и переименовать его?
📄 Работа с содержимым файлов
- cat файл — вывести содержимое
- less файл — постраничный просмотр (q — выход)
- head -n 10 файл — первые строки
- tail -n 10 файл — последние строки
- wc -l файл — количество строк в файле
- cut -d':' -f1 файл — вырезать поля
🔍 Поиск и фильтрация
- find . -name '*.py' — найти все .py файлы
- find . -type f -name '*.log' -delete — удалить все .log файлы
- grep 'слово' файл — поиск строк по шаблону
- grep -r 'main()' . — рекурсивный поиск
- xargs — передача аргументов команде (в связке с find/grep)
🧪 Часто спрашивают:
Как найти и удалить все пустые каталоги?
Как найти строку в нескольких файлах?
🔐 Права и доступ
- chmod 755 файл — полный доступ владельцу, чтение другим
- chmod +x скрипт.sh — сделать исполняемым
- chown user:group файл — сменить владельца
- umask — базовые права при создании новых файлов
- stat файл — подробная информация
- getfacl, setfacl — работа с ACL-правами
🛠️ Полезные команды
- man команда — руководство
- команда --help — краткая справка
- alias ll='ls -la' — создать псевдоним
- unalias ll — удалить псевдоним
- which команда — путь к бинарнику
- type команда — тип (встроенная, alias и т.п.)
- command -v — универсальный способ узнать, где лежит команда
- env, printenv — переменные окружения
- export, unset — экспорт/удаление переменных
- history, !!, !git, Ctrl+R — история команд
🧪 Часто спрашивают:
Как создать алиас, чтобы ll вызывал ls -la?
Где посмотреть переменные окружения?
⚠️ Удаление через rm и rmdir не попадает в корзину. Используй rm -i или установи trash-cli: sudo apt install trash-cli && trash-put файл
2. Git и GitHub (для собеседований)
⚙️ Базовая настройка
- git config --global user.name "Имя Фамилия" — задать имя
- git config --global user.email "you@example.com" — задать email
- git config --list — проверить текущие настройки
- git init — инициализация локального репозитория
- git clone URL — клонировать репозиторий (HTTPS или SSH)
📄 Работа с файлами
- git status — текущее состояние
- git add файл — добавить файл в индекс
- git add . / git add --all — добавить всё
- git rm --cached файл — убрать из индекса
- git commit -m "сообщение" — создать коммит
- git commit --amend -m "новое сообщение" — изменить последний коммит
🚀 Работа с удалённым репозиторием
- git remote -v — список подключений
- git push — отправить в origin по умолчанию
- git push -u origin ветка — задать ветку по умолчанию
- git pull — получить изменения
- git pull --rebase — получить изменения с rebase вместо merge
- git fetch — только забрать изменения
🌿 Ветвление и слияние
- git branch — список локальных веток
- git checkout -b имя — создать и перейти в ветку
- git switch имя — перейти (современный способ)
- git merge ветка — влить ветку в текущую
- git rebase ветка — перенести текущую ветку поверх указанной
- git mergetool — помощь в разрешении конфликтов (при наличии GUI-инструментов)
🧠 Работа с историей
- git log --oneline — краткий журнал коммитов
- git log --graph --oneline --all — визуализация истории
- git show <hash> — подробности коммита
- git diff — различия между коммитами/файлами
- git reflog — локальная история HEAD (даже после reset)
- git blame файл — кто последний редактировал строки файла
- git tag v1.0 — создать тег
- git push origin v1.0 — отправить тег
- git tag -d v1.0 — удалить локальный тег
🧰 Устранение проблем и откаты
- git reset --soft HEAD~1 — откатить коммит (оставить изменения)
- git reset --hard HEAD~1 — откатить и удалить изменения (опасно)
- git revert <hash> — создать коммит, отменяющий изменения
- git cherry-pick <hash> — перенести один коммит в текущую ветку
💼 Stash и рабочие процессы
- git stash — временно сохранить изменения
- git stash list — список сохранённых состояний
- git stash apply — применить без удаления из stash
- git stash pop — применить и удалить из stash
📘 Термины и указатели
- HEAD — текущий коммит, на который указывает рабочая директория
- HEAD~1 — предыдущий коммит
- origin/ветка — последняя известная копия ветки на сервере
- FETCH_HEAD — результат последнего fetch
🧪 Часто спрашивают на собеседованиях:
В чём разница между merge и rebase?
Как отменить последний коммит без потери изменений?
Как работать с конфликтами при слиянии?
Что такое HEAD и origin/main?
Как вытащить конкретный коммит из другой ветки?
Что делать при ошибке push? Как отменить push?
Как найти коммит, в котором была удалена строка или файл?
Что такое detached HEAD и чем он опасен?
⚠️ Используй git status, git log, git diff и git reflog перед каждым push, merge или reset — это спасёт тебя и команду от многих проблем.
3. Docker (для собеседований)
🐳 Основы работы с контейнерами
- docker --version — проверка установленной версии
- docker run hello-world — первый тестовый запуск
- docker ps -a — список всех контейнеров
- docker images — список локальных образов
- docker start/stop/restart <id|name> — управление контейнерами
- docker rm <id|name> — удалить контейнер
- docker rmi <image> — удалить образ
🧱 Образы и Dockerfile
- docker build -t имя_образа . — сборка образа из Dockerfile
- Основные инструкции Dockerfile:
- FROM, RUN, COPY, WORKDIR, EXPOSE, CMD, ENTRYPOINT
- .dockerignore — исключения из сборки (аналог .gitignore)
🌐 Сеть, тома, переменные
- docker run -p 8000:80 имя — проброс порта
- docker run -e VAR=value — переменные окружения
- docker volume ls / docker volume rm — работа с томами
🛠 Интерактив и дебаг
- docker exec -it <id> bash — доступ внутрь контейнера
- docker logs <id> — логи контейнера
- docker inspect <id> — низкоуровневая информация
- docker diff <id> — что изменилось внутри
📦 Docker Compose
- docker-compose up -d — запустить в фоне
- docker-compose down — остановить и удалить
- docker-compose logs / exec — взаимодействие с сервисами
🧪 Часто спрашивают на собеседованиях:
Чем отличается CMD от ENTRYPOINT?
Что произойдёт, если в контейнере упал основной процесс?
Как пробросить несколько портов и томов?
Как уменьшить размер образа?
Что делает флаг --rm при docker run?
Как обновить контейнер без потери данных?
⚠️ Используй alpine или distroless образы, чтобы уменьшить размер и повестку безопасности. Всегда читай docker inspect перед деплоем в прод.
4. CI/CD (GitHub Actions и GitLab CI для собеседований)
🔁 Основы CI/CD
- CI (Continuous Integration) — автоматическая сборка и проверка кода при каждом изменении
- CD (Continuous Delivery/Deployment) — автоматическая доставка на сервер или в продакшн
📦 GitHub Actions
- Конфигурация: .github/workflows/имя.yml
- Структура:
- Полезные шаги:
- actions/setup-python@v4
- actions/cache@v3
- docker/build-push-action@v5
🦊 GitLab CI
- Конфигурация: .gitlab-ci.yml
- Структура:
⚙️ Переменные окружения и секреты
- GitHub: Settings → Secrets → Actions
- GitLab: Settings → CI/CD → Variables
🧪 Часто спрашивают на собеседованиях:
Чем отличается run от uses?
Как прокэшировать зависимости между сборками?
Как безопасно хранить секреты?
Как задеплоить в Kubernetes через GitLab CI?
Как реализовать build matrix?
Что такое артефакты и как их использовать?
⚠️ В CI/CD важно следить за безопасностью: никогда не хардкодь токены, не логируй секреты. Используй переменные окружения и внешние vault-системы.
5. Kubernetes (K8s для собеседований)
☸️ Основы
- kubectl version — версии клиента и сервера
- kubectl cluster-info — информация о кластере
- kubectl get nodes/pods/services — список ресурсов
- kubectl describe pod имя — подробности по поду
- kubectl logs pod — логи пода
- kubectl exec -it pod -- bash — доступ внутрь контейнера
📦 Применение манифестов
- kubectl apply -f файл.yaml — применить конфигурацию
- kubectl delete -f файл.yaml — удалить ресурс
- kubectl get all -n имя_неймспейса — все ресурсы в namespace
📁 Основные объекты K8s
- Pod — минимальная единица исполнения
- Deployment — управляет созданием и масштабированием pod'ов
- Service — предоставляет доступ к Pod'ам (ClusterIP, NodePort, LoadBalancer)
- ConfigMap и Secret — конфигурация и чувствительные данные
- Volume и PersistentVolumeClaim — хранилище данных
🔄 Обновления и масштабирование
- kubectl scale deployment имя --replicas=3 — масштабирование
- kubectl rollout restart deployment имя — перезапуск
- kubectl rollout undo deployment имя — откат
- kubectl rollout status deployment имя — статус обновления
🧪 Часто спрашивают на собеседованиях:
Что такое Pod и чем он отличается от Deployment?
Чем отличается ConfigMap от Secret?
Что произойдёт при удалении пода вручную?
Как происходит взаимодействие Service с Pod?
Как организовать zero-downtime деплой?
Как обновить секрет без рестарта подов?
⚠️ На проде не изменяй ресурсы руками через kubectl edit, используй apply через gitops или CI/CD пайплайн. Следи за статусом rollout и логами событий: kubectl get events
6. Мониторинг и логи (для собеседований)
📈 Основные инструменты мониторинга
- Prometheus — сбор метрик (pull-модель)
- prometheus.yml — конфигурация целей
- Метрики: node_exporter, cadvisor, blackbox_exporter
- curl http://localhost:9090/metrics — ручная проверка
- Grafana — визуализация метрик
- Dashboards (JSON-конфигурации)
- Подключение источников: Prometheus, Loki, PostgreSQL
- Alerts: rule-based оповещения
- Alertmanager — маршрутизация алертов из Prometheus
- Поддерживает email, Slack, Telegram, Webhook и др.
📄 Работа с логами
- journalctl -xe — просмотр системных логов
- docker logs контейнер — логи контейнера
- kubectl logs pod — логи пода
- tail -f лог — просмотр последних строк лога в реальном времени
- logrotate — автоматическая ротация и архивирование логов
🧪 Стек Loki + Promtail + Grafana
- Loki — лог-агрегатор от Grafana Labs (аналог ELK, но без Elasticsearch)
- Promtail — агент для сбора логов и отправки в Loki
- Преимущества: дешёвое хранение, встроенная интеграция с Grafana, PromQL-подобный язык запросов
🧠 Альтернативы и дополнения
- ELK Stack: Elasticsearch + Logstash + Kibana
- Fluent Bit / Fluentd — прокси для логов
- Vector.dev — лёгкий агент логирования и трансформаций
🧪 Часто спрашивают на собеседованиях:
Чем отличаются метрики от логов?
В чём разница push и pull модели мониторинга?
Как настроить алерты в Grafana или Prometheus?
Как посмотреть логи приложения в Kubernetes?
Что выбрать: Loki или ELK? Почему?
⚠️ Хороший мониторинг — это не только графики, но и оповещения. Без Alertmanager или Telegram-бота DevOps узнаёт о падении сервиса последним.
7. Безопасность DevOps-инфраструктуры (для собеседований)
🔐 SSH и удалённый доступ
- ssh-keygen — генерация ключей (id_rsa / id_ed25519)
- ssh-copy-id user@host — копирование публичного ключа на сервер
- chmod 600 ~/.ssh/id_rsa — защита приватного ключа
- ~/.ssh/config — удобная настройка алиасов для хостов
- Fail2ban — защита от brute-force атак по SSH
🛡️ Права и ограничения
- chmod, chown, umask — управление доступами
- sudo, /etc/sudoers, visudo — управление правами root-доступа
- setfacl, getfacl — расширенные списки прав (ACL)
- Ограничение команд через rbash, chroot, AppArmor, SELinux
🧱 Секреты и переменные окружения
- .env файлы — использовать вместе с dotenv или переменными окружения
- Хранение секретов:
- GitHub Secrets
- GitLab CI/CD Variables
- AWS Secrets Manager / HashiCorp Vault / Yandex Lockbox
- Никогда не хардкодь токены/ключи в Git-репозитории
🔐 Сетевые уровни защиты
- ufw, iptables, firewalld — настройка файрвола
- VPN (WireGuard / OpenVPN) для закрытых окружений
- Разделение доступа: bastion-хосты, jump-сервера
🔍 Безопасность в CI/CD
- Не логируй секреты (используй ::add-mask:: в GitHub Actions)
- Используй read-only токены
- Подпись коммитов: git commit -S + GPG
- Проверяй зависимости: snyk, trivy, grype, pip-audit
🧪 Часто спрашивают на собеседованиях:
Как ограничить доступ к продакшн-секретам?
Что такое SSH agent forwarding и чем он опасен?
Как ограничить права пользователя при запуске CI Job?
Как проверить, не утекают ли секреты в Git?
Как выбрать между Vault, KMS, .env?
⚠️ Безопасность — не фича, а настройка по умолчанию. Всё, что может быть скомпрометировано, будет. Автоматизируй аудит, не доверяй по умолчанию, логируй доступы и контролируй границы.
🏁 Заключение:
Если эта статья окажется полезной и наберёт просмотры, я подготовлю серию продолжений, предлагайте темы и ваши идеи.
📌 Подписывайся, чтобы не пропустить.