← КурсСамостоятельный просмотрПульт

Пара 1 / октябрь

История ОС: Unix, GNU, MINIX, Linux и дистрибутивы

Различать ядро, userland и дистрибутив; понимать происхождение GNU/Linux и подготовить Ubuntu WSL2.

Контекст

ОС появилась как способ использовать дорогое оборудование, а не как графический рабочий стол.

Различать ядро, userland и дистрибутив; понимать происхождение GNU/Linux и подготовить Ubuntu WSL2.

Первые ОС управляли очередью работы

ОС появилась как способ использовать дорогое оборудование, а не как графический рабочий стол.

От пакетных мониторов к Unix, GNU и Linux: исторический таймлайн1950-еПакетные мониторы1956 · GM-NAA I/OАвтоматизация запуска1960-е · time-sharingИнтерактивные сеансы1969 · UnixBell Labs, PDP-71983/84 · GNUСвободная Unix-среда1987 · MINIXУчебная Unix-подобная ОС1991 · LinuxНовое ядро для 3861993+ · сборкиЯдро + пакеты + userlandЭто временная шкала, не дерево прямого наследования кода; первые ОС не имели рабочего стола.

Пакетная обработка оптимизировала очереди; time-sharing дал интерактивность. Современная ОС объединяет множество таких механизмов.

Unix: реализация, семейство и влияние

Linux похож на Unix по интерфейсам, но не является переименованным MINIX.

Родство кода и влияние идей — разные связиUnix · Bell Labs1969, затем перенос на Cкод / развитиеBSDБеркли, Unix-ветвьDarwin / XNUMach + BSD-компонентыMINIX · 1987Таненбаум, учебный проектLinux · 1991Самостоятельное ядроGNU userlandНезависимая реализацияMINIX → Linux означает учебную среду и влияние, а не копирование кода MINIX.

Сплошные ветви BSD обозначают развитие кодовой семьи; связь MINIX и Linux поясняет учебную среду и влияние, без утверждения о копировании.

GNU появился раньше ядра Linux

Рабочая система состоит из ядра и множества пользовательских компонентов.

Дистрибутив собирает ядро и независимо развивающиеся компонентыLinuxЯдро, драйверы, syscallsGNUGCC, libc, Bash, coreutilsДругие проектыsystemd, OpenSSH, PythonДистрибутивПакеты, интеграция, обновленияGNU начат до Linux. Grep, sed и Bash — отдельные проекты, а не части пакета coreutils.

Linux — ядро. Дистрибутив собирает совместимые версии ядра, библиотек, утилит, служб и приложений.

Дистрибутив выбирает интеграцию и обновления

Происхождение пакетов объясняет совместимость, но не делает потомков одинаковыми.

Дистрибутивы: происхождение пакетов, политики и сборкиDebian · 1993deb / aptUbuntu · 2004Свои репозитории и выпускиMint / Zorin OSUbuntu-based редакцииKali · 2013Debian-based, security toolsFedora / RHELРазные RPM-циклыArch / AlpineДругие политики и userlandСхема выбранных семейств. LMDE основана на Debian; не все системы Linux используют GNU/glibc.

Дистрибутив задаёт пакеты, 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
Полный разбор команд в конспекте →

Windows, WSL2 и Ubuntu

WSL2 даёт Linux-среду внутри Windows.

01Windows
02WSL2 / ядро Linux
03Ubuntu
04Наш процесс

Папка /mnt/c доступна, но Windows и Linux имеют разные правила путей и прав.

Команды и наблюдения

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

Разбор результата

В PowerShell у Ubuntu VERSION = 2; в Ubuntu видны Linux-ядро, версия дистрибутива и домашняя папка /home/имя.

Установку и перезагрузку лучше выполнить до пары. Linux-команды запускаются после открытия Ubuntu; комментарий в примере обозначает границу сред.

На 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

Паспорт рабочего окружения

  1. Откройте Ubuntu и создайте ~/devops-course командой mkdir -p ~/devops-course.
  2. Сохраните в environment.txt версии ОС, ядра, имя пользователя и текущую папку.
  3. Сравните с соседом: какие различия важны для воспроизводимости?
  4. Нарисуйте путь будущего изменения: код → проверка → запуск → пользователь.

