Перейти к основному содержимому

Linux для бэкенд-разработчика

Разработчику Инженеру

Большинство бэкендов в продакшене работают на Linux (или совместимых системах). Вам не нужно становиться администратором, но без базовой «консольной грамотности» отладка в Docker/Kubernetes превращается в угадывание.

Связанные материалы: терминал, администрирование Linux, компетенции бэкенда.


Минимальный набор команд

ЗадачаКоманды
Где я, что в каталогеpwd, ls -la, cd
Прочитать конфиг / логcat, less, tail -f /var/log/...
Найти файл или строкуfind, grep -r
Место на дискеdf -h, du -sh *
Кто слушает портss -tlnp или netstat (если установлен)
Проверить HTTP с сервераcurl -v http://127.0.0.1:8080/health

Пайп | соединяет вывод одной команды со входом другой: cat app.log | grep ERROR | tail -20.

Перенаправление: > перезаписывает файл, >> дописывает, 2> — поток ошибок. Так пишут скрипты деплоя и cron-задачи.

Примеры для отладки API на сервере:

# Кто слушает порт 8080
ss -tlnp | grep 8080

# Время DNS, TCP, TTFB (удобно сравнивать с DevTools)
curl -s -o /dev/null -w \
"dns:%{time_namelookup}s connect:%{time_connect}s ttfb:%{time_starttransfer}s total:%{time_total}s\n" \
http://127.0.0.1:8080/health

# Хвост логов с фильтром
tail -f /var/log/myapp/app.log | grep ERROR

PID (Process ID) — номер процесса в ОС. Файловый дескриптор (FD) — «ручка» к открытому файлу или сокету; утечки соединений к БД — это часто незакрытые FD. ulimit -n — лимит FD на пользователя/сессию; при too many open files его поднимают вместе с настройкой пулов (бэкенд).


Процессы и сигналы

Запущенное приложение — процесс с PID. Веб-серверы часто используют модель master + worker: мастер принимает соединения, воркеры обрабатывают запросы.

СигналДействиеКогда использовать
SIGTERMКорректное завершение (graceful)Остановка сервиса, rolling deploy
SIGKILLНемедленное убийствоПроцесс завис и не реагирует на SIGTERM
SIGHUPПеречитать конфиг (у части демонов)Смена nginx без полного рестарта

Команды: ps aux, top / htop, kill <pid>, kill -9 <pid>.

Зомби-процессы — дочерние процессы, завершившиеся, но не «подобранные» родителем. Симптом: много записей defunct в ps. Лечится исправлением кода (ожидание дочерних) или перезапуском родителя.


Дескрипторы и лимиты

Сокет, файл, pipe — в ядре это файловые дескрипторы (числа 0, 1, 2 — stdin/stdout/stderr).

Типичная авария под нагрузкой: too many open files. Причины:

  • утечка соединений к БД без закрытия;
  • HTTP без keep-alive и тысячи коротких TCP;
  • лимит ulimit -n ниже, чем нужно приложению.

Диагностика: lsof -p <pid> — какие файлы и сокеты открыты процессом. На высоком уровне — метрики активных соединений и настройка пулов (бэкенд).


Память и OOM

free -h показывает RAM и swap. OOM Killer — механизм ядра: при нехватке памяти ядро завершает «жертву» (часто самый прожорливый процесс). В логах: dmesg, Out of memory: Kill process.

Для разработчика:

  • задавайте лимиты контейнера осознанно;
  • следите за утечками (рост RSS во времени);
  • не кэшируйте без TTL всё подряд в heap.

Сервисы и планировщик

systemd управляет демонами: systemctl status myapp, journalctl -u myapp -f — логи сервиса.

cron — повторяющиеся задачи (очистка, отчёты). at — разовый запуск в заданное время.

Фон в текущей сессии: command &, nohup command & — процесс переживёт закрытие терминала (с оговорками для контейнеров).


SSH и перенос артефактов

На сервере нет браузера — отладка через SSH и curl. Копирование дампа БД или логов: scp, для больших объёмов — rsync.

Не работайте постоянно под root: лишние права = лишний риск при компрометации.


Типовой сценарий отладки

  1. Воспроизвести на staging.
  2. tail -f логов + корреляция по request_id.
  3. Проверить health зависимостей (БД, Redis).
  4. Сравнить метрики до и после деплоя.

Что изучать дальше


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).