Часть 2. Roadmap DevOps: что изучать, зачем и в каком порядке
В первой части мы разобрались, кто такой DevOps-инженер, чем он занимается и почему эта профессия — не про знание десятков инструментов, а про понимание того, как работает современная инфраструктура.
Теперь возникает главный вопрос:
С чего начать?
Достаточно открыть вакансию или почти любой roadmap DevOps, чтобы увидеть несколько десятков технологий: Linux, Git, Docker, Kubernetes, Terraform, Ansible, Prometheus, Grafana, AWS, Nginx, Jenkins…
Для новичка такой список выглядит скорее пугающе, чем полезно. Кажется, что нужно изучить всё и сразу.
Одни начинают с Kubernetes, потому что это один из самых обсуждаемых инструментов в индустрии. Другие сразу переходят к Docker, не понимая, как работает Linux. Кто-то пытается изучать Terraform, практически не имея опыта администрирования серверов.
В результате обучение превращается в попытку построить дом, начиная с крыши.
Получается обратная пирамида знаний.
Поэтому в этой статье мы попробуем построить фундамент, на который в дальнейшем будут опираться все остальные технологии.
Почему Linux, а не Windows
У многих может возникнуть логичный вопрос:
Если большинство пользователей работают и используют Windows, зачем и почему используют Linux?
Ответ прост.
Домашний компьютер и сервер решают совершенно разные задачи.
Настольная операционная система должна быть удобной для повседневной работы: запускать программы, воспроизводить видео, обеспечивать комфортный графический интерфейс.
Сервер, напротив, должен работать круглосуточно, стабильно выдерживать высокую нагрузку, легко администрироваться удалённо и потреблять минимум ресурсов.
Именно под такие задачи изначально развивался Linux.
Сегодня Linux используется практически во всех областях современной серверной инфраструктуры:
-
веб-серверы;
-
облачные платформы;
-
контейнерные платформы;
-
системы хранения данных;
-
суперкомпьютеры;
-
корпоративные дата-центры.
По данным проекта TOP500, все 500 самых производительных суперкомпьютеров мира работают под управлением Linux. Кроме того, Linux доминирует среди серверных операционных систем и является основной платформой для большинства облачных сервисов и контейнерных технологий.