Что должно получиться

environment.txt и схема из четырёх шагов.

WSL2 подтверждён из Windows; рабочая папка находится в /home; студент различает PowerShell и Bash.

Ошибка для диагностики

Вместо команды Linux в PowerShell получена ошибка. Найдите границу окружений, не устанавливайте случайный аналог команды.

Симптом→Гипотеза→Проверка

Основные выводы

  1. Unix дал влиятельную модель процессов, файлов и пользовательских инструментов.
  2. GNU и Linux развивались как самостоятельные проекты; дистрибутив собирает их с другими компонентами.

После пары

Завершить настройку WSL2, принести паспорт окружения. Подготовить один пример «работает только у меня».

Конспект, команды и разбор →

Где выполняется приложение?

Windows

Приложение / PowerShell

Win32 / .NET

NT + драйверы

Ubuntu

Приложение / Bash

libc / системные вызовы

Linux + драйверы

macOS

Приложение / zsh

Frameworks / libSystem

XNU: Mach + BSD

WSL2 и Docker Desktop добавляют Linux-среду поверх ОС хоста.

Пара 2 / октябрь

Загрузка ОС: firmware, ядро, драйверы и Live-среды

Связать команды терминала с устройством ОС и найти файлы учебного проекта.

Контекст

Legacy BIOS читает bootstrap-код, UEFI запускает EFI-программу.

Связать команды терминала с устройством ОС и найти файлы учебного проекта.

Ядро и пользовательские программы

Shell передаёт задачи программам; ядро управляет ресурсами.

01Терминал
02Bash
03Программа
04Ядро → ресурсы

Аналогия: окно заказа, диспетчер и работники склада выполняют разные роли.

Единое дерево каталогов

Путь / начинается от корня Linux, а ~ — от дома пользователя.

01/
02home / студент
03devops-course
04data / results

Аналогия: полный адрес здания и указание «через соседнюю дверь» — абсолютный и относительный путь.

Файл, ссылка и устройство

Имя файла не равно его содержимому.

01report.txt
02Содержимое
03latest → report.txt
04Метаданные stat

Аналогия: ссылка — записка с адресом; переезд адресата может сделать её бесполезной.

Windows, Linux и macOS: три разных ядра

Похожие команды не означают одинаковое устройство ОС.

01Windows / NT
02Ubuntu / Linux
03macOS / XNU

Аналогия: три здания имеют комнаты и двери, но инженерные коммуникации и ключи разные.

BIOS и UEFI начинают загрузку по-разному

Legacy BIOS читает bootstrap-код, UEFI запускает EFI-программу.

BIOS/MBR и UEFI/ESP — две разные схемы начала загрузкиBIOSLegacy firmwareЗагрузочный секторMBR / bootstrapGRUBМногоэтапный загрузчикLinux + initramfsПараметры загрузкиUEFIBoot entries в NVRAMESPФайловая система FATEFI-программаshim / GRUB / stubLinux + initramfsЗатем init системыUEFI не обязан выполнять цепочку BIOS/MBR. Secure Boot — проверка доверия, не антивирус.

Наличие UEFI не означает обязательный GRUB. Внешний USB тоже может содержать EFI-загрузчик и полноценную Live-среду.

Драйверы связывают ядро с устройствами

Драйвер, модуль ядра и firmware устройства — связанные, но разные вещи.

Драйвер переводит общий запрос в операции конкретного устройстваПриложениеread / socket / ioctlПодсистема ядраVFS / сеть / USBДрайверПротокол устройстваКонтроллерNVMe, Wi-Fi, GPUFirmware устройстваМикрокод, другой слойДрайвер может быть встроен в ядро или загружен модулем. Firmware устройства — не UEFI компьютера.

Ubuntu: lspci -k, lsmod, modinfo имя_модуля, journalctl -k -b. В VM и WSL состав устройств отличается от физического PC.

Как Ubuntu доходит до PID 1

Каждый этап передаёт управление следующему; терминал появляется в конце.

