Что такое 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 / Debian | VPS, CI/CD, Docker-образы | apt | ~70 МБ (slim) |
| Alpine | Docker (минимальные образы) | apk | ~5 МБ |
| CentOS / Rocky / RHEL | Enterprise-серверы | yum / dnf | ~80 МБ |
| Arch | Рабочие станции, rolling release | pacman | - |
Для бэкенда правило простое: Ubuntu LTS для VPS и dev-окружения, Alpine для финальных Docker-образов (меньше слой → быстрее pull → меньше attack surface). Если попал в банк или госконтору - там почти наверняка RHEL/Rocky.
Как практиковаться
Три способа, от простого к серьёзному:
- Терминал на Mac/Linux - уже готов, открой Terminal
- Docker -
docker run -it ubuntu:22.04 bashи ты внутри Linux - 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-терминал не кусается.