Лекция 1. Введение в Linux

1. Зачем изучать Linux

Несмотря на скромную долю на десктопах (около 3–4% по данным StatCounter на 2026 год), Linux фактически управляет остальной инфраструктурой мира:

  • серверы — свыше половины мирового рынка серверных ОС;
  • облака и Kubernetes — подавляющее большинство продакшн-кластеров;
  • суперкомпьютеры и вычислительные кластеры — 100% из топ-500 самых мощных систем в мире работают на Linux;
  • мобильные устройства — Android (основан на ядре Linux) занимает большую часть мирового рынка мобильных ОС;
  • встраиваемые системы — Raspberry Pi, смарт-ТВ, автомобильная электроника, сетевое оборудование, IoT.

Вывод: десктопный Linux — нишевая история, серверный и инфраструктурный Linux — то, с чем ежедневно работают разработчики (деплой, окружение разработки, CI/CD) и особенно инженеры DevOps (вся продакшн-инфраструктура).

Кому в первую очередь нужен Linux:

  • разработчикам ПО (локальная среда разработки, серверный деплой, контейнеры);
  • DevOps- и системным инженерам (администрирование инфраструктуры);
  • специалистам по данным и научным работникам (кластеры, вычисления).

Совместимость Linux со стандартом POSIX означает, что базовые принципы работы (файлы, процессы, права доступа, командная строка) унифицированы с другими UNIX-подобными системами — то, что вы изучите здесь, переносится на macOS, BSD и подобные ОС.

2. Философия «всё есть файл»

Одна из ключевых идей UNIX-подобных систем: максимально возможное число сущностей представлено как файлы с единым интерфейсом чтения/записи.

  • Обычные данные — файлы.
  • Устройства (диск, терминал, аудиокарта) — файлы в /dev.
  • Информация о работающих процессах — файлы в /proc.
  • Настройки ядра — файлы в /sys.
  • Даже сетевые сокеты и каналы (pipes) представлены файловыми дескрипторами.

Практическое следствие: одни и те же команды (cat, read, write, перенаправление >/<) работают с совершенно разными сущностями. Это отличается от подхода Windows, где для устройств, реестра и процессов используются разные API.

3. Ядро и дистрибутив

Ядро (kernel) — центральная часть ОС, которая:

  • предоставляет прикладным программам среду для работы;
  • организует совместную работу нескольких программ;
  • управляет ресурсами: процессорным временем, памятью, устройствами ввода-вывода;
  • реализует базовые абстракции — файл, процесс, сетевое соединение.

Ядро Linux создано Линусом Торвальдсом в 1991 году и с тех пор развивается силами глобального открытого сообщества.

Только ядра недостаточно для работы — нужна экосистема системного и прикладного ПО: утилиты, компиляторы, командный интерпретатор и т. д. Большая часть базовых утилит в мире Linux происходит из проекта GNU (Free Software Foundation, GNU Coreutils, Bash, GCC и др.) — отсюда более точное название системы, «GNU/Linux».

Дистрибутив = ядро Linux + системное ПО + прикладное ПО + пакетный менеджер

4. Основные семейства дистрибутивов

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

Семейство Debian

  • Debian — один из старейших дистрибутивов (с 1993 года), известен консервативным подходом к стабильности. Существует в трёх ветках: Stable (максимально протестированная), Testing (готовится стать следующим Stable) и Unstable/Sid (самые свежие пакеты).
  • Ubuntu — построен на базе Debian, поддерживается компанией Canonical. Имеет чёткий график релизов (апрель/октябрь), раз в два года выходит LTS-версия с длительной поддержкой. Ubuntu Server — один из самых распространённых серверных дистрибутивов.
  • Производные: Linux Mint, Kali Linux (для ИБ), MX Linux и др.
  • Пакетный менеджер: APT, формат пакетов .deb.

Семейство RedHat / RHEL

  • Red Hat Enterprise Linux (RHEL) — коммерческий дистрибутив с платной поддержкой, стандарт для многих корпоративных серверов.
  • Fedora — бесплатный дистрибутив, на котором RedHat обкатывает новые технологии перед их попаданием в RHEL.
  • AlmaLinux, Rocky Linux — свободные пересборки RHEL (появились после закрытия CentOS как бесплатного клона).
  • Oracle Linux, Amazon Linux — варианты от облачных провайдеров.
  • Пакетный менеджер: DNF (ранее YUM), формат пакетов .rpm.

Прочие семейства

  • Arch Linux — независимый rolling-release дистрибутив, пакетный менеджер pacman, максимальная гибкость и новизна ПО, но требует больше экспертизы.
  • SUSE / openSUSE — ещё одно крупное корпоративное семейство, распространено в Европе.