Загрузка Ubuntu на UEFI: firmware, загрузчик, ядро, initramfs, настоящий корень и PID 1UEFIНаходит EFI-программуshim / GRUBЯдро + initramfs + параметрыЯдро LinuxCPU, память, устройстваinitramfs: ранняя средаДрайверы → расшифровка → mount rootswitch rootНастоящий / и systemd PID 1Службы, сеансы, вход пользователяТипичный пример Ubuntu; EFI stub / UKI и другие загрузчики меняют детали.

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

Зачем нужен initramfs

Чтобы открыть настоящий корень, иногда сначала нужна маленькая среда в памяти.

Временная корневая файловая система помогает открыть настоящуюВременный / в RAMinitramfs: /init, утилиты, модулиДискРаздел с будущим /найтиОткрыть устройствоRAID / шифрованиеСмонтировать rootНапример, /sysrootПерейти к новому /exec init настоящей ОСЯдро уже работает. Эта стадия решает доступ к root, а не запускает BIOS.

В ранней среде и цепочке доступа к root; пользовательский Bash ещё не нужен.

Отказы на разных стадиях загрузки

Последний успешный этап сужает круг причин.

Диагностика загрузки по последнему достигнутому этапуUEFI / загрузчикНет boot deviceЯдро / initramfsНе найден rootsystemdUnit failedПриложениеHTTP 500Загрузка EFIДиск, ESP, entryУстройство rootUUID, драйвер, ключЖурнал службыExecStart, праваЛоги запросаВход, код, данныеСимптом после входа в систему уже не объясняется отсутствием загрузчика.

Нет. Ответ приложения доказывает прохождение многих нижних слоёв; начинаем с запроса и логов сервиса.

WSL2: путь запуска другой

Windows уже работает, когда вы открываете Ubuntu.

WSL2 запускается внутри работающей Windows, а не через GRUB студентаWindows уже загруженаNT, службы, пользовательwsl.exe → WSLЗапрос запуска дистрибутиваLinux VMЯдро WSL2Ubuntu rootfsPID 1 systemd, если включёнBash / приложениеПроцессы пользователяВ WSL2 студент не меняет UEFI/GRUB. Windows остаётся ОС хоста.

Нет. Ядро запущено инфраструктурой WSL2, а не обычной цепочкой загрузки отдельной Ubuntu на PC.

Три ОС: одинаковые роли, разные механизмы

Сравниваем firmware, ядро и службы; не называем macOS Linux.

Похожие роли при разных цепочках загрузки ОСUBUNTU / UEFIUEFI → GRUBТипичная конфигурацияLinux → initramfsПереход к rootsystemd → службыPID 1, затем пользовательWINDOWS / UEFIBoot Managerbootmgfw.efiwinload.efi → NTЯдро и boot-драйверыСистемные процессыSMSS, SCM, вход пользователяMAC / APPLE SILICONBoot ROM → LLBЦепочка доверияiBoot → XNUПроверка загрузкиlaunchd → службыPID 1, затем сеансы

Нет. Нужна конфигурация соответствующего менеджера и проверка конкретного приложения.

Что происходит при чтении файла

Приложение обращается к ядру; shell не читает диск за каждую программу.

Программа запрашивает ресурсы у ядра через системный вызовПОЛЬЗОВАТЕЛЬСКИЙ РЕЖИМPython: open(path)Код приложенияRuntime / libcПодготовить запросread / openatРЕЖИМ ЯДРАLinux: VFS и драйверПроверить права, выполнить I/Oрезультат или errnoЖелезо / устройстваДиск, сеть, таймероперацияВызов функции Python не всегда равен одному syscall. Кэш и буферы меняют путь.

Права пользователя и режим CPU — разные вещи. Доступ к ресурсам идёт через интерфейсы ядра.

POSIX: общий договор о поведении

Стандарт описывает интерфейсы, а не устройство конкретного ядра.

POSIX задаёт общий контракт, реализации и расширения различаютсяPOSIX: API + shell + утилитыПроцессы, файлы, потоки, стандартное поведениеLinux + libcGNU-инструменты, systemdmacOS / DarwinlibSystem, BSD, launchdWindows + WSL2POSIX-интерфейсы в LinuxPOSIX не требует systemd, apt, /proc, GNU-флагов или одинакового бинарного формата.

