Цикл Junior DevOps. Часть 2. Roadmap DevOps, Linux, Bash

от автора

Часть 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 умеет гораздо больше и важнее.

Он позволяет писать небольшие программы — скрипты, которые автоматизируют рутинные действия.


Что такое скрипт?

Представьте, что каждое утро вам необходимо выполнить одни и те же действия:

  1. обновить систему;

  2. очистить временные файлы;

  3. создать резервную копию;

  4. проверить свободное место;

  5. перезапустить веб-сервер.

Можно выполнять их вручную.

А можно записать один текстовый файл:

#!/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

https://linuxjourney.com/

Бесплатный интерактивный курс по 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

https://explainshell.com/

Очень полезный сервис для новичков. Достаточно вставить любую Linux-команду, и сервис подробно объяснит назначение каждого параметра.

ShellCheck

https://www.shellcheck.net/

Онлайн-анализатор 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/