DevOps

Linux для DevOps

2017 год, Amazon S3. Один инженер ввёл неправильную команду в shell - и положил S3 на 4 часа. Полинтернета перестало работать. Одна команда в терминале. Linux - мощнейший инструмент, и как любой мощный инструмент, он требует понимания.

  • **Docker** - каждый контейнер это Linux-процесс с изолированной файловой системой. Без знания Linux невозможно отлаживать контейнеры.
  • **CI/CD runners** - GitHub Actions, GitLab CI, Jenkins - все работают на Linux. Pipeline-скрипты это bash.
  • **Troubleshooting в production** - когда сервер под нагрузкой, нужны ps, top, df, grep, tail -f. GUI нет. Только терминал.
  • **Cloud-серверы** - AWS EC2, GCP, DigitalOcean - всё управляется через SSH и shell-команды

Unix: 50 лет, которые изменили мир

1969 год, Bell Labs. Ken Thompson пишет первую версию Unix за три недели, пока жена с ребёнком в отпуске. Изначально - инструмент для команды, работавшей над Space Travel game. Принцип «всё есть файл» и «маленькие утилиты, соединённые pipe» сформулирован Дугласом Макилроем. В 1991 году Линус Торвальдс публикует ядро Linux как «просто хобби» - сегодня оно работает на 96% серверов мира, всех Android-устройствах и большинстве суперкомпьютеров.

Предварительные знания

  • Что такое DevOps

Shell: командная строка как суперсила

2017 год, Amazon S3. Один инженер выполняет плановую отладку billing-системы. Опечатка в аргументе команды - и крупнейшее объектное хранилище в мире уходит в даунтайм на 4 часа. Полинтернета перестаёт работать. **Shell** - это не просто «консолька». Это прямой интерфейс к ядру ОС, где каждая команда может изменить состояние системы необратимо.

**bash** (Bourne Again Shell) - стандарт на большинстве серверов. **zsh** - популярен на macOS и для разработки. Для DevOps важнее всего bash, потому что именно он стоит в Docker-образах и CI/CD runners.

Главная суперсила Shell - **pipes** и **redirection**. Pipe `|` берёт вывод одной команды и передаёт его на вход другой. Маленькие утилиты соединяются в конвейер - каждая делает одну вещь хорошо.

**grep**, **awk**, **sed** - три мушкетёра текстовой обработки. grep ищет, awk анализирует колонки, sed заменяет текст. Вместе они решают 90% задач по парсингу логов.

Shell-скрипт начинается с **shebang**: `#!/bin/bash`. Это указание ОС, какой интерпретатор использовать. Без shebang скрипт может выполниться в другом shell и сломаться.

Что делает команда `cat access.log | grep 404 | wc -l`?

Процессы: жизнь программ в Linux

Production-сервер, CPU 100%, пользователи видят 504 Gateway Timeout. Первое, что делает опытный SRE - `ps aux` и `top`. Каждая запущенная программа в Linux - это **процесс** с уникальным **PID** (Process ID). Ядро выделяет ему память, CPU-время и файловые дескрипторы. Диагностика начинается с понимания этих примитивов.

**Сигналы** - способ общения с процессами. Самые важные: **SIGTERM** (15) - вежливая просьба завершиться, процесс может сделать cleanup. **SIGKILL** (9) - принудительное убийство, процесс не может его перехватить.

**systemd** - система инициализации и менеджер сервисов в современном Linux. Управляет запуском, остановкой, перезапуском и мониторингом демонов (фоновых процессов).

**Background processes** - запуск задач в фоне. Символ `&` запускает процесс в фоне, но он умрёт при закрытии терминала. `nohup` защищает от этого.

Процесс Node.js завис и не отвечает на SIGTERM. Что делать?

Файловая система Linux

Диск на сервере заполнен на 95% - деплой падает, логи не пишутся, база данных выдаёт ошибки. Куда смотреть в первую очередь? В Linux **всё - файл**: обычные файлы, директории, устройства, сокеты, информация о процессах. Всё в единой иерархии с корнем `/`. Знание этой карты превращает панику в план действий.

**FHS** (Filesystem Hierarchy Standard) - стандарт, определяющий, где что лежит в Linux. Все дистрибутивы следуют ему, поэтому навыки переносимы между Ubuntu, CentOS, Debian.

ПутьНазначениеDevOps-контекст
/etcКонфигурационные файлыnginx.conf, sshd_config, hosts
/var/logЛоги системы и сервисовsyslog, nginx/access.log, auth.log
/var/libДанные сервисовdocker/, postgresql/, mysql/
/tmpВременные файлы (очищается)Не хранить ничего важного!
/homeДомашние директории пользователей/home/deploy/.ssh/authorized_keys
/optСтороннее ПОЧасто размещают приложения
/usr/binОсновные программыgit, curl, node, python
/procВиртуальная FS (инфо о процессах)/proc/cpuinfo, /proc/meminfo