Fixed release vs rolling release

  • Фиксированные релизы (Debian, Ubuntu, RHEL) — выходят по графику или по готовности, имеют оговорённый срок поддержки, обновления безопасности в течение этого срока. Переход на новую major-версию — контролируемое событие.
  • Плавающие (rolling) релизы (Arch и производные) — система непрерывно обновляется без выхода дискретных версий. Всегда свежее ПО, но выше риск поломок при обновлении.

Для серверного/промышленного применения почти всегда выбирают дистрибутивы с фиксированными релизами — предсказуемость важнее новизны.

5. Способы установки и запуска Linux

На практике редко ставят Linux “с нуля на голое железо” — есть несколько типовых сценариев, и в рамках курса вы столкнётесь с несколькими из них:

Способ Когда используется Особенности
Bare-metal Выделенные серверы, рабочие станции Максимальная производительность, полный доступ к железу, но негибко (нельзя быстро “пересобрать” систему)
Виртуальная машина (VM) Локальная разработка, тестовые стенды, часть облачных серверов Изоляция от хост-ОС, снапшоты, легко воссоздать окружение; есть накладные расходы виртуализации
WSL (Windows Subsystem for Linux) Разработка на Windows-машине Позволяет запускать Linux-инструменты без полноценной VM; удобно для dev-окружения, не подходит как замена серверу
Облачный сервер (VPS/Cloud VM) Продакшн-инфраструктура, учебные лабораторные стенды Аренда вычислительных мощностей (AWS EC2, Google Cloud, Yandex Cloud и др.), доступ обычно только по SSH

В рамках практических работ мы будем подключаться к учебным серверам по SSH — то есть работать с системой, у которой нет графического интерфейса, только командная строка. Это сознательный выбор: именно так выглядит 95% реальной работы с Linux-серверами.

6. Работа в терминале

Что такое shell

Shell (командная оболочка) — программа, которая читает команды пользователя и передаёт их ядру ОС. Самая распространённая оболочка — Bash (Bourne Again Shell), используется по умолчанию в большинстве дистрибутивов. Есть и альтернативы (zsh, fish), но синтаксис Bash — стандарт, который стоит знать в первую очередь.

Базовые приёмы работы, которые экономят время

  • Автодополнение (Tab) — начните вводить имя команды, файла или пути и нажмите Tab. Двойное нажатие Tab Tab покажет все варианты.
  • История команд — стрелки / листают ранее введённые команды; команда history покажет весь список.
  • Обратный поиск по историиCtrl+R и начните вводить часть команды — shell найдёт последнюю подходящую.
  • Горячие клавиши редактирования строки: Ctrl+A/Ctrl+E — в начало/конец строки, Ctrl+U — очистить строку, Ctrl+C — прервать выполнение, Ctrl+D — конец ввода/выход.
  • Точка с запятой и &&команда1; команда2 выполнит обе последовательно; команда1 && команда2 выполнит вторую только если первая завершилась успешно.

Эти навыки будут отрабатываться на первой же практической работе — без них дальнейшая работа с сервером превращается в мучение.

7. Справочная система

Прежде чем гуглить — почти всегда можно найти ответ прямо в системе:

  • man <команда> — полное руководство (man page). Разделено на секции (1 — команды пользователя, 5 — форматы файлов, 8 — команды администрирования и т. д.). Навигация: пробел/b — вперёд/назад, /слово — поиск, q — выход.
  • <команда> --help — краткая справка по флагам, обычно быстрее, чем man.
  • tldr <команда> — сообщество-ориентированная альтернатива man: только практические примеры без академического многословия. Нужно установить отдельно.
  • apropos <ключевое слово> — поиск команд по описанию, если не помните точное название.
  • whatis <команда> — одна строка с кратким описанием команды.

Совет как для разработчиков, так и для DevOps: умение быстро найти нужный флаг в man/--help — куда более ценный навык, чем попытка запомнить все опции наизусть.

8. Обзор пакетных менеджеров

Пакетный менеджер — инструмент, который устанавливает, обновляет и удаляет ПО, разрешая зависимости автоматически. На уровне концепции (детали — в практике 5):

Семейство Пакетный менеджер Формат пакетов
Debian/Ubuntu apt (обёртка над dpkg) .deb
RHEL/Fedora/Alma dnf (ранее yum) .rpm
Arch/Manjaro pacman .pkg.tar.zst

Общая идея одинакова для всех: есть локальный индекс доступных пакетов (обновляется из репозиториев), команда установки разрешает зависимости и скачивает всё необходимое. Разные дистрибутивы — разный синтаксис команд, но одна и та же логика.

