Распространённый вопрос на форумах, экзаменах и собеседованиях: Linux — это ядро или операционная система? Технически Linux — это ядро. Операционная система строится вокруг него: оболочка, утилиты, библиотеки, менеджер пакетов, графическое окружение. Но в бытовом смысле «Linux» часто называют всю систему целиком.
Разберём разницу, из чего складывается дистрибутив и почему это важно на практике.
Что такое ядро
Ядро управляет ресурсами: процессами, памятью, устройствами, сетью. Оно обеспечивает системные вызовы, через которые приложения просят систему выполнить операции. Без ядра ничего не работает.
# посмотреть ядро
uname -a
uname -r
cat /proc/version
# доступные системные вызовы (пример)
man 2 intro 2>/dev/null | head -20
Что ещё входит в систему
Помимо ядра: libc (C-библиотека), оболочка (bash), coreutils (ls, cp, mv), утилиты системы (systemd), пакетный менеджер, графическое окружение и приложения. Всё это вместе и есть операционная система.
# компоненты
lsb_release -a 2>/dev/null || cat /etc/os-release
bash --version | head -1
ls --version | head -1
ldd --version | head -1
systemctl --version | head -1
GNU/Linux
Часть сообщества говорит «GNU/Linux», подчёркивая вклад проекта GNU: оболочки, компилятор, утилиты. Другие используют «Linux» для краткости. Оба варианта понятны, но технически система — это ядро Linux плюс пользовательское пространство.
# проверить компоненты GNU
ls /bin/g* 2>/dev/null | head
# или просто
dpkg -l | grep -c . # количество пакетов (Debian/Ubuntu)
rpm -qa | wc -l # для RPM-дистрибутивов
Что такое дистрибутив
Дистрибутив — это набор: конкретная версия ядра, пакеты, инструменты установки, репозитории, политики обновлений и поддержка. Ubuntu, Mint, Fedora, Debian и Arch используют одно ядро, но дают разный опыт.
# опознать дистрибутив
cat /etc/os-release
# какое ядро используется
uname -r
# сколько пакетов доступно
apt list 2>/dev/null | wc -l
Почему это важно
- Проблема в ядре и проблема в приложении решаются по-разному.
- Обновление ядра не обновляет пользовательское пространство.
- Дистрибутив определяет доступные версии пакетов.
- Одно приложение может работать в разных системах, если есть библиотеки.
# диагностика: где проблема
uname -r # версия ядра
systemctl --failed # службы
journalctl -b -p err | tail -30
# версии библиотек
dpkg -l | grep libc6 | head
Системные вызовы
Граница между ядром и приложениями — системные вызовы: открыть файл, создать процесс, отправить пакет. Утилиты strace и ltrace показывают, что происходит.
# посмотреть вызовы команды
strace -f -e trace=openat,read,write ls /tmp 2>&1 | head -30
# сколько вызовов делает процесс
strace -c ls /tmp 2>&1 | tail -15
Модульность ядра
Ядро состоит из ядра и модулей. Модули подключаются драйверами и функциями по мере необходимости. Это позволяет одному ядру работать с тысячами устройств.
# загруженные модули
lsmod | head -20
# сколько всего
lsmod | wc -l
# информация о модуле
modinfo ext4 2>/dev/null | head -15
# поиск модуля
find /lib/modules/$(uname -r) -name "*.ko*" | head -10
Пересборка ядра
Если нужно, ядро собирают из исходников — но большинству пользователей достаточно ядра дистрибутива. Пересборка требует компилятора, времени и осторожности.
# зависимости для сборки (Ubuntu)
sudo apt install build-essential libncurses-dev flex bison libssl-dev libelf-dev
# конфигурация
make menuconfig
# сборка (займёт время)
make -j$(nproc)
# установка (осторожно)
sudo make modules_install install
sudo update-grub
Перед пересборкой сохраните текущее ядро и будьте готовы вернуться в GRUB.
Как проверить, что вы используете именно дистрибутив
Одна и та же программа работает по-разному в зависимости от пакетного менеджера, systemd-юнитов и путей. Проверяйте, какой менеджер пакетов и инициализации у вас.
# пакетный менеджер
which apt dnf pacman zypper 2>/dev/null
# система инициализации
systemctl --version | head -1
# окружение
echo $XDG_CURRENT_DESKTOP
# версии ключевых библиотек
ldd --version | head -1
Эти сведения пригодятся при установке программ: инструкции для одного дистрибутива не всегда подходят другому.
Место ядра в загрузке
Загрузчик (GRUB) передаёт управление ядру, ядро инициализирует оборудование, запускает init и дальше поднимает сервисы. Понимание этой цепочки помогает искать ошибки точнее.
# цепочка загрузки
systemd-analyze
systemd-analyze blame | head -15
# что было в прошлой загрузке
journalctl -b -1 | tail -30
# параметры загрузки
cat /proc/cmdline
Интерфейсы между ядром и пространством
Виртуальная файловая система /proc и /sys отдают информацию о системе, а системные вызовы — способ выполнять операции. Зная это, можно быстро читать состояние без сторонних утилит.
# версия и параметры ядра
cat /proc/version
cat /proc/sys/kernel/osrelease
# устройства и драйверы
ls /sys/bus/*/drivers 2>/dev/null | head
# ограничения процесса
ulimit -a
Помните: одно ядро может обслуживать разные дистрибутивы, но пользовательское пространство у них разное. Именно поэтому инструкции различаются.
# сравнить с другими системами
cat /etc/os-release | head -2
uname -r
Итог
Linux технически — ядро, а операционная система включает пользовательское пространство и дистрибутивные инструменты. Разница важна при диагностике: ядро, службы и приложения чинятся по-разному. Используйте uname, systemctl, journalctl и lsmod, чтобы понять, на каком уровне проблема.