Когда вы открываете сайт интернет-магазина, пользуетесь банковским приложением или запускаете сервис потокового видео, очень велика вероятность, что запрос обрабатывает сервер именно под Linux.
Поэтому DevOps практически ежедневно взаимодействует именно с этой операционной системой.
Почему Linux изучают раньше Docker и Kubernetes
Ведь в вакансиях гораздо чаще встречаются Docker и Kubernetes, чем обычные Linux.
Причина довольно проста.
Контейнеры Docker используют механизмы ядра Linux: пространства имён (namespaces), контроль групп процессов (cgroups), файловые системы и другие возможности операционной системы.
Kubernetes, в свою очередь, не запускает приложения самостоятельно — он управляет контейнерами, которые уже работают благодаря этим механизмам.
Именно поэтому понимание Linux значительно упрощает изучение контейнеризации.
Что действительно нужно изучить в Linux?
Одна из самых распространённых ошибок новичков — попытка выучить сотни команд ещё до первой практики.
На самом деле это не требуется.
Даже опытные системные администраторы регулярно пользуются справочной документацией и поиском.
Гораздо важнее понимать принципы работы операционной системы и уверенно ориентироваться в наиболее часто используемых инструментах.
Для Junior DevOps достаточно уверенно владеть следующими темами.
1. Файловая система
Первое, с чем приходится сталкиваться практически каждый день, — файловая система Linux.
Важно понимать:
-
как устроено дерево каталогов;
-
где располагаются пользовательские файлы;
-
где находятся журналы работы системы;
-
где хранятся конфигурационные файлы приложений.
Многие проблемы решаются уже на этапе поиска нужного файла или конфигурации.
2. Работа с файлами
Практически любая задача DevOps связана с файлами.
Каждый день приходится:
-
создавать файлы и каталоги;
-
копировать и перемещать данные;
-
искать нужные документы;
-
архивировать резервные копии;
-
удалять временные файлы.
Поэтому уверенная работа с файловой системой становится одним из базовых навыков.
3. Пользователи и права доступа
Linux — многопользовательская система.
На одном сервере одновременно могут работать несколько пользователей и десятки процессов.
Поэтому важно понимать:
-
кто имеет доступ к файлам;
-
кто может запускать программы;
Корректная настройка прав — одна из основ безопасности.
4. Процессы
Любая запущенная программа представляет собой процесс.
Например:
-
веб-сервер;
-
база данных;
-
Docker Engine;
-
SSH-сервер.
Если приложение перестало отвечать, одна из первых задач DevOps — выяснить, работает ли соответствующий процесс и не завершился ли он с ошибкой.
5. Службы (Services)
Некоторые программы должны запускаться автоматически после включения сервера.
Например:
-
базы данных;
-
Docker Engine.
Такие программы называются службами или сервисами.
DevOps должен уметь:
-
запускать их;
-
останавливать;
-
перезапускать;
-
проверять их состояние.
6. Логи
Практически каждая программа ведет журнал своей работы.
Такой журнал называется логом.
Именно логи помогают понять:
-
почему приложение завершилось;
-
какая ошибка произошла;
-
что произошло перед сбоем.
Если опытного DevOps спросить, с чего начинается поиск любой проблемы, ответ почти всегда будет одинаковым:
«Сначала открываем логи.»
7. SSH и сети
После того как вы научились работать с локальной системой, пора переходить к удалённому администрированию.
Практически ни один DevOps-инженер не работает непосредственно за сервером. Вместо этого используется SSH (Secure Shell) — протокол, позволяющий безопасно подключаться к удалённым Linux-серверам через терминал.
Не менее важно понимать и основы компьютерных сетей.
Для Junior DevOps не требуется проектировать сложную сетевую инфраструктуру, однако необходимо уверенно разбираться в базовых понятиях:
-
IP-адрес;
-
порт;
-
DNS;
-
HTTP и HTTPS;
-
SSH;
-
маршрутизация на базовом уровне.
Именно эти знания позже понадобятся при работе с Docker, Kubernetes, облачными платформами и практически любым современным серверным приложением.
Нужно ли устанавливать Linux как основную систему?
Нет, для практики существует много вариантов.
Для практики можно использовать:
-
виртуальную машину (например, в VirtualBox);
-
Windows Subsystem for Linux (WSL);
-
облачный VPS;
-
интерактивные лаборатории и песочницы(tryhackme, labex. killercoda);
-
отдельный компьютер с установленным Linux.
Главное — не способ установки, а регулярная практика.
Основное правило остается неизменным:
Linux невозможно выучить по видео.
Можно посмотреть десятки часов лекций, выучить названия команд и прочитать несколько книг. Но пока вы не начнёте ежедневно пользоваться терминалом, создавать файлы, искать ошибки в логах и настраивать систему самостоятельно, знания останутся только теоритическими.
Именно практика превращает набор команд в реальные навыки.
Почему DevOps работает в терминале
Наверное, многие видели DevOps-инженеров с черным окном терминала.

