1. Основы компьютерных систем и администрирование Linux для начинающих
Основы компьютерных систем и администрирование Linux для начинающих
Когда вы нажимаете клавишу на клавиатуре или отправляете запрос к веб-сайту, под капотом запускается каскад процессов, которые превращают электрические импульсы в осмысленные данные. Для DevOps-инженера компьютер — это не просто «черный ящик», а сложная иерархия уровней абстракции: от физических транзисторов до высокоуровневых скриптов автоматизации. Понимание того, как операционная система управляет ресурсами «железа», является фундаментом, без которого невозможно построить надежную облачную инфраструктуру.
Анатомия вычислительной системы: от кремния до ядра
Любой сервер, будь то огромная стойка в дата-центре или виртуальная машина в облаке, строится на архитектуре фон Неймана. В ее основе лежат три ключевых компонента: центральный процессор (CPU), оперативная память (RAM) и устройства ввода-вывода (включая диски).
Процессор выполняет команды, но он «забывчив»: как только питание отключается, все регистры обнуляются. Оперативная память хранит данные запущенных программ, но она тоже волатильна. Для долгосрочного хранения используются накопители (HDD или SSD). Роль операционной системы (ОС) здесь заключается в том, чтобы быть посредником. Если бы программы обращались к «железу» напрямую, возник бы хаос: две программы могли бы одновременно попытаться записать данные в одну и ту же ячейку памяти.
Операционная система Linux решает эту проблему через разделение пространства на две зоны: User Space (пространство пользователя) и Kernel Space (пространство ядра).
> Ядро (Kernel) — это центральная часть операционной системы, которая имеет полный доступ ко всем ресурсам оборудования. Оно управляет памятью, распределяет процессорное время и обеспечивает взаимодействие с периферией.
Когда приложению (например, веб-серверу Nginx) нужно прочитать файл с диска, оно не лезет к контроллеру диска напрямую. Оно совершает системный вызов (syscall) к ядру. Ядро проверяет права доступа, находит файл на физическом носителе и отдает данные приложению. Это разделение критически важно для безопасности: если приложение «упадет» или попытается выполнить вредоносный код, ядро изолирует его, не дав обрушить всю систему.
Почему Linux стал стандартом индустрии
В мире DevOps Linux доминирует по нескольким причинам. Во-первых, это открытость и модульность. Вы можете собрать свою версию системы, оставив только необходимые компоненты, что критично для контейнеризации. Во-вторых, это философия «все есть файл». В Linux конфигурация сетевой карты, данные на диске и даже информация о текущем состоянии процессора представлены в виде файлов. Это позволяет инженеру управлять всей системой, используя простые текстовые инструменты.
Существует множество дистрибутивов Linux (Ubuntu, CentOS, Debian, Alpine), но их объединяет общее ядро и стандарт иерархии файловой системы (FHS). Понимание этой структуры — первый шаг к администрированию.
Иерархия файловой системы (FHS)
В отличие от Windows, где есть диски C: или D:, в Linux всё начинается с корня, обозначаемого символом /.
| Директория | Назначение |
| :--- | :--- |
| /bin и /usr/bin | Исполняемые файлы основных программ (ls, cd, cp). |
| /etc | Конфигурационные файлы системы и сервисов. Самое важное место для DevOps. |
| /var | Переменные данные: логи (журналы), базы данных, почта. |
| /home | Личные папки пользователей. |
| /root | Домашняя папка суперпользователя (администратора). |
| /proc и /sys | Виртуальные файловые системы, содержащие информацию о ядре и «железе». |
| /tmp | Временные файлы, которые обычно удаляются при перезагрузке. |
Особое внимание стоит уделить /proc. Это не настоящие файлы на диске, а «окно» в память ядра. Например, прочитав файл /proc/meminfo, вы получите актуальную информацию о состоянии оперативной памяти напрямую от системы.
Управление процессами и жизненный цикл задач
Процесс — это экземпляр запущенной программы. Когда вы вводите команду в терминале, система создает процесс, выделяет ему уникальный идентификатор (PID) и адресное пространство в памяти.
В Linux процессы организованы в виде дерева. Самым первым процессом, который запускается после загрузки ядра, является init (в современных системах это почти всегда systemd). Он имеет и является «родителем» для всех остальных процессов в системе.
Для DevOps-инженера критически важно понимать состояния процесса:
Для управления процессами используются сигналы. Самый известный — SIGKILL (команда kill -9), который заставляет ядро немедленно прекратить работу процесса. Однако более правильным считается использование SIGTERM (15), который дает программе возможность корректно закрыть файлы и сохранить состояние перед выходом.
Владение данными: права доступа и пользователи
Безопасность в Linux строится на жестком разграничении прав. Каждый файл или директория принадлежит конкретному пользователю и группе.
Права доступа делятся на три типа:
Эти права назначаются для трех категорий субъектов: владельца (user), группы (group) и всех остальных (others). В выводе команды ls -l это выглядит как строка -rwxr-xr--.
Разберем этот пример:
- означает, что это обычный файл (если d — директория).rwx — владелец может всё.r-x — группа может читать и запускать, но не менять.r-- — остальные могут только читать.В числовом эквиваленте права считаются так: . Сумма дает итоговый балл. Например, права 755 означают rwx (7) для владельца, r-x (5) для группы и r-x (5) для остальных.
> Суперпользователь root — это учетная запись с неограниченными правами. В профессиональной среде работа под root напрямую считается плохим тоном (bad practice). Вместо этого используется механизм sudo (substitute user do), который позволяет выполнять конкретные команды с привилегиями администратора, фиксируя, кто и когда их запустил.
Файловые системы и дисковые операции
Файловая система — это способ организации данных на физическом носителе. Linux поддерживает множество типов: ext4 (стандарт), XFS (хороша для больших файлов), Btrfs (поддерживает снимки/snapshots).
Важнейшее понятие здесь — инода (inode). Инода — это структура данных, которая хранит метаданные файла: размер, права доступа, даты изменения и указатели на физические блоки на диске, где лежат сами данные. Имя файла при этом не хранится в иноде — оно хранится в директории, которая по сути является таблицей соответствия «Имя файла -> Номер иноды».
Это объясняет существование жестких ссылок (hard links). Вы можете иметь два разных имени файла в разных папках, которые указывают на одну и ту же иноду. Пока существует хотя бы одна ссылка на иноду, данные на диске сохраняются.
Нюанс для DevOps: иногда диск кажется полным, хотя команда df -h показывает свободное место. Это может означать, что закончились свободные иноды (их количество фиксируется при создании файловой системы). Если вы создаете миллионы крошечных файлов, иноды закончатся раньше, чем гигабайты.
Потоки ввода-вывода и магия конвейера
Одна из причин эффективности работы в Linux — возможность комбинировать простые инструменты для решения сложных задач. Это реализуется через стандартные потоки:
С помощью оператора конвейера | (pipe) можно передать stdout одной программы на stdin другой. Например:
cat access.log | grep "404" | wc -l
Эта цепочка прочитает лог-файл, отфильтрует строки с ошибкой 404 и посчитает их количество. Для DevOps-инженера это основной способ быстрого анализа состояния систем без использования тяжелых графических интерфейсов.
Перенаправление потоков (> и >>) позволяет сохранять результаты работы в файлы:
command > file.txt — перезапишет файл.command >> file.txt — добавит данные в конец.command 2> error.log — сохранит только сообщения об ошибках.Управление пакетами и репозиториями
В отличие от домашних ОС, где программы скачиваются с сайтов разработчиков, в Linux используется система репозиториев — централизованных хранилищ проверенного ПО.
Менеджеры пакетов (APT в Ubuntu/Debian, YUM/DNF в CentOS/RHEL) решают главную проблему — зависимости. Если программа А требует для работы библиотеку Б, менеджер пакетов автоматически найдет, скачает и установит нужную версию библиотеки.
В контексте DevOps важно понимать разницу между установкой пакета и управлением сервисом. Установка просто копирует файлы. Чтобы программа начала работать как фоновая служба, используется systemctl.
Основные команды systemctl:
start: запустить сервис сейчас.enable: добавить сервис в автозагрузку при старте сервера.status: проверить, работает ли приложение и посмотреть последние строки его логов.Тонкая настройка: переменные окружения и оболочка
Когда вы вводите команду python, система должна знать, где именно на диске лежит исполняемый файл. Для этого используется переменная окружения $PATH — список директорий, в которых Linux ищет программы.
Переменные окружения — это способ передачи конфигурации процессам. Например, переменная DATABASE_URL может подсказать вашему приложению, к какой базе данных подключаться. В современных облачных системах и Docker-контейнерах использование переменных окружения является основным способом настройки приложений (согласно методологии 12-факторных приложений).
Все команды выполняются в оболочке (Shell). Самая популярная — Bash. Оболочка — это не просто командная строка, это полноценный язык программирования. Скрипты на Bash позволяют автоматизировать рутинные задачи: бэкапы, очистку логов, проверку доступности сайтов.
Граничные случаи и типичные проблемы администратора
Администрирование — это не только знание команд, но и умение диагностировать проблемы.
Случай 1: Нагрузка на CPU (Load Average).
Вы вводите команду uptime и видите три числа: 0.5, 1.2, 3.0. Это средняя нагрузка за 1, 5 и 15 минут. Что это значит? Если у вас 1-ядерный процессор, то 1.0 означает, что он загружен на 100%. 3.0 означает, что процессор перегружен, и в очереди на выполнение стоят еще два процесса. Однако на 8-ядерном сервере нагрузка 3.0 — это нормальное состояние, означающее, что занято менее половины мощностей.
Случай 2: Проблемы с памятью и OOM Killer.
Если оперативная память заканчивается, а файл подкачки (swap) переполнен, в дело вступает механизм ядра под названием Out of Memory Killer. Он анализирует процессы и «убивает» тот, который потребляет больше всего памяти и меньше всего важен для системы (часто это оказывается база данных или веб-сервер). Инженер должен уметь анализировать /var/log/syslog, чтобы понять, почему сервис внезапно исчез.
Случай 3: Дисковое переполнение и открытые дескрипторы.
Бывает ситуация: вы удалили огромный лог-файл командой rm, но место на диске не освободилось. Причина в том, что какой-то процесс (например, сервис логирования) всё еще держит этот файл открытым. В Linux файл физически удаляется только тогда, когда на него не указывает ни одно имя и ни один процесс не держит открытым его дескриптор. Решение — перезапустить процесс или очистить файл, не удаляя его (команда > file.log).
Философия автоматизации
Для DevOps-инженера Linux — это не цель, а инструмент. Главный принцип здесь: «Если вам пришлось сделать что-то вручную дважды — автоматизируйте это». Знание основ Linux позволяет писать идемпотентные скрипты — такие, которые можно запускать многократно, и они всегда будут приводить систему к нужному состоянию, не ломая её.
Понимание того, как устроены права доступа, как работают сигналы процессов и как ядро взаимодействует с оборудованием, дает возможность не просто «чинить» сервера, а проектировать системы, которые не ломаются. В следующих главах мы увидим, как эти базовые концепции переносятся в мир сетей, контейнеров и облачных вычислений, где один и тот же принцип «всё есть файл» и иерархичность процессов позволяют управлять тысячами серверов так же эффективно, как одним домашним компьютером.