Что такое Linux и зачем он бэкендеру

Ты пишешь код на macOS или Windows. Запускаешь go run main.go, всё работает. Потом деплоишь - и сервер на Linux. Если ты не понимаешь, что там происходит, любой инцидент в проде превращается в гадание. Docker-контейнеры - это процессы Linux под изоляцией.

Почему Linux

  • 96% серверов в интернете работают на Linux
  • Docker-контейнеры - это Linux внутри
  • CI/CD пайплайны - Linux
  • Облака (AWS, GCP, Yandex Cloud) - по умолчанию Linux

Даже если ты разрабатываешь на Mac - под капотом Darwin, Unix-подобная система. Команды терминала почти те же.

Откуда взялся Linux

В 1969 году в Bell Labs появился Unix - операционная система, которая впервые отделила ядро от пользовательских утилит и сделала ставку на простые команды и пайпы. К 80-м из неё выросло целое семейство: BSD, Solaris, AIX, HP-UX. Все платные, все несовместимые между собой.

В 1991 году финский студент Линус Торвальдс написал свободное Unix-подобное ядро и опубликовал его под лицензией GPL. Это и есть Linux. Само ядро - только часть истории: вокруг него выросли GNU-утилиты Ричарда Столлмана (bash, gcc, coreutils) и проект systemd. Связка «ядро Linux + GNU userspace» - то, с чем ты сталкиваешься на любом сервере.

Что важно для бэкендера: Linux наследует Unix-философию - маленькие утилиты, делающие одно дело хорошо, и комбинируемые через пайпы. Поэтому grep | sort | uniq -c | sort -rn работает и на Ubuntu 2026 года, и на FreeBSD 1995-го.

Дистрибутивы: что выбрать

Дистрибутив - это ядро Linux + набор утилит + пакетный менеджер + соглашения о настройках. Ядро у всех одинаковое, а вот набор софта и философия разные.

ДистрибутивГде встречаетсяПакетный менеджерРазмер базового образа
Ubuntu / DebianVPS, CI/CD, Docker-образыapt~70 МБ (slim)
AlpineDocker (минимальные образы)apk~5 МБ
CentOS / Rocky / RHELEnterprise-серверыyum / dnf~80 МБ
ArchРабочие станции, rolling releasepacman-

Для бэкенда правило простое: Ubuntu LTS для VPS и dev-окружения, Alpine для финальных Docker-образов (меньше слой → быстрее pull → меньше attack surface). Если попал в банк или госконтору - там почти наверняка RHEL/Rocky.

macOS - это Unix-система. Большинство команд, которые ты выучишь здесь, работают и на Mac. Разница - в пакетном менеджере (brew вместо apt) и в деталях вроде путей к конфигам.

Как практиковаться

Три способа, от простого к серьёзному:

  1. Терминал на Mac/Linux - уже готов, открой Terminal
  2. Docker - docker run -it ubuntu:22.04 bash и ты внутри Linux
  3. VPS - арендуй за 200 руб/мес и получи настоящий сервер
# Способ 2: Linux за 5 секунд
docker run -it --rm ubuntu:22.04 bash

Ядро, shell и userspace

Три слоя, которые нужно различать:

┌──────────────────────────┐
│  Приложения (nginx, Go)  │  ← userspace
├──────────────────────────┤
│  Shell (bash, zsh)       │  ← интерпретатор команд
├──────────────────────────┤
│  Ядро Linux (kernel)     │  ← управляет железом
└──────────────────────────┘
  • Ядро - управляет памятью, процессами, сетью, файловой системой
  • Shell - принимает твои команды и передаёт ядру
  • Userspace - всё остальное: приложения, утилиты, сервисы

Ты работаешь в shell. Ядро делает грязную работу.

Файловая система: FHS

Linux использует единое дерево каталогов начиная от / (root). Стандарт FHS (Filesystem Hierarchy Standard) говорит, где что лежит - и его соблюдают практически все дистрибутивы:

/etc          ← конфиги (nginx.conf, /etc/passwd, /etc/hosts)
/var/log      ← логи сервисов
/var/lib      ← состояние приложений (БД, кэши)
/usr/bin      ← пользовательские бинарники
/usr/local    ← софт, установленный вручную, а не пакетным менеджером
/opt          ← стороннее ПО (часто - твоё приложение)
/home/<user>  ← домашний каталог обычного пользователя
/root         ← домашний каталог root
/tmp          ← временные файлы (чистится при перезагрузке)
/proc, /sys   ← виртуальные ФС: ядро отдаёт информацию о процессах и железе как файлы

Запомни: первое, что делаешь при инциденте - идёшь в /var/log смотреть логи сервиса.

Документация: man и info

На сервере не всегда есть интернет, и Stack Overflow - не помощник. Но в самой системе уже встроена справка:

man ls            # подробная справка по команде ls
man 5 crontab     # секция 5 - формат конфиг-файлов
man -k network    # поиск по ключевому слову
ls --help         # короткая справка от самой утилиты
info coreutils    # GNU info - гипертекстовый формат

Структура man-страницы стандартна: NAME, SYNOPSIS, DESCRIPTION, OPTIONS, EXAMPLES, SEE ALSO. Привыкни читать man - на проде это часто быстрее, чем гуглить.

Пакетный менеджер: первое, что осваиваешь после ssh

Любая работа с сервером начинается с установки софта. На Ubuntu это apt:

sudo apt update                  # синхронизация индексов
sudo apt install -y nginx git    # установка
sudo apt remove nginx            # удаление
sudo apt list --upgradable       # что можно обновить
apt show curl                    # описание пакета
dpkg -l | grep nginx             # что уже установлено

В Alpine аналог называется apk:

apk add --no-cache git curl      # --no-cache не сохраняет индекс - Docker-friendly
apk del git                       # удаление

Логика одна и та же: репозиторий → индекс → установка. Различаются имена пакетов: php8.2-cli в Ubuntu vs php82 в Alpine. Когда переезжаешь с одного дистрибутива на другой - это самая частая причина «команда не найдена».

systemd: как сервис становится сервисом

Современные дистрибутивы (Ubuntu 16.04+, Debian 8+, RHEL 7+) используют systemd как init-систему. Это значит, твоё приложение в проде - это не просто запущенный бинарник, а unit-файл вроде /etc/systemd/system/myapp.service. systemd следит за процессом, перезапускает после падения, читает логи в journald, останавливает в правильном порядке при выключении.

Минимальный набор команд, который встретишь в первый же день на сервере:

sudo systemctl start nginx       # запустить
sudo systemctl stop nginx        # остановить
sudo systemctl restart nginx     # перезапустить
sudo systemctl status nginx      # текущее состояние
journalctl -u nginx -f           # логи в реальном времени

Этому посвящён отдельный урок про процессы - здесь главное помнить, что в Linux 2026 года почти всё крутится под systemd, и без него ты на проде не сделаешь ни шагу.

Мини-задание

  • Открой терминал и выполни uname -a - узнай, на чём работает твоя система
  • Запусти cat /etc/os-release (на Linux/Docker) - посмотри дистрибутив
  • Если есть Docker - попробуй docker run -it --rm alpine sh

Итог

  • Linux - это среда, где живёт твой код в проде. Знать её - не опционально.
  • Ubuntu - хороший старт для серверов, Alpine - для Docker.
  • Практиковаться можно прямо сейчас: терминал на Mac или docker run.

Типичная ошибка

Думать «я же бэкендер, а не девопс». На деле, если ты не можешь прочитать логи на сервере или перезапустить сервис - ты не бэкендер, ты фронтендер с Go-компилятором.

Мини-практика

Запусти docker run -it --rm ubuntu:22.04 bash. Внутри контейнера выполни: whoami, pwd, ls /, cat /etc/os-release. Цель - почувствовать, что Linux-терминал не кусается.

Зарегистрируйтесь бесплатно, чтобы пройти квиз, решить задание с автопроверкой и вести прогресс.