9. Идентификация дистрибутива и версии ядра

Полезные команды, чтобы понять, с какой именно системой вы работаете (пригодится с первой же практики по SSH):

uname -a          # версия ядра и архитектура
cat /etc/os-release # имя и версия дистрибутива (современный стандарт)
cat /etc/*-release  # альтернативный способ на старых системах
lsb_release -a      # описание дистрибутива (если установлен пакет lsb-release)

10. Карта курса: что дальше и зачем

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

Важно для всех (разработчикам и DevOps в равной мере):

  • работа в терминале и bash-скрипты — повседневный инструмент;
  • файловая система и права доступа — основа безопасности и отладки;
  • процессы и службы — понимание, что происходит с вашим приложением на сервере;
  • Docker — стандарт упаковки приложений сегодня.

Особенно важно для будущих DevOps-инженеров:

  • пользователи, группы и права — администрирование доступа;
  • сети — диагностика, firewall, работа с портами;
  • диски и LVM — управление хранилищем на сервере;
  • Docker Compose — оркестрация нескольких сервисов.

Особенно важно для будущих разработчиков:

  • установка ПО и окружений — настройка dev-среды;
  • скрипты и автоматизация — CI/CD, локальные утилиты;
  • работа с веб-серверами — как запускается и отдаётся ваше приложение.

Для тех, кто увлечётся администрированием — курс сознательно оставляет ряд тем на уровне введения (сетевая безопасность, ACL, механизмы виртуализации на уровне ядра). Это не пробел, а точка входа в углубленный курс по администрированию Linux, где эти темы разбираются глубоко.

11. Расширение кругозора

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

11.1. От UNIX к Linux

Linux не является прямым продолжением исходной UNIX-системы.

ОС UNIX, была разработана в Bell Labs (исследовательское подразделение AT&T) в конце 1960-х — начале 1970-х годов Кеном Томпсоном, Деннисом Ритчи и их коллегами. Уже в раннем UNIX появились идеи, которые сегодня легко узнать в Linux:

  • иерархическая файловая система
  • единый интерфейс работы с файлами и устройствами
  • оболочка (shell)
  • перенаправление ввода-вывода и конвейеры (pipes)

Особенно важно что ядро UNIX было написано на языке C. Это резко упростило перенос операционной системы на разные архитектуры и оказало огромное влияние на дальнейшее развитие системного программирования.

В дальнейшем возникло несколько крупных ветвей Unix-подобных систем:

  • BSD — семейство систем, исторически происходящее от Berkeley Software Distribution; из него выросли, например, FreeBSD, OpenBSD и NetBSD;
  • macOS — коммерческая система Apple на базе Darwin и компонентов BSD/Unix;
  • Linux — отдельное ядро, вокруг которого сформировалась экосистема GNU/Linux;
  • Unix в узком смысле — семейство систем, связанное с историческими и коммерческими реализациями UNIX.

Linux, созданный Линусом Торвальдсом в 1991 году, был новым Unix-подобным ядром и не содержал исходного кода UNIX. Поэтому корректнее говорить, что Linux вдохновлён архитектурой и традициями UNIX, а не является его версией.

Знания о процессах, файловой системе, приемах работы в оболочке (shell), правах доступа и системных вызовах полезны далеко за пределами конкретного дистрибутива Linux.

11.2. GNU, Ричард Столлман и почему иногда говорят «GNU/Linux»

UNIX является коммерческим программным продуктом и распространяется с проприетарной лицензией. В 1983 году Ричард Столлман объявил о начале проекта GNU. Название GNU — рекурсивная аббревиатура от GNU’s Not Unix. Цель проекта заключалась в создании свободной Unix-совместимой операционной системы. В 1985 году Столлман основал Free Software Foundation (FSF) для поддержки движения за свободное программное обеспечение.

Здесь важно не смешивать три разных понятия:

  • GNU — проект и набор программ, предназначенных для создания свободной Unix-подобной системы;
  • FSF — организация, созданная для поддержки движения и проектов свободного ПО;
  • GPL — семейство свободных лицензий, разработанных в рамках GNU/FSF.

К началу 1990-х годов в GNU уже существовали многие важные компоненты пользовательской среды, включая компилятор GCC, оболочку bash и большое количество системных утилит. Не хватало главного компонента — полноценного ядра. В 1991 году Линус Торвальдс начал разработку Linux; в результате объединения ядра Linux с большим количеством компонентов GNU появилась система, которую технически правильнее называть GNU/Linux.

Linux в широком, обиходном смысле означает семейство операционных систем.

Linux в узком, строгом смысле это название ядра ОС.

GNU/Hurd — это дистрибутив ОС с микроядерным ядром Hurd. Ядро Hurd продолжает разрабатываться энтузиастами GNU и является экспериментальным.

11.3. Лицензии открытого ПО

Open Source Software (Открытое ПО): Программное обеспечение, исходный код которого открыт и доступен для просмотра, изменения и легального распространения любыми пользователями. Главные цели — совместное развитие, прозрачность и улучшение качества софта силами мирового сообщества.

Лицензии типа «Copyleft»: «Если используете мой код, то ваш код тоже должен быть открытым».

  • Лицензия GPL (General Public License): Самая строгая «копилефт» (copyleft) лицензия. Обязывает любого, кто изменяет и распространяет этот код, открывать свои модификации под той же лицензией GPL. Запрещает делать производный продукт закрытым или коммерческим без публикации исходного кода (именно под GPL распространяется ядро Linux).
  • Лицензия LGPL (Lesser GPL): Смягченный вариант GPL, созданный в основном для библиотек программного обеспечения. Разрешает связывать этот код с закрытыми коммерческими программами. При этом изменения самого кода библиотеки по-прежнему обязаны оставаться открытыми.
  • Лицензия AGPL (Affero GPL): Самая строгая сетевая копия GPL. Создана специально для закрытия «SaaS-лазейки» в обычной GPL. Если программа работает на сервере и пользователи взаимодействуют с ней удаленно через интернет (например, облачная база данных), AGPL обязывает владельца сервера предоставить исходный код сервиса по первому требованию.

Крупные компании (Google, Apple, Microsoft) не хотят использовать лицензии GPL. Они не могут использовать копилефтный код в своих коммерческих продуктах, так как это заставит их открыть коммерческие секреты. Permissive-лицензии (MIT, Apache) позволяют им спокойно брать код, дорабатывать его и продавать внутри закрытого ПО.

Разрешительные лицензии (Permissive):

  • «Делайте что хотите, только укажите мое авторство»: MIT / ISC / BSD / Apache
  • «Это общественное достояние, делайте что хотите»: Unlicense / MIT-0

Copyleft защищает свободу самого кода (гарантирует, что код навсегда останется открытым).

Permissive защищает свободу пользователя (дает право делать с кодом абсолютно всё что угодно, включая закрытие и коммерциализацию).

11.4. Linux делают не только энтузиасты

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

В разработку ядра Linux десятилетиями вкладываются компании, которым оно необходимо для их продуктов и инфраструктуры. Среди крупных участников в разные периоды были и остаются Intel, IBM, Red Hat, Google, Samsung, AMD, SUSE, Microsoft, Oracle, NVIDIA и другие. Компании оплачивают работу разработчиков, создают драйверы и подсистемы, исправляют ошибки, улучшают производительность и поддерживают архитектуры, которые важны для их бизнеса.

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

Именно здесь появляется одна из важных идей современной разработки ПО:

Open source не означает «никому не принадлежит и никто не зарабатывает». Это модель совместной разработки, в которой компании, разработчики и сообщества могут иметь разные интересы, но работать с общей кодовой базой.

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

11.5. Linux бывает очень разным

Мы будем работать преимущественно с распространёнными серверными дистрибутивами, но слово «Linux» скрывает огромное разнообразие систем.

Несколько необычных примеров:

  • Alpine Linux — минималистичный дистрибутив, ориентированный на безопасность и экономию ресурсов. Использует musl libc, BusyBox и пакетный менеджер apk; особенно интересен для контейнеров и небольших систем.
  • NixOS — дистрибутив, в котором конфигурация системы задаётся декларативно. Это позволяет описывать систему как конфигурацию, воспроизводить её на другой машине и откатывать изменения.
  • OpenWrt — Linux-дистрибутив для встраиваемых устройств, прежде всего сетевого оборудования и маршрутизаторов. Он превращает многие бытовые роутеры в настраиваемые Linux-компьютеры с пакетным менеджером.
  • Gentoo — дистрибутив, известный установкой и настройкой ПО с большим количеством параметров сборки. Хороший пример того, насколько глубоко пользователь Linux может контролировать состав системы.
  • Linux From Scratch (LFS) — не обычный готовый дистрибутив, а учебный проект: пользователь самостоятельно собирает Linux-систему из исходных кодов. Это особенно интересный способ понять, из каких компонентов вообще состоит операционная система.

Полезно воспринимать эти системы не как «лучшие» или «хуже» Ubuntu/Debian/RHEL, а как разные ответы на разные инженерные задачи.

Литература

  • Дмитрий Кетов. Внутреннее устройство Linux
  • Михаэль Кофлер. Linux. Установка, администрирование, настройка
  • Уильям Шоттс. Командная строка Linux