**Inodes** - внутренняя структура, хранящая метаданные файла (права, владельца, размер, расположение на диске). Имя файла - лишь ссылка на inode. Это объясняет, почему можно создать несколько имён (hardlinks) для одного файла.

**Mount points** - точки монтирования. В Linux нет дисков C: и D: как в Windows. Разделы и устройства монтируются в дерево файловой системы.

**Частая ловушка:** `free` показывает мало "free" памяти, и начинающие паникуют. На самом деле Linux активно использует свободную RAM для кеша (buff/cache). Смотреть на колонку **"available"** - это реально доступная память.

Сервер показывает `df -h` с 95% использованного места на /var. Где скорее всего проблема?

Права доступа и безопасность

Security-аудит. Аудитор запускает первый скрипт и сразу находит файлы с правами 777. Отчёт: критическая уязвимость. Веб-сервер скомпрометирован - конфиги изменены, SSH-ключи скопированы. Linux - многопользовательская система. Каждый файл принадлежит **пользователю** и **группе**, и имеет три набора прав: для владельца (**u**ser), группы (**g**roup) и всех остальных (**o**thers).

ЧислоПраваЗначение
7rwxЧтение + запись + выполнение
6rw-Чтение + запись
5r-xЧтение + выполнение
4r--Только чтение
3-wxЗапись + выполнение
2-w-Только запись
1--xТолько выполнение
0---Нет прав

**SUID/SGID** - специальные биты, позволяющие запускать программу с правами владельца файла. Например, `passwd` имеет SUID-бит, чтобы обычный пользователь мог менять свой пароль (который хранится в файле root).

**chmod 777 - НИКОГДА на production!** Это даёт ВСЕМ пользователям полный доступ к файлу: чтение, запись и выполнение. Любой процесс, включая взломанный веб-сервер, сможет изменить конфиги, скрипты и данные. Это первое, что проверяют при аудите безопасности.

chmod 777 решает любые проблемы с доступом к файлам - если что-то не работает, просто дай права всем

chmod 777 - серьёзная уязвимость безопасности. Права нужно выдавать минимально необходимые: владельцу - что нужно, группе - если нужно, остальным - только чтение или ничего

Principle of Least Privilege - краеугольный камень безопасности. chmod 777 означает, что ЛЮБОЙ процесс на сервере (включая взломанный веб-сервер или эксплуатируемую уязвимость) может читать, изменять и запускать файл. На production это ведёт к подмене скриптов, утечке секретов и полному компрометированию системы.

SSH-ключ имеет права 644 (rw-r--r--). SSH-клиент отказывается подключаться. Почему?

Ключевые идеи

  • **Shell** - основной интерфейс к серверам. Pipes (`|`) и redirection (`>`, `>>`) позволяют строить мощные однострочники
  • **Процессы** имеют PID, управляются сигналами (SIGTERM -> SIGKILL) и systemd для сервисов
  • **FHS** - стандартная структура: конфиги в /etc, логи в /var/log, /proc для системной информации
  • **Права доступа** rwx для user/group/others - chmod 600 для секретов, chmod 755 для скриптов
  • Аварийное отключение S3 произошло из-за одной опечатки в команде - понимание семантики каждой команды критично
  • **Принцип наименьших привилегий** - давать минимально необходимые права, никогда chmod 777 на production

Связанные темы

Linux - фундамент для всех следующих тем курса DevOps:

  • Сети для DevOps — Сетевые утилиты Linux: curl, netstat, ss, tcpdump, iptables
  • Что такое DevOps — Автоматизация из предыдущего урока строится на shell-скриптах

Вопросы для размышления

  • Подключение к production-серверу, CPU 100%. Какие команды выполнить в первую очередь и почему?
  • Почему Linux использует текстовые конфиги (/etc/nginx/nginx.conf) вместо графического интерфейса? Какие преимущества это даёт для DevOps?
  • Как организовать права доступа на сервере, где работают три команды: frontend, backend и DevOps?

Связанные уроки

  • devops-01 — Вводный урок DevOps задаёт контекст автоматизации на Linux
  • devops-03 — Сетевые утилиты Linux: curl, netstat, ss, tcpdump, iptables
  • devops-04 — Docker строится на Linux namespaces и cgroups
  • cloud-02 — Контейнеры и VM живут поверх Linux - без shell навыков не отладить
  • sec-01 — Права доступа и Principle of Least Privilege - основа security
  • devops-08 — CI/CD pipelines - это bash-скрипты на Linux runners
  • os-01-intro
  • os-21-linux-internals
Linux для DevOps

0

1

Войти