Пара 1 / октябрь
История ОС: Unix, GNU, MINIX, Linux и дистрибутивы Различать ядро, userland и дистрибутив; понимать происхождение GNU/Linux и подготовить Ubuntu WSL2.
Различать ядро, userland и дистрибутив; понимать происхождение GNU/Linux и подготовить Ubuntu WSL2. Покажите два разных окна: PowerShell и Ubuntu. Команды wsl относятся к управлению средой из Windows, команды pwd и ls — к Linux. WSL2 использует Linux-ядро в управляемой виртуальной машине; Ubuntu — дистрибутив с пакетами и утилитами. Это не второй загрузочный раздел и не контейнер Docker. Учебный репозиторий храним в домашней папке Linux, а не в /mnt/c: меньше различий с сервером и проблем файловых операций.
Контекст ОС появилась как способ использовать дорогое оборудование, а не как графический рабочий стол.
Различать ядро, userland и дистрибутив; понимать происхождение GNU/Linux и подготовить Ubuntu WSL2.
На ранних компьютерах запуск программы и подготовка устройств требовали большого участия оператора. Пакетный монитор автоматизировал переход от одного задания к следующему, стандартный ввод/вывод и обработку сбоев. GM-NAA I/O для IBM 704, созданная в 1956 году, — один из классических ранних примеров: утверждение «самая первая ОС» зависит от того, какие мониторы и инструменты включать в определение. Time-sharing в 1960-х дал многим пользователям интерактивные сеансы, пока CPU быстро переключался между задачами. Это потребовало защиты памяти, планирования и учёта ресурсов. Multics исследовал богатую многопользовательскую систему; Unix возник позже в другой команде и с более компактным подходом. Интерфейс рабочего стола — сравнительно поздний слой. Серверная ОС прекрасно выполняет работу без графического окружения.
Первые ОС управляли очередью работы ОС появилась как способ использовать дорогое оборудование, а не как графический рабочий стол.
От пакетных мониторов к Unix, GNU и Linux: исторический таймлайн 1950-е Пакетные мониторы 1956 · GM-NAA I/O Автоматизация запуска 1960-е · time-sharing Интерактивные сеансы 1969 · Unix Bell Labs, PDP-7 1983/84 · GNU Свободная Unix-среда 1987 · MINIX Учебная Unix-подобная ОС 1991 · Linux Новое ядро для 386 1993+ · сборки Ядро + пакеты + userland Это временная шкала, не дерево прямого наследования кода; первые ОС не имели рабочего стола. Пакетная обработка оптимизировала очереди; time-sharing дал интерактивность. Современная ОС объединяет множество таких механизмов.
На ранних компьютерах запуск программы и подготовка устройств требовали большого участия оператора. Пакетный монитор автоматизировал переход от одного задания к следующему, стандартный ввод/вывод и обработку сбоев. GM-NAA I/O для IBM 704, созданная в 1956 году, — один из классических ранних примеров: утверждение «самая первая ОС» зависит от того, какие мониторы и инструменты включать в определение. Time-sharing в 1960-х дал многим пользователям интерактивные сеансы, пока CPU быстро переключался между задачами. Это потребовало защиты памяти, планирования и учёта ресурсов. Multics исследовал богатую многопользовательскую систему; Unix возник позже в другой команде и с более компактным подходом. Интерфейс рабочего стола — сравнительно поздний слой. Серверная ОС прекрасно выполняет работу без графического окружения.
Пакетная обработка оптимизировала очереди; time-sharing дал интерактивность. Современная ОС объединяет множество таких механизмов.
Unix: реализация, семейство и влияние Linux похож на Unix по интерфейсам, но не является переименованным MINIX.
Родство кода и влияние идей — разные связи Unix · Bell Labs 1969, затем перенос на C код / развитие BSD Беркли, Unix-ветвь Darwin / XNU Mach + BSD-компоненты MINIX · 1987 Таненбаум, учебный проект Linux · 1991 Самостоятельное ядро GNU userland Независимая реализация MINIX → Linux означает учебную среду и влияние, а не копирование кода MINIX. Сплошные ветви BSD обозначают развитие кодовой семьи; связь MINIX и Linux поясняет учебную среду и влияние, без утверждения о копировании.
В 1969 году в Bell Labs Кен Томпсон, Деннис Ритчи и коллеги начали Unix на PDP-7 после участия лаборатории в Multics. Система постепенно получила файловую модель, процессы, shell и инструменты; перенос значительной части на C в 1970-х облегчил развитие на другом оборудовании. BSD выросла из Unix-окружения в Беркли; её наследие участвует в Darwin/macOS наряду с Mach. MINIX, опубликованный Таненбаумом в 1987 году для изучения ОС, предоставлял небольшой Unix-подобный пример. Торвальдс работал с MINIX и в 1991 году создал собственное ядро для 386. Его код нельзя описывать как скопированный MINIX: влияние, совместимость и прямое происхождение исходников — разные отношения. Дискуссия Таненбаума и Торвальдса затрагивала монолитное ядро и микроядерный подход; это не история рождения Git.
Сплошные ветви BSD обозначают развитие кодовой семьи; связь MINIX и Linux поясняет учебную среду и влияние, без утверждения о копировании.
GNU появился раньше ядра Linux Рабочая система состоит из ядра и множества пользовательских компонентов.
Дистрибутив собирает ядро и независимо развивающиеся компоненты Linux Ядро, драйверы, syscalls GNU GCC, libc, Bash, coreutils Другие проекты systemd, OpenSSH, Python Дистрибутив Пакеты, интеграция, обновления GNU начат до Linux. Grep, sed и Bash — отдельные проекты, а не части пакета coreutils. Linux — ядро. Дистрибутив собирает совместимые версии ядра, библиотек, утилит, служб и приложений.
Ричард Столлман объявил GNU в 1983 году; работа началась в 1984-м. Целью была свободная Unix-совместимая система. До появления Linux уже развивались компилятор GCC, shell, библиотеки и утилиты. Linux дал самостоятельное ядро, вокруг которого можно было собрать рабочую среду с GNU и другими проектами. Поэтому ls не «написан внутри Linux-ядра», а Bash не является его частью. В Ubuntu типичны GNU libc и GNU coreutils. Coreutils объединяет прежние fileutils, shellutils и textutils: среди команд ls, cp, mv, chmod, cat, sort, uniq, wc. Grep и sed — отдельные GNU-проекты, awk имеет несколько реализаций; всё это нельзя называть одним пакетом «gnuutils». Alpine часто использует musl и BusyBox, поэтому не любая система с Linux содержит полный GNU-userland.
Linux — ядро. Дистрибутив собирает совместимые версии ядра, библиотек, утилит, служб и приложений.
Дистрибутив выбирает интеграцию и обновления Происхождение пакетов объясняет совместимость, но не делает потомков одинаковыми.
Дистрибутивы: происхождение пакетов, политики и сборки Debian · 1993 deb / apt Ubuntu · 2004 Свои репозитории и выпуски Mint / Zorin OS Ubuntu-based редакции Kali · 2013 Debian-based, security tools Fedora / RHEL Разные RPM-циклы Arch / Alpine Другие политики и userland Схема выбранных семейств. LMDE основана на Debian; не все системы Linux используют GNU/glibc. Дистрибутив задаёт пакеты, libc, init и политику обновлений.
Debian появился в 1993 году; Ubuntu развивается с 2004-го как производная Debian со своими выпусками, репозиториями и интеграцией. Ubuntu-based редакции Mint и Zorin OS наследуют часть этой базы, но LMDE является отдельной Debian-based линией. Kali с 2013 года основан на Debian; прежний BackTrack имел другую историю: Slackware в ранних версиях, затем Ubuntu. Fedora и RHEL относятся к RPM-экосистеме, но имеют разные циклы развития и поддержки. Arch делает другой выбор в пользу rolling release, Alpine — компактности и другого userland. Даже общая основа не разрешает смешать репозитории Debian, Ubuntu и Kali: версии ABI, dependencies и настройки могут расходиться. На занятиях используем один выпуск Ubuntu, чтобы отделять Linux-механизмы от особенностей пакетов.
Дистрибутив задаёт пакеты, libc, init и политику обновлений.
Наблюдение механизмов uname -srm
cat /etc/os-release
command -v bash ls grep sed
ls --version | head -n 1
ps -p 1 -o pid,comm,argsПолный разбор команд в конспекте → В паспорте среды отдельно запишите ядро, дистрибутив, shell и PID 1. На Mac вместо /etc/os-release используйте sw_vers, а для BSD ls не запускайте --version. WSL2 устанавливается по инструкции первой пары; установка выполняется до занятия.
Windows, WSL2 и Ubuntu WSL2 даёт Linux-среду внутри Windows.
01 Windows
→ 02 WSL2 / ядро Linux
→ 03 Ubuntu
→ 04 Наш процесс
Папка /mnt/c доступна, но Windows и Linux имеют разные правила путей и прав.
Покажите два разных окна: PowerShell и Ubuntu. Команды wsl относятся к управлению средой из Windows, команды pwd и ls — к Linux. WSL2 использует Linux-ядро в управляемой виртуальной машине; Ubuntu — дистрибутив с пакетами и утилитами. Это не второй загрузочный раздел и не контейнер Docker. Учебный репозиторий храним в домашней папке Linux, а не в /mnt/c: меньше различий с сервером и проблем файловых операций.
Команды и наблюдения PowerShell, затем Ubuntu
wsl --install -d Ubuntu-24.04
wsl --update
wsl -l -v
# Open Ubuntu after restarting Windows
uname -r
cat /etc/os-release
whoami
pwdУстановку и перезагрузку лучше выполнить до пары. Linux-команды запускаются после открытия Ubuntu; комментарий в примере обозначает границу сред. Ожидаемое наблюдение: В PowerShell у Ubuntu VERSION = 2; в Ubuntu видны Linux-ядро, версия дистрибутива и домашняя папка /home/имя.
Разбор результата В PowerShell у Ubuntu VERSION = 2; в Ubuntu видны Linux-ядро, версия дистрибутива и домашняя папка /home/имя.
Установку и перезагрузку лучше выполнить до пары. Linux-команды запускаются после открытия Ubuntu; комментарий в примере обозначает границу сред.
В Ubuntu: mkdir -p ~/devops-course; cd ~/devops-course; { cat /etc/os-release; uname -r; whoami; pwd; } > environment.txt. В PowerShell отдельно wsl -l -v. Если установка недоступна из-за прав администратора или виртуализации, работа в паре с уже настроенным ноутбуком позволяет выполнить лабораторную; настройку исправляем до следующей пятницы.
На macOS Выполняется в Terminal macOS. uname -s покажет Darwin, а не Linux; uname -m обычно arm64 на Apple Silicon или x86_64 на Intel. Для Linux-специфичных лабораторных нужен Ubuntu в VM или работа с партнёром на WSL2.
sw_vers
uname -s
uname -m
whoami
pwdКоманды macOS необходимо проверить на конкретном устройстве. Выполняется в Terminal macOS. uname -s покажет Darwin, а не Linux; uname -m обычно arm64 на Apple Silicon или x86_64 на Intel. Для Linux-специфичных лабораторных нужен Ubuntu в VM или работа с партнёром на WSL2.
Паспорт рабочего окружения Откройте Ubuntu и создайте ~/devops-course командой mkdir -p ~/devops-course. Сохраните в environment.txt версии ОС, ядра, имя пользователя и текущую папку. Сравните с соседом: какие различия важны для воспроизводимости? Нарисуйте путь будущего изменения: код → проверка → запуск → пользователь. Работа в парах: один оператор, второй проверяет гипотезу. Смена ролей в середине. В Ubuntu: mkdir -p ~/devops-course; cd ~/devops-course; { cat /etc/os-release; uname -r; whoami; pwd; } > environment.txt. В PowerShell отдельно wsl -l -v. Если установка недоступна из-за прав администратора или виртуализации, работа в паре с уже настроенным ноутбуком позволяет выполнить лабораторную; настройку исправляем до следующей пятницы.
Что должно получиться environment.txt и схема из четырёх шагов.
WSL2 подтверждён из Windows; рабочая папка находится в /home; студент различает PowerShell и Bash.
В Ubuntu: mkdir -p ~/devops-course; cd ~/devops-course; { cat /etc/os-release; uname -r; whoami; pwd; } > environment.txt. В PowerShell отдельно wsl -l -v. Если установка недоступна из-за прав администратора или виртуализации, работа в паре с уже настроенным ноутбуком позволяет выполнить лабораторную; настройку исправляем до следующей пятницы.
Ошибка для диагностики Вместо команды Linux в PowerShell получена ошибка. Найдите границу окружений, не устанавливайте случайный аналог команды.
Симптом → Гипотеза → Проверка
В Ubuntu: mkdir -p ~/devops-course; cd ~/devops-course; { cat /etc/os-release; uname -r; whoami; pwd; } > environment.txt. В PowerShell отдельно wsl -l -v. Если установка недоступна из-за прав администратора или виртуализации, работа в паре с уже настроенным ноутбуком позволяет выполнить лабораторную; настройку исправляем до следующей пятницы.
Основные выводы Unix дал влиятельную модель процессов, файлов и пользовательских инструментов. GNU и Linux развивались как самостоятельные проекты; дистрибутив собирает их с другими компонентами. Unix дал влиятельную модель процессов, файлов и пользовательских инструментов.
GNU и Linux развивались как самостоятельные проекты; дистрибутив собирает их с другими компонентами.
После пары Завершить настройку WSL2, принести паспорт окружения. Подготовить один пример «работает только у меня».
Конспект, команды и разбор → Проверьте критерии сдачи и дайте возможность повторной попытки. Первоисточники: https://learn.microsoft.com/en-us/windows/wsl/install https://roadmap.sh/devops
Где выполняется приложение? Windows Приложение / PowerShell
Win32 / .NET
NT + драйверы Ubuntu Приложение / Bash
libc / системные вызовы
Linux + драйверы macOS Приложение / zsh
Frameworks / libSystem
XNU: Mach + BSD WSL2 и Docker Desktop добавляют Linux-среду поверх ОС хоста.
Схема намеренно упрощена: пользовательская среда выше ядра. macOS не является Linux. Сравнивайте роли и границы, а не скорость ОС. Источники: Apple XNU, Microsoft WSL compare versions.
Пара 2 / октябрь
Загрузка ОС: firmware, ядро, драйверы и Live-среды Связать команды терминала с устройством ОС и найти файлы учебного проекта.
Связать команды терминала с устройством ОС и найти файлы учебного проекта. Операционная система — диспетчер CPU, памяти, устройств и процессов. Shell читает команду, разбирает аргументы и запускает программу. ls — отдельная программа, cd обычно встроен в shell, потому что меняет его текущую папку. Ядро предоставляет системные вызовы, через которые программа читает файл или создаёт процесс. Не нужно запоминать внутренние функции ядра: важно перестать считать терминал самой ОС. Один shell может запустить много процессов.
Контекст Legacy BIOS читает bootstrap-код, UEFI запускает EFI-программу.
Связать команды терминала с устройством ОС и найти файлы учебного проекта.
В legacy BIOS после начальной аппаратной подготовки выбирается загрузочное устройство и исполняется начальный загрузочный код, обычно связанный с MBR. Крошечный первый этап не содержит полноценную ОС и передаёт управление следующим этапам загрузчика. UEFI имеет иной интерфейс: записи загрузки ведут к EFI-программам на ESP. GPT часто сочетается с UEFI, но таблица разделов и firmware — разные понятия. GRUB может работать в разных вариантах; расположение и цепочка его файлов зависят от установки. После выбора записи он загружает ядро и initramfs, передаёт command line, например сведения о root. Secure Boot добавляет проверку доверия; shim помогает встроить доверенные компоненты в выбранную цепочку. В WSL2 эту физическую цепочку проходит Windows-хост, а не каждый запуск Ubuntu.
Ядро и пользовательские программы Shell передаёт задачи программам; ядро управляет ресурсами.
01 Терминал
→ 02 Bash
→ 03 Программа
→ 04 Ядро → ресурсы
Аналогия: окно заказа, диспетчер и работники склада выполняют разные роли.
Операционная система — диспетчер CPU, памяти, устройств и процессов. Shell читает команду, разбирает аргументы и запускает программу. ls — отдельная программа, cd обычно встроен в shell, потому что меняет его текущую папку. Ядро предоставляет системные вызовы, через которые программа читает файл или создаёт процесс. Не нужно запоминать внутренние функции ядра: важно перестать считать терминал самой ОС. Один shell может запустить много процессов.
Единое дерево каталогов Путь / начинается от корня Linux, а ~ — от дома пользователя.
01 /
→ 02 home / студент
→ 03 devops-course
→ 04 data / results
Аналогия: полный адрес здания и указание «через соседнюю дверь» — абсолютный и относительный путь.
В Linux файлы доступны через единое дерево. /home содержит домашние каталоги, /etc — настройки системы, /var — изменяемые данные и журналы, /tmp — временные файлы, /usr — многие программы и библиотеки. Эти роли помогают искать, но не гарантируют расположение любого приложения. Абсолютный путь начинается с /; относительный вычисляется от текущей папки. Точка означает текущий каталог, две точки — родительский. Регистр значим: Model.csv и model.csv могут быть разными файлами. Папка — тоже объект с владельцем и правами. Не меняем системные каталоги ради учебного эксперимента.
Файл, ссылка и устройство Имя файла не равно его содержимому.
01 report.txt
02 Содержимое
03 latest → report.txt
04 Метаданные stat
Аналогия: ссылка — записка с адресом; переезд адресата может сделать её бесполезной.
Владелец проекта часто путает удаление имени, перемещение файла и уничтожение всех копий. Символическая ссылка хранит путь к другому объекту и может стать «битой». Расширение файла — соглашение, а не гарантия формата. Команда file смотрит признаки содержимого, stat показывает метаданные. /dev содержит интерфейсы устройств, /proc — представление данных о работающем ядре и процессах; это не обычные архивы на диске. Сейчас достаточно понимать роль, без чтения всей /proc.
Windows, Linux и macOS: три разных ядра Похожие команды не означают одинаковое устройство ОС.
01 Windows / NT
02 Ubuntu / Linux
03 macOS / XNU
Аналогия: три здания имеют комнаты и двери, но инженерные коммуникации и ключи разные.
Windows строится на NT, Ubuntu использует Linux, macOS — Darwin с XNU. Во всех есть процессы, память, файловая система и сеть, но системные API, драйверы и службы отличаются. Shell — пользовательская программа: PowerShell, Bash и zsh не являются ядрами. macOS сочетает Mach и BSD-компоненты, поэтому привычные Unix-команды похожи на Linux, но GNU/BSD-флаги и системные механизмы различаются. WSL2 запускает Linux-ядро в управляемой виртуальной среде Windows. Docker Desktop на Mac тоже использует Linux-VM: Linux-контейнер не работает непосредственно на XNU. Эти различия объясняют, почему Git и Python часто переносимы, а systemd и apt — нет.
BIOS и UEFI начинают загрузку по-разному Legacy BIOS читает bootstrap-код, UEFI запускает EFI-программу.
BIOS/MBR и UEFI/ESP — две разные схемы начала загрузки BIOS Legacy firmware Загрузочный сектор MBR / bootstrap GRUB Многоэтапный загрузчик Linux + initramfs Параметры загрузки UEFI Boot entries в NVRAM ESP Файловая система FAT EFI-программа shim / GRUB / stub Linux + initramfs Затем init системы UEFI не обязан выполнять цепочку BIOS/MBR. Secure Boot — проверка доверия, не антивирус. Наличие UEFI не означает обязательный GRUB. Внешний USB тоже может содержать EFI-загрузчик и полноценную Live-среду.
В legacy BIOS после начальной аппаратной подготовки выбирается загрузочное устройство и исполняется начальный загрузочный код, обычно связанный с MBR. Крошечный первый этап не содержит полноценную ОС и передаёт управление следующим этапам загрузчика. UEFI имеет иной интерфейс: записи загрузки ведут к EFI-программам на ESP. GPT часто сочетается с UEFI, но таблица разделов и firmware — разные понятия. GRUB может работать в разных вариантах; расположение и цепочка его файлов зависят от установки. После выбора записи он загружает ядро и initramfs, передаёт command line, например сведения о root. Secure Boot добавляет проверку доверия; shim помогает встроить доверенные компоненты в выбранную цепочку. В WSL2 эту физическую цепочку проходит Windows-хост, а не каждый запуск Ubuntu.
Наличие UEFI не означает обязательный GRUB. Внешний USB тоже может содержать EFI-загрузчик и полноценную Live-среду.
Драйверы связывают ядро с устройствами Драйвер, модуль ядра и firmware устройства — связанные, но разные вещи.
Драйвер переводит общий запрос в операции конкретного устройства Приложение read / socket / ioctl Подсистема ядра VFS / сеть / USB Драйвер Протокол устройства Контроллер NVMe, Wi-Fi, GPU Firmware устройства Микрокод, другой слой Драйвер может быть встроен в ядро или загружен модулем. Firmware устройства — не UEFI компьютера. Ubuntu: lspci -k, lsmod, modinfo имя_модуля, journalctl -k -b. В VM и WSL состав устройств отличается от физического PC.
Ядро распознаёт устройства через соответствующие шины и подсистемы. Драйвер знает, как работать с конкретным контроллером или классом устройств; более высокий слой предоставляет приложению общий интерфейс. Драйвер может быть встроен в ядро или находиться в загружаемом модуле .ko. Modprobe учитывает зависимости модулей; lsmod показывает загруженные модули, но отсутствие строки не доказывает отсутствие встроенного драйвера. Некоторым устройствам нужна отдельная firmware, загружаемая драйвером: это не тот же код, что UEFI компьютера. /sys представляет объекты ядра и их связи, /dev — интерфейсы устройств; udev участвует в обработке событий и именовании пользовательской среды. Если драйвер хранения нужен для root и не встроен, он должен быть доступен достаточно рано, обычно в initramfs. Для наблюдения читаем lspci -k, lsmod и журнал, не выгружаем модуль диска на работающей системе.
Ubuntu: lspci -k, lsmod, modinfo имя_модуля, journalctl -k -b. В VM и WSL состав устройств отличается от физического PC.
Как Ubuntu доходит до PID 1 Каждый этап передаёт управление следующему; терминал появляется в конце.
Загрузка Ubuntu на UEFI: firmware, загрузчик, ядро, initramfs, настоящий корень и PID 1 UEFI Находит EFI-программу shim / GRUB Ядро + initramfs + параметры Ядро Linux CPU, память, устройства initramfs: ранняя среда Драйверы → расшифровка → mount root switch root Настоящий / и systemd PID 1 Службы, сеансы, вход пользователя Типичный пример Ubuntu; EFI stub / UKI и другие загрузчики меняют детали. Нет. Bash — программа пользовательской среды, запускаемая после ранних этапов загрузки.
Рассматриваем типичную Ubuntu на компьютере с UEFI, а не учебную WSL2. Сразу после включения выполняется firmware: это код, который ещё не является Linux. UEFI выбирает загрузочную запись и запускает EFI-программу с EFI System Partition. В Ubuntu с Secure Boot часто участвует shim, затем GRUB. Загрузчик выбирает ядро, передаёт ему параметры и initramfs. Ядро начинает управлять процессором, памятью и устройствами. Ранняя пользовательская среда получает доступ к настоящему корневому разделу, после чего управление переходит init установленной системы. В нашей Ubuntu это systemd с PID 1. Менеджер запускает нужные службы; позже появляется сеанс пользователя, а в нём терминал и shell. Secure Boot проверяет доверие к исполняемым компонентам, но не заменяет проверку исправности сервиса. Возможны другие загрузчики, EFI stub и единый образ UKI: схема показывает роли, а не единственный обязательный набор файлов.
Аналогия: сначала открыть здание и включить коммуникации, затем организовать работу отделов. Linux не ждёт входа человека, чтобы запустить серверные службы.
Нет. Bash — программа пользовательской среды, запускаемая после ранних этапов загрузки.
Зачем нужен initramfs Чтобы открыть настоящий корень, иногда сначала нужна маленькая среда в памяти.
Временная корневая файловая система помогает открыть настоящую Временный / в RAM initramfs: /init, утилиты, модули Диск Раздел с будущим / найти Открыть устройство RAID / шифрование Смонтировать root Например, /sysroot Перейти к новому / exec init настоящей ОС Ядро уже работает. Эта стадия решает доступ к root, а не запускает BIOS. В ранней среде и цепочке доступа к root; пользовательский Bash ещё не нужен.
Представьте зашифрованный диск: чтобы открыть его, нужны драйверы, утилита и ключ; но утилиты установленной ОС лежат на этом же диске. Initramfs разрывает этот круг. Это ранняя файловая система, содержимое которой загружено в память: в ней есть необходимый init, модули и инструменты. Она помогает найти устройство, собрать нужные слои хранения, при необходимости получить ключ и смонтировать будущий корень. Затем выполняется переход к настоящему root и запуск его init. Это не второй Linux и не аналог swap. Уже работает то же ядро. На некоторых системах ранний init тоже является systemd; упрощённая схема не обещает, что systemd всегда впервые появляется только после switch root. Не предлагайте группе менять загрузочные разделы: задача — понять причину сообщений, а не сломать учебный ноутбук.
Аналогия: аварийный набор с ключом позволяет открыть склад, где лежат основные инструменты. RAM не является постоянным архивом.
В ранней среде и цепочке доступа к root; пользовательский Bash ещё не нужен.
Отказы на разных стадиях загрузки Последний успешный этап сужает круг причин.
Диагностика загрузки по последнему достигнутому этапу UEFI / загрузчик Нет boot device Ядро / initramfs Не найден root systemd Unit failed Приложение HTTP 500 Загрузка EFI Диск, ESP, entry Устройство root UUID, драйвер, ключ Журнал службы ExecStart, права Логи запроса Вход, код, данные Симптом после входа в систему уже не объясняется отсутствием загрузчика. Нет. Ответ приложения доказывает прохождение многих нижних слоёв; начинаем с запроса и логов сервиса.
Дайте четыре коротких сообщения: no boot device, не найден UUID корня, failed unit и HTTP 500. Попросите поставить каждое на схему. Если firmware не находит загрузочную программу, смотреть журнал Python бессмысленно. Если initramfs не открыл root, systemctl из обычного сеанса ещё недоступен. Если система дошла до входа и одна служба failed, ядро и основной root уже работают: смотрим unit и журнал. Если API отвечает HTTP 500, сетевой путь как минимум дошёл до приложения; это не свидетельство сломанного GRUB. Идти по слоям не означает строго проверять всё с нуля: используем факты, уже содержащиеся в симптоме. На занятии не воспроизводим реальные повреждения bootloader: работаем с вымышленными карточками симптомов и объясняем, какой факт исключает гипотезу.
Аналогия: если касса печатает чек с ошибочной суммой, сначала проверяем расчёт, а не отсутствие электричества.
Нет. Ответ приложения доказывает прохождение многих нижних слоёв; начинаем с запроса и логов сервиса.
WSL2: путь запуска другой Windows уже работает, когда вы открываете Ubuntu.
WSL2 запускается внутри работающей Windows, а не через GRUB студента Windows уже загружена NT, службы, пользователь wsl.exe → WSL Запрос запуска дистрибутива Linux VM Ядро WSL2 Ubuntu rootfs PID 1 systemd, если включён Bash / приложение Процессы пользователя В WSL2 студент не меняет UEFI/GRUB. Windows остаётся ОС хоста. Нет. Ядро запущено инфраструктурой WSL2, а не обычной цепочкой загрузки отдельной Ubuntu на PC.
Команда wsl.exe просит инфраструктуру WSL запустить Linux-среду. WSL2 использует настоящее Linux-ядро в управляемой виртуальной машине, а Ubuntu добавляет rootfs, пакеты и пользовательские программы. При таком запуске студент не выбирает GRUB Ubuntu на физическом компьютере и не меняет EFI System Partition. Если для дистрибутива включён systemd, он занимает PID 1 внутри этой среды; связанные с WSL init-процессы выполняют интеграционные задачи. Проверяем факт командой ps -p 1 -o pid,comm,args, а не по названию окна. Наличие systemd не означает, что среда переживёт выключение Windows или wsl --shutdown. Microsoft отдельно отмечает: systemd-службы сами по себе не удерживают WSL instance живым. Для занятий этого достаточно, для постоянного сервера требуется другое решение.
Аналогия: отдельный офис внутри уже работающего бизнес-центра. Это настоящая среда, но её питание и время жизни зависят от хоста.
Нет. Ядро запущено инфраструктурой WSL2, а не обычной цепочкой загрузки отдельной Ubuntu на PC.
Три ОС: одинаковые роли, разные механизмы Сравниваем firmware, ядро и службы; не называем macOS Linux.
Похожие роли при разных цепочках загрузки ОС UBUNTU / UEFI UEFI → GRUB Типичная конфигурация Linux → initramfs Переход к root systemd → службы PID 1, затем пользователь WINDOWS / UEFI Boot Manager bootmgfw.efi winload.efi → NT Ядро и boot-драйверы Системные процессы SMSS, SCM, вход пользователя MAC / APPLE SILICON Boot ROM → LLB Цепочка доверия iBoot → XNU Проверка загрузки launchd → службы PID 1, затем сеансы Нет. Нужна конфигурация соответствующего менеджера и проверка конкретного приложения.
У Windows в типичной UEFI-загрузке firmware запускает Windows Boot Manager; winload.efi загружает NT-ядро и ранние драйверы. Затем появляются системные процессы и инфраструктура служб, в том числе Service Control Manager, и пользовательский вход. Эта строка не рисует весь граф Windows: SMSS, wininit и logon имеют свои роли и зависимости. Для Mac с Apple silicon аппаратная цепочка начинается с Boot ROM, затем участвуют LLB и iBoot с проверками доверия и политики загрузки; стартует XNU. Launchd управляет пользовательской системой служб и является PID 1. Intel Mac имеет другую firmware-цепочку, поэтому нельзя показывать Apple silicon как универсальную загрузку любого Mac. Linux, NT и XNU реализуют похожие задачи управления ресурсами, но используют разные API, драйверы и форматы приложений.
Аналогия: у зданий есть вход, электросистема и диспетчер, но схемы подключения и регламенты различаются.
Нет. Нужна конфигурация соответствующего менеджера и проверка конкретного приложения.
Что происходит при чтении файла Приложение обращается к ядру; shell не читает диск за каждую программу.
Программа запрашивает ресурсы у ядра через системный вызов ПОЛЬЗОВАТЕЛЬСКИЙ РЕЖИМ Python: open(path) Код приложения Runtime / libc Подготовить запрос read / openat РЕЖИМ ЯДРА Linux: VFS и драйвер Проверить права, выполнить I/O результат или errno Железо / устройства Диск, сеть, таймер операция Вызов функции Python не всегда равен одному syscall. Кэш и буферы меняют путь. Права пользователя и режим CPU — разные вещи. Доступ к ресурсам идёт через интерфейсы ядра.
Python open — высокоуровневая операция. Runtime и библиотечные функции в нужный момент делают системный вызов: например, openat или read. Выполнение переходит через контролируемую границу из пользовательского режима в режим ядра. Ядро разрешает путь, проверяет доступ, использует файловую систему и при необходимости драйвер; результат или код ошибки возвращается приложению. Не путайте режим CPU с sudo: привилегированный пользовательский процесс тоже не получает право произвольно выполнять код ядра. Далеко не каждый вызов Python приводит к I/O: данные могут быть в буфере или кэше. Терминал лишь показывает интерфейс ввода/вывода; shell разбирает команду и запускает программу, которая затем самостоятельно запрашивает ресурсы. Для наблюдения используем узкий strace на собственном коротком процессе, не трассируем чужие приложения.
Аналогия: даже директор заказывает выдачу через складскую систему. Аналогия не описывает переключение режима процессора.
Права пользователя и режим CPU — разные вещи. Доступ к ресурсам идёт через интерфейсы ядра.
POSIX: общий договор о поведении Стандарт описывает интерфейсы, а не устройство конкретного ядра.
POSIX задаёт общий контракт, реализации и расширения различаются POSIX: API + shell + утилиты Процессы, файлы, потоки, стандартное поведение Linux + libc GNU-инструменты, systemd macOS / Darwin libSystem, BSD, launchd Windows + WSL2 POSIX-интерфейсы в Linux POSIX не требует systemd, apt, /proc, GNU-флагов или одинакового бинарного формата. Первый использует широко доступный стандартный интерфейс; systemctl обращается к конкретному менеджеру systemd.
POSIX — семейство требований к интерфейсам ОС: процессам, файловым операциям, shell и утилитам. Благодаря общим соглашениям многие программы и скрипты проще переносить между Unix-подобными системами. Это не пакет, который устанавливают вместо Linux, и не описание внутреннего планировщика. Linux с библиотеками предоставляет многие POSIX-интерфейсы; macOS имеет Unix-происхождение и собственные реализации. Обычный Windows PowerShell не превращается в POSIX shell; Linux в WSL2 предоставляет отдельное совместимое окружение. Различайте поддержку интерфейса и формальную сертификацию конкретной версии ОС: надпись Linux сама по себе не является сертификатом. POSIX не требует systemd, apt, /proc или всех GNU-флагов. На слайде намеренно нет обещания полного равенства реализаций.
Аналогия: договор о форме розетки помогает подключать приборы, но не делает электростанции одинаковыми.
Первый использует широко доступный стандартный интерфейс; systemctl обращается к конкретному менеджеру systemd.
Переносимый исходник ≠ переносимый бинарник API, команды, ABI и архитектуру процессора проверяем отдельно.
Переносимость исходника, команды и готового бинарного файла — разные свойства Скрипт: sh + printf Стандартный интерфейс Проверить на целевых ОС Кавычки, пути, locale и доступность утилит sed -i / stat GNU и BSD отличаются Указать конкретный вариант man на нужной машине; не копировать флаги вслепую Linux ELF-бинарник Ожидает Linux ABI На macOS напрямую не запускается Нужен совместимый build / runtime / Linux VM Нет. Интерфейс исходника и бинарный ABI — разные уровни совместимости.
Даже когда исходник использует общие интерфейсы, готовый файл программы зависит от ABI, формата исполняемого файла, библиотек и архитектуры CPU. Linux ELF-файл нельзя просто считать приложением macOS Mach-O или Windows PE. POSIX облегчает перенос исходного кода, но не обещает единый бинарник. Скрипт зависит от доступного interpreter и поведения утилит: GNU и BSD версии stat и sed имеют разные флаги, locale меняет обработку текста, пути и регистр зависят от файловой системы. Практическая привычка: сначала определить слой несовместимости, затем выбрать правильный runtime или сборку. Для переносимого shell-опыта используем простые sh, printf и wc; GNU-расширения подписываем как Ubuntu. Контейнер Linux на Mac использует Linux-VM, а не магически делает XNU Linux-ядром.
Аналогия: рецепт можно приготовить на другой кухне, но детали одной плиты не обязаны подходить другой.
Нет. Интерфейс исходника и бинарный ABI — разные уровни совместимости.
Почему /proc и /mnt/c выглядят как папки Единое дерево имён соединяет разные файловые системы.
Единое дерево Linux соединяет разные файловые системы в точках монтирования / Корень дерева /home Файлы пользователей /proc Данные ядра, не диск /mnt/c в WSL Файлы Windows Путь описывает место в дереве. Под ним может быть другая FS с другими свойствами. Их представление формируется ядром; это виртуальная файловая система.
Корень / — начало дерева путей. Mount присоединяет другую файловую систему в выбранной точке этого дерева: поэтому часть /home может жить на отдельном устройстве, а /proc показывать динамические сведения ядра. /proc/PID не является папкой с резервной копией памяти на диске; объекты там формирует ядро. В WSL путь /mnt/c даёт доступ к файловой системе Windows с особенностями интеграции и метаданных. Одинаковый вид в ls не доказывает одинаковые права, производительность и правила имени. Для проекта выбираем ~/devops-course в Linux rootfs. Команда findmnt показывает структуру mount; она Linux-специфична. В macOS для просмотра монтирований используют mount и df, а /proc по умолчанию нет. Не даём задания перемонтировать системные файловые системы.
Аналогия: карта с адресами может вести и в склад, и в справочную службу. Единый адресный формат не означает одинаковый источник данных.
Их представление формируется ядром; это виртуальная файловая система.
LiveUSB: корень системы можно собрать без установки Read-only образ и слой изменений дают обычное дерево файлов.
Live Linux: неизменяемый образ и слой изменений образуют рабочий корень USB / CD / ISO Загрузчик, ядро, initramfs SquashFS Сжатая read-only система RAM: tmpfs upper Записи пропадут после reboot Или persistence Постоянный раздел изменений Overlay root / Общий вид для приложений В типичном Live-режиме весь образ не обязан сразу копироваться в RAM. Kali использует эту общую механику. Live — способ загрузки. Установка на диск, запуск VM, Live и WSL — разные способы предоставить среду.
Носитель содержит загрузочные компоненты, ядро, раннюю среду и образ пользовательской системы. В распространённом Live Linux базовая система находится в сжатом SquashFS; OverlayFS объединяет её с writable-слоем. Изменение файла попадает в верхний слой, а исходный образ остаётся неизменным. Если верхний слой находится в RAM, изменения исчезнут после выключения; persistence хранит их на специально настроенном постоянном носителе. Режим copy-to-RAM может заранее скопировать образ, но он не обязателен: часто нужные блоки читаются с USB по мере использования и кэшируются. Поэтому фраза «всё целиком вгружается в оперативку» слишком груба. Kali Live использует общую Linux-механику, а не особое хакерское ядро. Live-среда удобна для восстановления файлов, проверки железа и работы с установленной системой, которая сейчас не загружена. Сам запуск Live не запрещает запись на внутренний диск: действия пользователя всё ещё могут его изменить.
Live — способ загрузки. Установка на диск, запуск VM, Live и WSL — разные способы предоставить среду.
Windows тоже запускает ремонтную ОС с носителя WinPE и исторический BartPE решали задачу работы вне установленной Windows.
Windows тоже может загрузить ремонтную среду с внешнего носителя USB / ISO Загрузочные файлы Boot Manager Выбор среды WinPE Образ boot.wim RAM-disk загрузка Windows PE Драйверы и инструменты Исторический BartPE Сборки из Windows XP / Server 2003 Современный WinPE ADK, развёртывание и восстановление Ремонтная среда не равна установленной Windows с тем же набором программ и лицензий. Формат Windows WIM и Linux SquashFS/Overlay различается; обе среды могут работать независимо от основной установленной ОС.
Windows PE — небольшая Windows-среда для установки, развёртывания и восстановления. Современная цепочка может загрузить boot.wim в RAM-disk, после чего работают драйверы, shell и ремонтные инструменты. Здесь сходство с Live Linux состоит в запуске самостоятельной среды с внешнего источника; детали образов и writable-слоя другие. В эпоху XP администраторы использовали сторонний PE Builder/BartPE и плагины для сборки загрузочной среды из файлов Windows XP или Server 2003. Это не доказательство, что обычная установленная XP автоматически полностью переносилась на любой CD. Историческую практику показываем как объяснение идеи, а не рекомендуем старую неподдерживаемую XP для работы. Ремонт установленной системы требует её корректного монтирования и понимания шифрования. Для практического показа достаточно ISO в отдельной VM: физическую флешку и основной диск студентов не перезаписываем.
Формат Windows WIM и Linux SquashFS/Overlay различается; обе среды могут работать независимо от основной установленной ОС.
Наблюдение механизмов ps -p 1 -o pid,comm,args
uname -srm
cat /etc/os-release
findmnt -T /proc
findmnt -T "$HOME"
# Optional Ubuntu trace of a new process
strace -e trace=openat,read,write /usr/bin/printf "hello\n"
lsblk -f
findmnt
cat /proc/cmdlineПолный разбор команд в конспекте → Разложите карточки «нет boot device», «не найден root», «failed unit», «HTTP 500» по стадиям. Объясните, почему WSL2 не проходит через GRUB студента. Сравните uname и PID 1, не меняя загрузку. Ubuntu: для необязательного strace понадобится sudo apt install strace. Mac: uname -srm; ps -p 1 -o pid,comm,args; mount; df -h. Windows PowerShell: Get-CimInstance Win32_OperatingSystem | Select-Object Caption,Version; Get-Process -Id $PID. Запуск Windows-команд выполняется отдельно от Ubuntu.
Рассмотрите Live-образ в отдельной VM. Найдите mount корня и writable-слой, создайте временный файл, после перезагрузки проверьте сохранение. Persistence — отдельная демонстрация; не используйте dd с диском ноутбука.
Команды и наблюдения Ubuntu / Bash
cd ~/devops-course
mkdir -p data results
printf "score
0.8
" > data/report.csv
ln -s data/report.csv latest.csv
pwd
ls -lah
file data/report.csv
stat data/report.csv
readlink latest.csvprintf создаёт небольшой текстовый файл. ln -s создаёт ссылку, а не копирует данные; повторно создавать существующее имя не нужно. Ожидаемое наблюдение: latest.csv указывает на data/report.csv; file сообщает текст; stat показывает владельца, размер и права.
Разбор результата latest.csv указывает на data/report.csv; file сообщает текст; stat показывает владельца, размер и права.
printf создаёт небольшой текстовый файл. ln -s создаёт ссылку, а не копирует данные; повторно создавать существующее имя не нужно.
Ссылка разрешается относительно папки, где лежит сама ссылка: из reports цель ../processed/input.txt верна. После mv processed/input.txt processed/renamed.txt создайте новую ссылку ln -sfn ../processed/renamed.txt reports/current.txt. Для сравнения копии используйте cmp raw/input.txt processed/renamed.txt; код возврата 0 означает одинаковые байты.
На macOS Основные пути и ссылки похожи; домашняя папка обычно /Users/имя. stat в macOS — BSD-вариант, поэтому используем -x вместо Linux-флагов. /proc по умолчанию отсутствует. APFS часто настроен без различения регистра, но это зависит от тома: не полагайтесь на такое поведение.
pwd
ls -lah
file data/report.csv
stat -x data/report.csv
readlink latest.csvКоманды macOS необходимо проверить на конкретном устройстве. Основные пути и ссылки похожи; домашняя папка обычно /Users/имя. stat в macOS — BSD-вариант, поэтому используем -x вместо Linux-флагов. /proc по умолчанию отсутствует. APFS часто настроен без различения регистра, но это зависит от тома: не полагайтесь на такое поведение.
Найти потерянный отчёт Создайте дерево raw, processed, reports в учебной папке. Поместите небольшой текст в raw/input.txt, скопируйте его в processed. Сделайте ссылку reports/current.txt на ../processed/input.txt. Переименуйте processed/input.txt и объясните, почему ссылка перестала открываться; восстановите цель или ссылку. Работа в парах: один оператор, второй проверяет гипотезу. Смена ролей в середине. Ссылка разрешается относительно папки, где лежит сама ссылка: из reports цель ../processed/input.txt верна. После mv processed/input.txt processed/renamed.txt создайте новую ссылку ln -sfn ../processed/renamed.txt reports/current.txt. Для сравнения копии используйте cmp raw/input.txt processed/renamed.txt; код возврата 0 означает одинаковые байты.
Что должно получиться Дерево папок и короткое объяснение абсолютного/относительного пути.
cat reports/current.txt читает ожидаемый текст; студент показывает pwd перед действиями.
Ссылка разрешается относительно папки, где лежит сама ссылка: из reports цель ../processed/input.txt верна. После mv processed/input.txt processed/renamed.txt создайте новую ссылку ln -sfn ../processed/renamed.txt reports/current.txt. Для сравнения копии используйте cmp raw/input.txt processed/renamed.txt; код возврата 0 означает одинаковые байты.
Ошибка для диагностики Ссылка указывает относительно неверной папки.
Симптом → Гипотеза → Проверка
Ссылка разрешается относительно папки, где лежит сама ссылка: из reports цель ../processed/input.txt верна. После mv processed/input.txt processed/renamed.txt создайте новую ссылку ln -sfn ../processed/renamed.txt reports/current.txt. Для сравнения копии используйте cmp raw/input.txt processed/renamed.txt; код возврата 0 означает одинаковые байты.
Основные выводы Корень дерева Linux. Имя не проверяет формат и содержимое. Корень дерева Linux.
Имя не проверяет формат и содержимое.
После пары Нарисовать дерево учебного проекта и подписать роли /home, /etc, /var, /tmp.
Конспект, команды и разбор → Проверьте критерии сдачи и дайте возможность повторной попытки. Первоисточники: https://ubuntu.com/server/docs/