Это не элемент «хакерской эстетики».
Большинство серверов и некоторое программное обеспечение вообще не имеет графического интерфейса.
Это сделано сразу по нескольким причинам:
-
экономия оперативной памяти и процессорного времени;
-
повышение безопасности;
-
снижение количества лишних компонентов;
-
удобство удалённого администрирования.
Поэтому основным инструментом DevOps становится терминал.
Терминал — это программа, позволяющая отправлять текст, командной оболочке, которая будет инпретировать текст.
Командная оболочка (shell) — это программа-посредник между пользователем и операционной системой. Она принимает введённые вами команды, понимает их и выполняет, обращаясь к ядру операционной системы.
Каждая команда выполняет определенное действие:
-
показ содержимого каталога;
-
создание файла;
-
удаление папки;
-
проверка свободного место;
-
поиск ошибки в логах работы системы.
Со временем терминал становится для DevOps примерно тем же, чем IDE является для разработчика.
Bash — первый шаг к автоматизации
После того как вы научились уверенно работать в Linux, следующий логичный этап — изучение Bash.
Именно здесь многие начинают понимать, почему DevOps называют инженерами по автоматизации.
Если Linux отвечает на вопрос «где и как работает система?», то Bash отвечает на вопрос «как сделать так, чтобы компьютер выполнял работу за меня?»
Что такое Bash?
Bash (Bourne Again SHell) — одна из самых популярных командных оболочек для Linux и Unix-подобных систем.
Кроме Bash существуют:
-
Zsh;
-
Fish;
-
Dash;
-
PowerShell (Windows).
Но именно Bash остается стандартом практически на всех Linux-серверах.
На первый взгляд это просто программа, которая принимает команды пользователя и передает их операционной системе.
Например, когда вы вводите:
ls
именно Bash получает эту команду, запускает соответствующую программу и выводит результат.
Но на самом деле Bash умеет гораздо больше и важнее.
Он позволяет писать небольшие программы — скрипты, которые автоматизируют рутинные действия.
Что такое скрипт?
Представьте, что каждое утро вам необходимо выполнить одни и те же действия:
-
обновить систему;
-
очистить временные файлы;
-
создать резервную копию;
-
проверить свободное место;
-
перезапустить веб-сервер.
Можно выполнять их вручную.
А можно записать один текстовый файл:
#!/bin/bashsudo apt updatesudo apt upgrade -ysystemctl restart nginx...
Такой файл называется Bash-скриптом.
После этого вся последовательность действий выполняется одной командой.
Именно это и называется автоматизацией.
Почему Bash важен для DevOps?
Практически вся работа DevOps строится вокруг повторяющихся операций.
Например:
-
проверить работу сервисов;
-
собрать логи;
-
обновить несколько серверов;
-
сделать резервную копию базы данных;
-
очистить старые файлы;
-
проверить использование памяти.
Все это можно выполнять вручную.
Но представьте, что серверов уже не один, а пятьдесят.
Или двести.
Или тысяча.
Вручную выполнять такие операции становится невозможно.
Поэтому DevOps старается автоматизировать всё, что повторяется регулярно.
Нужно ли учиться писать большие программы?
Нет.
Это распространенное заблуждение.
Большинство Bash-скриптов занимают всего несколько десятков строк.
Обычно они делают одну конкретную задачу:
-
проверяют наличие файла;
-
перезапускают сервис;
-
отправляют уведомление;
-
архивируют данные;
-
создают пользователя;
-
собирают информацию о системе.
Чем проще скрипт, тем легче его сопровождать.
Что нужно изучить Junior DevOps?
Не стоит пытаться освоить Bash целиком.
Достаточно уверенно владеть несколькими базовыми конструкциями, которые встречаются практически в каждом скрипте.
Переменные
Позволяют хранить данные.
Например, можно сохранить имя пользователя.
#!/bin/bashUSER_NAME="name_surname"echo "Добро пожаловать, $USER_NAME!"
Условия
Иногда сценарий должен принимать решение самостоятельно.
Например, проверить существование файла
.
#!/bin/bashFILE="backup.tar.gz"if [ -f "$FILE" ]; then echo "Файл найден."else echo "Файл отсутствует."fi
Циклы
Циклы позволяют выполнять одну и ту же операцию сразу для нескольких объектов.
Например, проверить несколько каталогов.
#!/bin/bashfor DIR in /home /etc /vardo echo "Проверяем каталог: $DIR"done
Функции
Если один и тот же код приходится использовать несколько раз, его обычно выносят в функцию.
Например: функция приветствия
#!/bin/bashhello() { echo "Добро пожаловать в Bash!"}
Функции делают код более понятным, позволяют избежать дублирования и значительно упрощают сопровождение больших скриптов.
Конвейеры (Pipelines)
Одной из самых сильных сторон Linux является возможность объединять несколько программ в единую цепочку.
Для этого используется символ |, который называется конвейером (pipe).
Рассмотрим простой пример . Поиск «ERROR» в файле «system.log» и запись результатов в «errors.log«
#!/bin/bashgrep "ERROR" system.log >> errors.log
Перенаправление вывода
По умолчанию большинство программ выводит результат прямо в терминал.
Однако нередко требуется сохранить этот результат. К примеру, в файл
Для этого используется оператор >.
ls > files.txt
После выполнения команды список файлов окажется в файле files.txt.
Если файл уже существует, его содержимое будет полностью заменено.
Если же необходимо добавить данные в конец файла, используется оператор >>.
Например, сохраним найденные ошибки в журнал.
grep "ERROR" system.log >> errors.log
Теперь каждое выполнение команды будет добавлять новые записи в конец файла, сохраняя предыдущие результаты.
Когда становится недостачно Bash?
Это один из самых частых вопросов новичков.
Хорошее правило выглядит так.
Если задача связана с Linux, файлами, службами или запуском команд — почти всегда достаточно Bash.
Если появляется сложная логика, работа с API, JSON, большими объемами данных или необходимо написать полноценную утилиту — обычно удобнее использовать Python.
Как понять, что Bash уже освоен?
Если вы можете самостоятельно написать небольшой скрипт, который:
-
устанавливает необходимые пакеты;
-
создает пользователей;
-
проверяет состояние системы;
-
сохраняет логи;
-
перезапускает сервисы;
-
выполняет резервное копирование,
значит, вы уже достигли уровня, которого обычно достаточно для Junior DevOps.
Материалы для самостоятельного изучения
За годы существования Linux, Bash и DevOps появилось огромное количество книг, курсов и документации. Новичку легко потеряться в этом разнообразии.
Я рекомендую начать с нескольких проверенных ресурсов. Их вполне достаточно, чтобы получить прочную базу и постепенно перейти к следующим этапам roadmap.
Linux
https://training.linuxfoundation.org/training/introduction-to-linux/
Linux Journey
Бесплатный интерактивный курс по Linux. Отлично подходит для новичков: объясняет устройство операционной системы, работу терминала, файловую систему, процессы, пользователей и сетевые команды.
The Linux Command
https://linuxcommand.org/tlcl.php
Бесплатная книга Уильяма Шоттса. Несмотря на возраст, остается одной из лучших книг по командной строке Linux.
Ubuntu Documentation
https://documentation.ubuntu.com/
Официальная документация Ubuntu. Полезна как справочник и источник актуальной информации.
OverTheWire: Bandit
https://overthewire.org/wargames/bandit/
Практический курс в формате игры. Каждое задание помогает освоить новые команды Linux и научиться работать в терминале.
Bash
GNU Bash Manual
https://www.gnu.org/software/bash/manual/
Официальная документация Bash. На первых этапах читать её полностью необязательно, но стоит знать, где искать ответы на возникающие вопросы.
Bash Guide
https://mywiki.wooledge.org/BashGuide
Одно из лучших практических руководств по Bash. Многие темы объясняются значительно проще, чем в официальной документации.
ExplainShell
Очень полезный сервис для новичков. Достаточно вставить любую Linux-команду, и сервис подробно объяснит назначение каждого параметра.
ShellCheck
Онлайн-анализатор Bash-скриптов. Находит ошибки, предупреждает о потенциальных проблемах и помогает писать более качественный код.
Компьютерные сети
Cisco
https://www.netacad.com/courses/all-courses
Бесплатные курсы Cisco по основам компьютерных сетей, Linux и кибербезопасности.
Cloudflare Learning Center
https://www.cloudflare.com/learning/
Библиотека статей о том, как работают HTTP, HTTPS, DNS, CDN, SSL/TLS и другие технологии, с которыми регулярно сталкивается DevOps-инженер.
Practical Networking
https://www.practicalnetworking.net/
Пожалуй, один из лучших сайтов для изучения сетей простым языком. Особенно хорошо объясняются темы IP, маршрутизации, DNS и TCP/IP.
Что дальше?
Следующим логичным этапом станет Git — система контроля версий, без которой невозможно представить современную разработку и DevOps-процессы. Именно ей будет посвящена следующая часть серии.
.
ссылка на оригинал статьи https://habr.com/ru/articles/1055840/