Когда мы нажимаем кнопку питания на компьютере, до появления приглашения ввода логина проходит несколько этапов. Каждый из них решает свою задачу: проверка железа, поиск загрузчика, запуск ядра и подготовка пользовательской среды.
1. BIOS/UEFI: старт системы
После включения процессор начинает выполнять код встроенной прошивки материнской платы - BIOS или UEFI.
Прошивка выполняет самотест (POST), инициализирует базовые устройства (оперативная память, контроллеры, видеосистема) и по настройкам выбирает загрузочное устройство: диск, флешку, сетевую карту и т.д.
Основная задача этого этапа - подготовить железо и найти, откуда загружать операционную систему.
2. MBR/GPT: первая стадия загрузки
В начале диска находится область, отвечающая за разметку и начальный код загрузки:
MBR (Master Boot Record) - классическая схема, занимает первые 512 байт диска.
GPT (GUID Partition Table) - современная схема, логически отделяет таблицу разделов и код загрузки.
В этой области лежит крошечный фрагмент кода - первая стадия загрузчика. Его возможности ограничены: он только считывает таблицу разделов и находит место, где расположена "вторая стадия" полноценного загрузчика (обычно на разделе /boot).
3. Загрузчик (GRUB/LILO): выбор и запуск ядра
Дальше управление получает загрузчик второго этапа - чаще всего GRUB.
Он уже умеет работать с файловыми системами и конфигурационными файлами.
Типичные задачи загрузчика:
Показать меню с вариантами загрузки (разные ядра, режим восстановления, другие ОС).
По выбору пользователя загрузить в память образ ядра Linux и initramfs (initial RAM filesystem).
Передать управление загруженному ядру.
В системах с dual‑boot GRUB может не только загружать Linux, но и "передавать эстафету" загрузчику Windows (chainloading).
4. initramfs: временная файловая система в памяти
После загрузки в память ядро получает вместе с ним образ initramfs - это небольшая файловая система, расположенная в оперативной памяти.
Зачем она нужна:
На "настоящем" корневом разделе (/) лежат драйверы и модули, но чтобы его смонтировать, эти драйверы уже должны быть доступны.
initramfs решает эту проблему, предоставляя ядру временный root с необходимыми модулями, скриптами и утилитами.
Типичный сценарий работы initramfs:
Ядро монтирует initramfs как временную корневую файловую систему и запускает из неё скрипт /init.
После нахождения и монтирования «настоящего» root выполняется переход (switch_root/pivot_root) на него, и система готова стартовать основную init‑систему.
По сути initramfs - одноразовая мини‑система, которая существует только во время старта и "исчезает" после перехода на основной root.
5. Ядро Linux: инициализация системы
Получив управление от загрузчика, ядро распаковывает себя, настраивает планировщик, управление памятью, систему прерываний и загружает драйверы устройств.
На этом этапе формируется базовый программный "скелет" системы: ядро уже умеет работать с устройствами и файловыми системами и готово запускать пользовательские процессы.
Когда корневой раздел смонтирован, ядро запускает первый пользовательский процесс с PID 1 - init‑систему.
6. Init‑система: запуск служб и пользовательской среды
Init‑система - это первый процесс в пространстве пользователя, который отвечает за запуск всех остальных сервисов и подготовку окружения для пользователя.
В современных дистрибутивах чаще всего используется systemd, но исторически применялись и другие варианты:
SysV init - набор shell‑скриптов и runlevel’ов (0,1,3,5 и т.д.), запускающих службы в определённом порядке.
Upstart - событийная система, где службы стартуют в ответ на события (запуск системы, поднятие сети и т.п.).
systemd - современная система с unit‑файлами, параллельным запуском служб, зависимостями и мощным журналированием.
Основные задачи init‑системы:
Запустить системные службы (журналы, сеть, диспетчер входа, SSH, cron и др.).
Смонтировать дополнительные файловые системы.
Запустить графический сервер и рабочее окружение пользователя либо выдать текстовое приглашение логина.
Как только init‑система завершит свои задачи, пользователь видит приглашение к входу или рабочий стол - на этом процесс загрузки считается завершённым.
Глоссарий терминов
BIOS и UEFI - "Начальники железа"
BIOS (Basic Input/Output System - базовая система ввода‑вывода) Представьте BIOS как "бригадира" на стройке. Когда вы включаете компьютер, он просыпается первым, проверяет, что все рабочие (железо) на месте и в состоянии работать, а затем показывает, откуда начинать строительство (загрузку системы). Это старая технология: она простая, но имеет ограничения (например, не видит очень большие современные диски и имеет примитивный текстовый интерфейс).
UEFI (Unified Extensible Firmware Interface) Это "современный менеджер" на замену старому бригадиру BIOS. Он делает то же самое (проверяет железо и ищет загрузчик), но гораздо умнее:
Понимает мышку и имеет красивый графический интерфейс.
Видит диски огромного объёма (больше 2 ТБ).
Умеет загружаться быстрее и безопаснее (Secure Boot). Сегодня почти на всех новых компьютерах стоит именно UEFI, хотя по привычке мы часто называем его BIOS.
POST (Power-On Self Test) Это "утренняя перекличка" железа. Сразу после включения BIOS/UEFI быстро проверяет основные узлы:
Оперативная память (RAM) - целая ли?
Видеокарта - работает ли вывод на экран?
Клавиатура - подключена ли? Если всё хорошо - компьютер пикнет один раз или просто покажет логотип. Если что-то сломалось - начнёт пищать кодами ошибок (например, три длинных гудка - проблема с памятью).
Разметка диска: MBR и GPT Чтобы компьютер понял, где на диске лежат файлы, диск нужно разметить.
MBR (Master Boot Record - главная загрузочная запись) Старый способ разметки, как старая карта города.
Ограничение: видит диск размером максимум 2 Терабайта.
Может иметь всего 4 главных раздела (например, диск C, D, E и F).
Хранит информацию о разделах только в одном месте (в самом начале диска) - если это место повредится, можно потерять все данные. Загрузчик при такой разметке часто "втискивается" прямо в эти первые байты диска.
Понимает диски любого реального размера (хоть 100 ТБ).
Позволяет создать огромное количество разделов (теоретически - бесконечно, практически - 128 и больше).
Хранит копии таблицы разделов в начале и в конце диска - если начало повредится, данные можно восстановить из копии. Обычно используется в паре с UEFI.
Загрузчики в мир ОС
Загрузчик (Bootloader) Это маленькая программа-посредник. BIOS/UEFI слишком примитивен, чтобы разбираться в файлах операционной системы. Поэтому он запускает загрузчик, а уже загрузчик знает: "Ага, ядро Linux лежит вот в этой папке на этом диске, сейчас я его прочитаю и запущу". Примеры: GRUB (для Linux), Windows Boot Manager (для Windows).
GRUB (GRand Unified Bootloader) Самый популярный и мощный загрузчик в мире Linux. Его суперсилы:
Умеет загружать почти любую операционную систему.
Показывает меню при включении компьютера, где вы можете выбрать: "Загрузить Ubuntu", "Загрузить Windows" или "Восстановить систему".
Если что-то сломалось, у него есть своя командная строка, через которую иногда можно починить загрузку вручную.
Chainloading (Цепная загрузка) Это когда один загрузчик не грузит систему сам, а передает управление другому загрузчику. Представьте: вы выбрали в меню GRUB пункт «Windows». GRUB не умеет запускать ядро Windows напрямую, он просто говорит: «Эй, загрузчик Windows, твой выход!», и передаёт управление ему. Для пользователя это выглядит просто как выбор пункта меню.
Внутренности Linux: Ядро и его помощники
Ядро (Kernel) Это "мозг" операционной системы. Ядро - это самая главная программа, которая управляет всем компьютером.
Оно решает, какой программе дать поработать процессором прямо сейчас.
Оно выделяет память программам и следит, чтобы они не мешали друг другу.
Оно общается с железом (дисками, видеокартой, мышкой). Пользователь с ядром напрямую не общается - для этого есть оболочки и программы.
Драйвер Это "словарь" или "инструкция" для ядра. Ядро само по себе не знает, как управлять конкретной моделью видеокарты NVIDIA или принтером Canon. Драйвер - это модуль, который объясняет ядру: "Чтобы напечатать страницу на этом принтере, нужно отправить вот такие команды в порт USB". Без драйверов железо просто "мертвый груз".
initramfs (Initial RAM Filesystem) Это "аварийный чемоданчик" для старта ядра. Проблема: чтобы прочитать файлы с диска, ядру нужен драйвер диска. Но драйвер диска сам лежит на диске! Как его прочитать, если мы еще не умеем читать диск? Решение: initramfs - это маленький архив, который загрузчик кладёт в оперативную память вместе с ядром. В нём уже лежат самые важные драйверы. Ядро сначала открывает этот архив, берёт оттуда драйвер диска, а уже потом может читать настоящий большой диск с системой.
Root (Корень, /) Это главная папка всей системы Linux. В Windows есть диски C:, D:, E:. В Linux всё начинается от одного корня - символа /. Все остальные диски и флешки "подключаются" (монтируются) внутрь папок в этом корне. Когда система загружена, именно в корне лежат все ваши программы, настройки и файлы.
Init-системы: "Управляющие процессами" После того как ядро запустилось, оно запускает самый первый процесс (PID 1). Этот процесс должен запустить всё остальное (сеть, звук, экран входа в систему). Это и есть Init-система.
SysV init (System V init) Классический, "дедовский" метод.
Работает по строгой очереди: сначала запусти сеть, потом (когда сеть готова) запусти SSH, потом запусти веб-сервер.
Использует простые и понятные скрипты (текстовые файлы с командами).
Минус: загрузка идёт медленно, потому что процессы ждут друг друга.
systemd Современный стандарт (используется в Ubuntu, Debian, CentOS, Fedora).
Умеет запускать всё параллельно: сеть и звук грузятся одновременно, не ожидая друг друга, если не зависят друг от друга.
Очень мощная и сложная: умеет перезапускать упавшие службы, следить за логами, управлять таймерами.
Многие критикуют её за сложность ("комбайн, который делает всё"), но она де-факто стандарт сегодня.
Upstart Попытка сделать что-то среднее между старым SysV и новым systemd. Главная идея - "события". Не просто "запусти сеть", а "если вставили сетевой кабель - запусти настройку сети". Сейчас почти не используется, так как systemd победила в "войне init-систем".
5 (Группа): r-x (Может читать и запускать, но не редактировать).
5 (Остальные): r-x (Могут читать и запускать, но не редактировать).
Популярные комбинации
chmod 777 - Разрешено всё и всем (опасно для безопасности, используйте с осторожностью).
chmod 755 - Стандарт для программ и скриптов (владелец меняет, остальные только запускают).
chmod 644 - Стандарт для обычных документов (владелец читает/пишет, остальные только читают).
chmod 600 - Секретный файл (только владелец может читать и писать, остальные даже не откроют).
chmod +x - Сделать файл исполняемым (добавляет "x" всем).
💡 Важное применительно к папка(директориям)
Папка без x (Execute) - бесполезна!
Если у папки есть права rw- (6), но нет x, вы сможете сделать ls (увидеть имена файлов), но не сможете открыть ни один файл внутри, не сможете зайти в нее (cd) и получить доступ к подпапкам.
Поэтому для папок почти всегда нужно давать минимум 5 (r-x) или 7 (rwx). Права 6 (rw-) для папок встречаются крайне редко.
Право удалять файлы (w на папку)
Чтобы удалить файл, вам не нужны права на запись в сам файл. Вам нужны права на запись (w) в папку, где этот файл лежит.
Пример: Вы можете удалить чужой файл, защищенный от записи (r--), если у вас есть полные права (rwx) на папку, в которой он находится.
Комбинация wx (3) для папок
Это называется "Drop Box" (почтовый ящик). Вы можете положить туда файл (создать), но не можете посмотреть (ls), что там еще лежит (нет r). Используется редко, например, для папки lost+found.
systemd - это система инициализации и управления службами в Linux. Основная утилита для взаимодействия с ней - systemctl. С её помощью мы запускаем веб-серверы, базы данных, ботов и настраиваем их автозагрузку.
Примечание.
systemd - это центральный механизм, который отвечает за запуск Linux после включения компьютера и за управление всеми службами (демонами), работающими в системе. Когда Linux загружается, именно systemd: • запускает сетевые службы • поднимает базы данных • стартует веб‑серверы • следит за зависимостями • перезапускает упавшие процессы • управляет логами Чтобы взаимодействовать с systemd, используется команда systemctl - это как "пульт управления" всеми службами.
В командах ниже замените name на имя вашей службы (например, nginx, docker, postgresql или my-bot).
1. Управление состоянием (прямо сейчас)
Базовые команды для включения и выключения.
Команда
Описание
systemctl start name
Запустить службу.
systemctl stop name
Остановить службу.
systemctl restart name
Перезапустить (Stop + Start). Используется, если служба зависла или нужно применить серьезные изменения.
systemctl reload name
Перечитать конфигурацию без остановки. Идеально для веб-серверов (Nginx/Apache) при правке конфигов.
systemctl status name
Показать статус. Самая важная команда: показывает, запущена ли служба, последние логи и ошибки.
Примечание.
Не обязательно писать .service в конце имени (например, можно писать sudo systemctl start nginx вместо nginx.service).
2. Автозагрузка (при включении ПК)
Эти команды определяют, будет ли служба стартовать сама после перезагрузки сервера.
Команда
Описание
systemctl enable name
Включить автозагрузку. Создает симлинк в системе.
systemctl disable name
Выключить автозагрузку. Служба не запустится сама после ребута.
systemctl enable --now name
Киллер-фича: Включает автозагрузку И сразу запускает службу. (2 команды в одной).
systemctl is-enabled name
Проверить, включена ли автозагрузка сейчас.
Диагностика и поиск проблем
Если что-то сломалось, эти команды помогут понять, где именно.
systemctl --failed Показать список всех служб, которые упали с ошибкой. С этого стоит начинать починку системы.
systemctl list-units --type=service Показать вообще все активные службы в системе.
В Linux нет дисков C: или D:. Есть только один корень - /. Все остальные диски, флешки и устройства подключаются как папки в эту структуру.
Шпаргалка
Директория
Описание
Примеры содержимого
/bin
Основные команды (binaries)
ls, cp, cat, bash
/sbin
Системные команды (system binaries)
fdisk, reboot, iptables
/boot
Файлы загрузчика системы
Ядро Linux, GRUB
/etc
Конфигурационные файлы
Настройки сети, пользователей, служб
/dev
Файлы устройств (devices)
Диски (sda), терминалы (tty), null
/home
Домашние папки пользователей
Документы, загрузки, настройки пользователя
/root
Домашняя папка суперпользователя (root)
Личная папка суперпользователя (root)
/lib
Системные библиотеки
Файлы .so, модули ядра
/opt
Стороннее ПО (optional)
Крупные программы (Chrome, Telegram, Zoom)
/mnt
Временное монтирование
Точки для ручного подключения дисков
/media
Автоматическое монтирование
Флешки, CD-диски (подключаются сами)
/proc
Информация о процессах и ядре
Виртуальная ФС (инфо о CPU, памяти)
/tmp
Временные файлы (temporary)
Очищается при перезагрузке
/usr
Программы и утилиты (resources)
Вторичная иерархия: софт, иконки, мануалы
/var
Изменяемые данные (variable)
Логи (/var/log), кэш, почта, сайты (/var/www)
1. Самое важное для запуска
/boot - сердце загрузки. Здесь живет ядро Linux (vmlinuz) и загрузчик GRUB. Если удалить - система не встанет.
/bin и /sbin - здесь живут команды.
В /bin - общие (типа ls, cat), доступные всем.
В /sbin - для админа (типа fdisk, iptables), нужны права root.
/lib - библиотеки, без которых программы из папок выше не запустятся (аналог .dll в Windows).
2. Пользователи и настройки
/home - ваши личные файлы. Аналог C:\Users.
/root - личная комната Администратора. Она отделена от /home, чтобы, если раздел с пользователями забьется или сломается, админ все равно мог войти в систему.
/etc - пульт управления. Здесь лежат текстовые файлы с настройками всей системы (сеть, fstab, конфиги программ).
3. Софт и приложения
/usr - (Unix System Resources). Самая большая папка. Здесь лежат установленные программы (/usr/bin), их библиотеки (/usr/lib) и документация. По сути, это аналог Program Files.
/opt - для "большого" стороннего софта, который ставится одним куском (например, Google Chrome, Telegram, проприетарные базы данных).
4. Данные и временные файлы
/var - (Variable). Всё, что постоянно меняется: логи системы (/var/log), кэш, очереди печати, файлы веб-сайта (/var/www).
/tmp - временная свалка. Очищается при каждой перезагрузке. Не храните здесь ничего важного!
5. Устройства и Система
/dev - в Linux всё есть файл, даже ваше "железо". Жесткий диск - это файл (/dev/sda), терминал - файл.
/proc - это иллюзия. Файлов там на самом деле нет, это интерфейс к ядру. Через эту папку можно посмотреть информацию о процессоре (/proc/cpuinfo) или памяти.
FAQ: В чем разница между /mnt и /media?
Частый вопрос новичков.
/media - система использует сама. Вставили флешку - она появилась тут автоматически.
/mnt - для ручной работы. Админ использует её, чтобы временно подключить диск для восстановления или настройки.
Полезный совет
Если вы забыли, для чего нужна папка, в Linux есть встроенная справка. Просто введите в терминале: man hier (от слова hierarchy) - и получите подробнейшее описание стандарта файловой системы.
Прописывать разрешение именно через cmdline.txt имеет смысл, если вы используете современные версии Ubuntu с драйверами KMS (Kernel Mode Setting), и стандартные настройки в config.txt игнорируются системой. Это заставляет ядро Linux принудительно использовать указанный режим.
Вставьте SD-карту в компьютер, откройте раздел boot (или system-boot) и найдите файл cmdline.txt.
В конец той же самой единственной строки (через пробел) нужно добавить команду в формате: video=<Port>:<Resolution>@<RefreshRate><Option> например:
video=HDMI-A-1:1920x1080@60D
Для Raspberry Pi 4 и 5 (порт возле питания - HDMI-1):
HDMI-A-1 - имя порта (для первого micro-HDMI).
1920x1080 - разрешение.
@60 - частота обновления.
D - важный флаг (Digital), который принудительно включает выход, даже если монитор не распознан (нет EDID). Полезно при переходниках, KVM, старых мониторах, телевизорах.
Вы наверняка сталкивались с этой классической ошибкой новичка. Вы пытаетесь добавить строку в конфиг, но получаете Permission denied, даже используя sudo.