Системное администрирование Linux: от основ до Junior System Administrator

Комплексный курс по подготовке системных администраторов Linux, охватывающий архитектуру системы, сетевые технологии, безопасность и автоматизацию. Программа ориентирована на получение практических навыков для управления серверной инфраструктурой предприятия.

1. Введение в архитектуру Linux и фундаментальные навыки работы в командной строке

Введение в архитектуру Linux и фундаментальные навыки работы в командной строке

В 1991 году Линус Торвальдс, тогда еще студент Хельсинкского университета, отправил в почтовую рассылку сообщение о том, что он делает «просто хобби, нечто не такое большое и профессиональное, как GNU». Сегодня это «хобби» управляет 100% самых мощных суперкомпьютеров мира, подавляющим большинством веб-серверов и облачных инфраструктур. Почему система, созданная энтузиастом, вытеснила коммерческие гиганты? Ответ кроется в её архитектурной прозрачности и беспрецедентной власти, которую она дает администратору через командную строку.

Анатомия системы: от «железа» до пользователя

Чтобы эффективно управлять Linux, нужно понимать, как распределяются роли внутри операционной системы. Представьте структуру Linux как луковицу, где каждый слой изолирует сложность предыдущего.

Ядро (Kernel)

Ядро — это сердце системы. Оно является единственным посредником между аппаратным обеспечением (CPU, RAM, диски) и программным обеспечением. Ядро Linux относится к типу монолитных. Это означает, что основные функции (управление памятью, планировщик процессов, драйверы устройств) работают в едином адресном пространстве.

