Введение
Если вы когда-нибудь хотели разобраться, что заставляет GNU/Linux работать, вы попали по адресу. Я уже годы вожусь с этой системой, и для тех, кто любит копаться в технологиях, это настоящая находка. GNU/Linux — это не просто одна штука, это сочетание ядра Linux и набора ПО от GNU, которые вместе запускают всё — от крошечных Raspberry Pi до огромных серверов. В этой статье я разберу технические детали: ядро, инструменты GNU, файловая структура, файловые системы, программирование и даже графика. Никакой воды — только суть, объяснённая так, как я бы рассказал другу за чашкой кофе. Поехали!

Ядро Linux: основа системы
Ядро Linux — это основа GNU/Linux. Оно отвечает за связь с вашим оборудованием — процессором, оперативкой, диском, сетевой картой — и делает так, чтобы программы могли это использовать. Без ядра ваша система — просто бесполезная коробка.
Когда вы включаете машину с GNU/Linux, ядро стартует после того, как загрузчик (например, GRUB) передаёт ему управление. Оно инициализирует оборудование, загружает драйверы и настраивает управление памятью. Например, оно определяет, сколько у вас оперативки, и распределяет её между процессами. Ещё оно управляет многозадачностью — если вы запускаете Firefox и плеер, ядро переключается между ними так быстро, что вы этого не замечаете.
Драйверы тут играют важную роль. Это куски кода, которые позволяют ядру общаться с конкретным оборудованием, например, с Wi-Fi или SSD. Большинство встроены в ядро или загружаются как модули. Скажем, я подключаю USB-флешку, ядро видит её через модуль usb-storage
и делает доступной.
Ядро также предоставляет системные вызовы — это как крючки, которыми пользуются инструменты GNU. Хотите открыть файл? Системный вызов open()
говорит ядру это сделать. Так ядро Linux и компоненты GNU держатся вместе. Пример из жизни: когда я загружаю свой Arch Linux, ядро подключает драйвер intel_pstate
для управления питанием процессора, а потом передаёт управление системе init
(например, systemd), которая дружит с GNU.
Компоненты GNU: основа пользовательского пространства
Ядро — это здорово, но без инструментов для работы с ним оно бесполезно. Тут на сцену выходит GNU. Проект, начатый Ричардом Столлманом в 1983 году, создал набор ПО для работы с ядром — Linux заполнил этот пробел в 1991-м.
Ключевые части GNU — это coreutils
(команды вроде ls
, cp
, mv
), bash
(оболочка, куда я ввожу команды), glibc
(библиотека C, связывающая программы с ядром) и GCC
(компилятор для сборки софта). Всё это живёт в «пользовательском пространстве» — области над ядром, где работают программы пользователя.
Возьмём bash
. Когда я ввожу ls -l
(на некоторых системах это dir
, но GNU использует ls
), это программа из coreutils
, которая через glibc
вызывает системный вызов readdir()
, чтобы показать файлы. Ядро берёт данные из файловой системы и возвращает их. Это замкнутый цикл: инструменты GNU просят, ядро выполняет.
Пример: я пишу программу на C, которая выводит «Привет, мир!» с помощью GCC
. Код такой:
#include <stdio.h>
int main() {
printf("Привет, мир!\n");
return 0;
}
Компилирую её командой gcc hello.c -o hello
, и GCC
через glibc
подключает функции ядра, вроде write()
для вывода. Запускаю ./hello
, и ядро выводит текст. GNU и Linux тут как команда — один делает инструменты, другой их запускает.
Файловая структура и файловые системы
В GNU/Linux всё организовано в единой файловой иерархии, начиная с /
. Это стандарт иерархии файловой системы (FHS), карта того, где что лежит. Вот основные директории:
/bin
: основные утилиты, вродеls
иcat
./etc
: файлы конфигурации, например,/etc/passwd
с данными о пользователях./usr
: программы и библиотеки для пользователей./var
: логи и временные файлы./home
: домашние папки пользователей.
Тут нет отдельных дисков, как C: или D: в Windows — всё под /
. Например, мой внешний диск может быть примонтирован в /mnt/usb
, и ядро это обрабатывает.
Файловые системы — это способ хранения данных. Ядро поддерживает кучу вариантов: ext4
(стандарт для большинства дистрибутивов), Btrfs
(удобно для снимков), XFS
(быстро для больших файлов). У каждой своя структура — например, ext4
использует иноды для отслеживания файлов. Когда я монтирую диск командой mount /dev/sdb1 /mnt/usb
, ядро читает суперблок (кусок метаданных) и открывает доступ.
Попробуйте: выполните ls /etc
, чтобы посмотреть конфиги. Отредактируйте /etc/fstab
, чтобы диск монтировался при загрузке — ядро читает этот файл через инструменты GNU, такие как mount
.
Программирование в GNU/Linux
Программировать в GNU/Linux — одно удовольствие, потому что всё открыто. Ядро предоставляет системные вызовы — read()
, write()
, fork()
— а glibc
оборачивает их для программ на C. Вот простая программа для чтения файла:
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("test.txt", O_RDONLY);
char buf[100];
read(fd, buf, 99);
write(1, buf, 99); // 1 = stdout
close(fd);
return 0;
}
Компилирую её с gcc read.c -o read
, запускаю, и она выводит содержимое test.txt
. Ядро тут всё делает — open()
создаёт дескриптор файла, read()
берёт данные с диска.
Скрипты на bash — ещё одна фишка. Вот проверка использования диска:
#!/bin/bash
df -h | grep '/dev/sda1' | awk '{print $5}'
Делаю chmod +x disk.sh
, затем ./disk.sh
, и вижу, сколько занято на корневом разделе. Bash опирается на инструменты GNU (df
, grep
, awk
), а те — на ядро.
Графика и системы отображения
Графика в GNU/Linux работает через X11 или Wayland. X11 — это классика, сервер, который общается с фреймбуфером ядра (например, /dev/fb0
) или драйверами GPU, такими как intel
или nvidia
. Wayland — новее, работает напрямую с DRM (Direct Rendering Manager) ядра для плавного рендеринга.
Драйверы GPU важны. Открытые (как intel
) — это модули ядра, а проприетарные (как от NVIDIA) добавляют свои слои. Чтобы проверить X11, запускаю startx
с простым .xinitrc
— открывается окно через графический стек ядра.
Сборка всего вместе: день из жизни
Загружаете систему: GRUB запускает ядро, оно инициализирует оборудование и монтирует /
(например, ext4
на /dev/sda1
). Система init
(systemd, дружащая с GNU) запускает службы из /etc
. Вы входите через bash
, компилируете программу с gcc
, открываете Firefox через X11. Ядро управляет процессами, памятью и вводом-выводом, а инструменты GNU делают это удобным. Выключаете машину — ядро сбрасывает данные на диск и отключается.
Установите, например, htop
: sudo pacman -S htop
(на Arch). Это инструмент GNU, показывающий процессы, которыми управляет ядро — запустите и посмотрите.
Заключение
GNU/Linux крут, потому что ядро и инструменты GNU идеально сливаются. Ядро управляет оборудованием, файловыми системами и процессами, а GNU даёт вам инструменты для контроля. От написания кода на C до настройки графики — это мечта любителя покопаться. Я возвращаюсь к нему снова и снова, потому что это не просто ОС, а площадка, где вы главный.