Первый использует широко доступный стандартный интерфейс; systemctl обращается к конкретному менеджеру systemd.

Переносимый исходник ≠ переносимый бинарник

API, команды, ABI и архитектуру процессора проверяем отдельно.

Переносимость исходника, команды и готового бинарного файла — разные свойстваСкрипт: sh + printfСтандартный интерфейсПроверить на целевых ОСКавычки, пути, locale и доступность утилитsed -i / statGNU и BSD отличаютсяУказать конкретный вариантman на нужной машине; не копировать флаги вслепуюLinux ELF-бинарникОжидает Linux ABIНа macOS напрямую не запускаетсяНужен совместимый build / runtime / Linux VM

Нет. Интерфейс исходника и бинарный ABI — разные уровни совместимости.

Почему /proc и /mnt/c выглядят как папки

Единое дерево имён соединяет разные файловые системы.

Единое дерево Linux соединяет разные файловые системы в точках монтирования/Корень дерева/homeФайлы пользователей/procДанные ядра, не диск/mnt/c в WSLФайлы WindowsПуть описывает место в дереве. Под ним может быть другая FS с другими свойствами.

Их представление формируется ядром; это виртуальная файловая система.

LiveUSB: корень системы можно собрать без установки

Read-only образ и слой изменений дают обычное дерево файлов.

Live Linux: неизменяемый образ и слой изменений образуют рабочий кореньUSB / CD / ISOЗагрузчик, ядро, initramfsSquashFSСжатая read-only системаRAM: tmpfs upperЗаписи пропадут после rebootИли persistenceПостоянный раздел измененийOverlay root /Общий вид для приложенийВ типичном Live-режиме весь образ не обязан сразу копироваться в RAM. Kali использует эту общую механику.

Live — способ загрузки. Установка на диск, запуск VM, Live и WSL — разные способы предоставить среду.

Windows тоже запускает ремонтную ОС с носителя

WinPE и исторический BartPE решали задачу работы вне установленной Windows.

Windows тоже может загрузить ремонтную среду с внешнего носителяUSB / ISOЗагрузочные файлыBoot ManagerВыбор среды WinPEОбраз boot.wimRAM-disk загрузкаWindows PEДрайверы и инструментыИсторический BartPEСборки из Windows XP / Server 2003Современный WinPEADK, развёртывание и восстановлениеРемонтная среда не равна установленной Windows с тем же набором программ и лицензий.

Формат 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
Полный разбор команд в конспекте →

Команды и наблюдения

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.csv

Разбор результата

latest.csv указывает на data/report.csv; file сообщает текст; stat показывает владельца, размер и права.

printf создаёт небольшой текстовый файл. ln -s создаёт ссылку, а не копирует данные; повторно создавать существующее имя не нужно.

На macOS

Основные пути и ссылки похожи; домашняя папка обычно /Users/имя. stat в macOS — BSD-вариант, поэтому используем -x вместо Linux-флагов. /proc по умолчанию отсутствует. APFS часто настроен без различения регистра, но это зависит от тома: не полагайтесь на такое поведение.

pwd
ls -lah
file data/report.csv
stat -x data/report.csv
readlink latest.csv

Найти потерянный отчёт

  1. Создайте дерево raw, processed, reports в учебной папке.
  2. Поместите небольшой текст в raw/input.txt, скопируйте его в processed.
  3. Сделайте ссылку reports/current.txt на ../processed/input.txt.
  4. Переименуйте processed/input.txt и объясните, почему ссылка перестала открываться; восстановите цель или ссылку.

Что должно получиться

Дерево папок и короткое объяснение абсолютного/относительного пути.

cat reports/current.txt читает ожидаемый текст; студент показывает pwd перед действиями.

Ошибка для диагностики

Ссылка указывает относительно неверной папки.

Симптом→Гипотеза→Проверка

Основные выводы

  1. Корень дерева Linux.
  2. Имя не проверяет формат и содержимое.

После пары

Нарисовать дерево учебного проекта и подписать роли /home, /etc, /var, /tmp.

Конспект, команды и разбор →