Ключевые задачи ядра:

  • Управление процессами: Решает, какая программа получит доступ к процессору и на какое время.
  • Управление памятью: Выделяет виртуальное адресное пространство для приложений, следя, чтобы одна программа не «залезла» в данные другой.
  • Драйверы устройств: Обеспечивает абстракцию «железа». Для прикладного программиста неважно, какой марки стоит SSD — ядро предоставляет стандартный интерфейс для записи данных.
  • Системные вызовы (Syscalls): Это единственный легальный способ для программы попросить что-то у ядра (например, открыть файл или создать сетевое соединение).
  • Окружение (Shell и User Space)

    Поверх ядра находится пользовательское пространство (User Space). Здесь живут библиотеки (например, glibc) и оболочки (Shell). Оболочка — это интерпретатор команд, который принимает ввод от пользователя, преобразует его в системные вызовы и возвращает результат.

    Важно понимать: Linux — это только ядро. То, что мы привыкли называть «операционной системой Linux», корректнее называть GNU/Linux, так как большинство базовых утилит (ls, cp, grep) были созданы в рамках проекта GNU.

    Философия UNIX: «Делай что-то одно, но делай это хорошо»

    Администрирование Linux строится на нескольких фундаментальных принципах, унаследованных от UNIX. Понимание этих догм избавляет от попыток искать в Linux логику Windows или macOS.

  • Все есть файл: Это самая мощная концепция. Текст в документе — файл. Жесткий диск — файл (/dev/sda). Клавиатура — файл. Даже текущие настройки ядра представлены в виде файлов в виртуальных директориях /proc и /sys. Это позволяет использовать одни и те же инструменты для манипуляции данными, устройствами и сетевыми потоками.
  • Маленькие специализированные утилиты: Вместо одного комбайна «для всего» в Linux сотни мелких программ. Утилита cat просто выводит содержимое файла, grep — ищет строки, sort — сортирует.
  • Конвейеры (Pipes): Возможность соединять эти маленькие утилиты в цепочки. Вывод одной программы становится вводом для другой. Это превращает командную строку в конструктор, где вы можете собрать решение любой сложности «на лету».
  • Конфигурация в текстовом виде: В Linux почти нет бинарных реестров. Настройки системы хранятся в обычных текстовых файлах. Это делает систему переносимой, прозрачной для аудита и легкой для автоматизации через скрипты.
  • Командная строка: интерфейс профессионала

    Для обычного пользователя GUI (графический интерфейс) удобен, но для администратора он — препятствие. Командная строка (CLI) обеспечивает:

  • Скорость: Набрать apt install nginx быстрее, чем искать кнопку в магазине приложений.
  • Воспроизводимость: Команду можно скопировать в инструкцию или скрипт.
  • Удаленный доступ: Протокол SSH позволяет управлять сервером на другом конце света через текстовый терминал, потребляя минимум трафика.
  • Структура команды

    Почти любая команда в Linux следует шаблону: command -options arguments

    Например: ls -la /var/log

  • ls — имя программы (list).
  • -la — опции (флаги). -l (long) включает подробный вывод, -a (all) показывает скрытые файлы.
  • /var/log — аргумент, указывающий, содержимое какой папки мы хотим увидеть.
  • Навигация и базовые операции

    Работа в терминале начинается с понимания того, где вы находитесь. В Linux нет «Диска C:» или «Диска D:». Все начинается с корня, обозначаемого символом /.

    Пути: абсолютные и относительные

  • Абсолютный путь всегда начинается от корня: /home/user/documents/report.txt. Он уникален и работает из любой точки системы.
  • Относительный путь строится от вашей текущей позиции. Если вы уже в /home/user, то путь к файлу будет просто documents/report.txt.
  • Специальные обозначения:

  • . (точка) — текущая директория.
  • .. (две точки) — родительская директория (уровень выше).
  • ~ (тильда) — домашняя директория текущего пользователя.
  • Основной инструментарий

  • pwd (Print Working Directory) — «Где я?». Выводит полный путь к текущей папке.
  • cd (Change Directory) — Перемещение. cd /etc перенесет вас в папку с конфигами, а cd .. — на уровень вверх.
  • ls — Просмотр содержимого. Рекомендую всегда использовать ls -F (добавляет символы типов файлов) или ls -lh (делает размеры файлов читаемыми, например, 2K, 15M).
  • mkdir (Make Directory) — Создание папок. Опция -p (parents) позволяет создать целое дерево: mkdir -p project/src/tests.
  • touch — Создание пустого файла или обновление времени его изменения.
  • cp (Copy) и mv (Move) — Копирование и перемещение. Важно: mv также используется для переименования файлов.
  • rm (Remove) — Удаление. В Linux нет «Корзины». Удаленный файл через rm исчезает навсегда (если вы не используете сложные инструменты восстановления). Команда rm -rf (recursive, force) — это «ядерный вариант», удаляющий папку со всем содержимым без лишних вопросов.
  • Работа с текстовой информацией

    Поскольку «все есть файл» и конфиги текстовые, администратор Linux 80% времени проводит за чтением и правкой текста.

    Просмотр файлов

  • cat — вываливает весь текст в терминал. Плохо подходит для больших файлов.
  • less — «умный» просмотрщик. Позволяет листать файл вверх-вниз (стрелками), искать по нему (клавиша /) и выходить без засорения экрана (клавиша q).
  • head и tail — показывают первые или последние 10 строк. tail -f /var/log/syslog — незаменимый инструмент, который в реальном времени отображает новые строки, записываемые в лог-файл.
  • Редактирование: Nano vs Vi/Vim

    В каждой системе Linux есть как минимум один текстовый редактор.
  • Nano: Простой, интуитивный. Подсказки по горячим клавишам всегда внизу экрана (символ ^ означает клавишу Ctrl).
  • Vim: Мощный, но сложный. У него есть «режимы». По умолчанию вы в командном режиме (нельзя печатать текст). Нажмите i (insert), чтобы начать писать. Чтобы выйти, нажмите Esc, введите :wq (write and quit) и нажмите Enter. Знание базового Vim обязательно, так как он гарантированно есть на любом сервере, даже в режиме восстановления.
  • Потоки данных и перенаправление

    Это магия, которая делает командную строку Linux полноценным языком программирования. У каждого процесса есть три стандартных потока:

  • stdin (0): Стандартный ввод (обычно клавиатура).
  • stdout (1): Стандартный вывод (экран).
  • stderr (2): Стандартный поток ошибок (тоже экран, но отдельный канал).
  • Операторы перенаправления

  • > — Перенаправить вывод в файл (старое содержимое удалится).
  • ls /etc > configs.txt — список файлов запишется в файл.
  • >> — Добавить вывод в конец файла.
  • 2> — Перенаправить только ошибки.
  • find / -name "secret" 2> /dev/null — искать файл и не показывать в терминале ошибки доступа (отправлять их в «черную дыру» /dev/null).
  • | (Pipe/Конвейер) — Передать вывод одной команды на вход другой.
  • cat /etc/passwd | grep "root" — прочитать файл и отфильтровать только строки, содержащие "root".

    Справочная система: как не заучивать всё

    Ни один системный администратор не помнит все флаги всех команд. Главный навык — умение пользоваться встроенной справкой.

    Команда man (Manual)

    Это «библия» Linux. Введите man ls, и вы получите исчерпывающую документацию. Структура man-страниц разделена на секции:
  • Секция 1: Пользовательские команды.
  • Секция 5: Форматы файлов (например, man 5 passwd расскажет о структуре файла /etc/passwd, а не о команде смены пароля).
  • Секция 8: Команды системного администрирования.
  • Если вы не знаете точное имя команды, используйте man -k keyword (или apropos keyword). Система найдет все страницы, где упоминается это ключевое слово.

    Другие источники

  • --help: Большинство утилит поддерживают этот флаг для краткой справки по опциям.
  • info: Более современная и гипертекстовая замена man, часто используемая в проектах GNU.
  • type: Помогает понять, является ли команда встроенной в оболочку (builtin), внешней программой или алиасом (псевдонимом).
  • Управление правами и концепция Superuser

    В Linux строгая иерархия. Обычный пользователь не может сломать систему, потому что у него нет прав на запись в системные директории. Но администратору эти права нужны.

    Root — всемогущий пользователь

    Пользователь с UID (User ID) равным называется root. Он может всё: удалить любой файл, остановить любой процесс, изменить настройки ядра. Работа под root постоянно — плохая практика (одна опечатка в rm -rf может уничтожить сервер).

    sudo (SuperUser DO)

    Это механизм, позволяющий обычному пользователю выполнять команды с привилегиями root. sudo apt update — система спросит ваш пароль, проверит, есть ли вы в списке разрешенных лиц (файл /etc/sudoers), и выполнит команду от имени суперпользователя.

    Практические нюансы работы в терминале

    Освоение CLI — это не только знание команд, но и владение «горячими клавишами», которые экономят часы времени.

  • Tab-completion: Начните вводить имя файла или команды и нажмите Tab. Система допишет его сама. Если вариантов несколько — нажмите Tab дважды. Это не только быстро, но и защищает от опечаток.
  • История команд: Клавиши «Вверх» и «Вниз» листают историю. Команда history выведет список всех последних действий. Чтобы быстро найти команду из прошлого, нажмите Ctrl + R и начните вводить её часть.
  • Управление экраном: Ctrl + L очищает экран (аналог команды clear).
  • Прерывание процесса: Ctrl + C немедленно останавливает текущую команду.
  • Переменные окружения и оболочка Bash

    Когда вы вводите ls, система не ищет её по всему диску. Она заглядывает в специальную переменную окружения USER — имя текущего пользователя.

  • SHELL — путь к текущей оболочке.
  • Вы можете создавать свои переменные: MY_VAR="Hello", и обращаться к ним через знак доллара: echo $MY_VAR. Это основа для будущей автоматизации и написания скриптов.

    Архитектура загрузки (коротко)

    Чтобы понимать, как система оживает, нужно знать этапы загрузки:

  • BIOS/UEFI: Проверяет «железо» и ищет загрузчик.
  • Bootloader (обычно GRUB): Позволяет выбрать ядро и передает ему управление.
  • Kernel: Инициализирует драйверы и монтирует корневую файловую систему.
  • Init-система (обычно systemd): Самый первый процесс в системе (PID 1). Он запускает все остальные службы (сеть, графику, веб-серверы).
  • Если на этапе 3 или 4 что-то пойдет не так, администратор должен уметь войти в режим восстановления, используя навыки навигации и редактирования файлов, которые мы разобрали.

    Границы ответственности администратора

    Становление Junior System Administrator начинается с принятия ответственности за систему. Linux не будет мешать вам совершить ошибку. Если вы скомандуете системе стереть саму себя, она начнет это делать, пока не удалит файлы, необходимые для работы самой команды удаления.

    Поэтому золотое правило: сначала читай, потом нажимай Enter. Используйте man, проверяйте пути с помощью ls, прежде чем запускать rm, и всегда делайте резервные копии конфигурационных файлов перед правкой (например, cp config.conf config.conf.bak).

    В следующей главе мы детально разберем иерархию файловой системы (FHS) и научимся управлять правами доступа на уровне владельцев и групп, что является фундаментом безопасности любой Linux-системы.