Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → tmux и терминал в работе разработчика: сессии, окна, SSH

tmux для разработчика: сессии, которые переживают обрывы, и терминал без хаоса

Зачем разработчику tmux: сессии и окна вместо десятка вкладок, переживание обрыва SSH, локальные раскладки под проекты, базовый конфиг и связка с remote-разработкой.

Прямой ответ

tmux решает три конкретные боли разработчика: процессы переживают закрытие терминала и обрыв связи (сессия живёт на машине, а не в окне); раскладка окон воспроизводится (проект = сессия с готовым набором панелей: редактор, сервер, логи, тесты); одна SSH-сессия вместо десяти (на сервере живёте в tmux, обрыв Wi-Fi в кафе не убивает долгую сборку). Ресурсы ничтожны: сервер tmux потребляет единицы мегабайт. Базовый навык осваивается за вечер: префикс Ctrl-b, затем c (новое окно), d (отцепиться), %/" (панели), tmux attach — вернуться.

Модель: сессия → окно → панель

Сессия — «рабочий стол» проекта: tmux new -s backend. Внутри окна (вкладки) и панели (сплиты экрана). Ключевое отличие от вкладок терминала: сессия принадлежит системе, а не графическому окну. Закрыли ноутбук, оборвался SSH, терминал упал — процессы продолжают работать; возврат: tmux attach -t backend.

Практическая раскладка на проект:

tmux new -s backend -d      # создать отцепленной
tmux send-keys -t backend "cd ~/proj && nvim ." Enter      # окно 1: редактор
tmux new-window -t backend -n server
tmux send-keys -t backend:server "docker compose logs -f" Enter
tmux new-window -t backend -n test
tmux attach -t backend

Эти строки складываются в скрипт devup — механика написания таких обёрток описана в статье про автоматизацию рутины.

Минимальный конфиг, который стоит сделать сразу

~/.tmux.conf:

set -g mouse on                  # мышь: выбор панелей, скролл, ресайз
set -g history-limit 50000       # буфер прокрутки
set -g base-index 1              # окна с 1, не с 0
setw -g mode-keys vi             # vi-навигация в режиме копирования
set -g default-terminal "tmux-256color"

Перечитать конфиг в живой сессии: tmux source-file ~/.tmux.conf. Дальше этого идти не обязательно — плагины (tpm, resurrect) полезны, но базовый tmux закрывает 90% потребностей; чрезмерно обвешанный конфиг — частая причина «tmux тормозит», хотя сам по себе он невесом.

tmux и SSH: главный сценарий

Связка, ради которой tmux обычно и ставят:

  1. ssh devbox → tmux new -A -s work (создать или присоединиться).
  2. Работаете: долгие сборки, миграции, логи — всё в сессии на сервере.
  3. Обрыв связи/закрыли крышку — ничего не умерло.
  4. Вернулись: ssh devbox -t tmux attach -t work — ровно та же картина.

Это же фундамент remote-разработки: VS Code Remote-SSH управляет своим подключением, но серверные процессы (dev-серверы, воркеры) надёжнее держать в tmux-сессии — причины и настройка удалённого сценария в статье про SSH и Tunnels. Вложенность запрещена: tmux внутри tmux по SSH конфликтует префиксами — на локальной машине работайте без tmux либо меняйте префикс (set -g prefix C-a) на одной из сторон.

Локальная разработка: нужен ли tmux без SSH?

Аргументы «за» на ноутбуке: один терминал вместо шести (экономия окон и памяти — каждое окно Windows Terminal/консоли держит свой процесс-хост); воспроизводимая раскладка проекта; длинный лог живёт в буфере сессии, а не в скроллбэке окна. Аргументы «против» — привычка к GUI-вкладкам и мыши: с set -g mouse on разница минимальна. На Windows tmux живёт в WSL2 — там же, где и ваша Linux-разработка (см. WSL2 и Docker); в нативном PowerShell его роль частично играет сам Windows Terminal с профилями.

Привычки, которые окупаются

  • Именуйте сессии по проектам (backend, infra, ml) — tmux ls становится списком задач, а не кашей из цифр.
  • Убивайте мёртвые сессии: tmux kill-session -t old — забытые сессии держат процессы (демоны, watchers) и память.
  • Долгие задачи — только в сессии: npm run build, миграции, docker compose up не должны зависеть от живого окна.
  • Копипаст между панелями — режим копирования (Ctrl-b [, vi-навигация); в GUI-терминале проще выделить мышью с зажатым Shift.
  • Не запускайте в tmux интерактивные GUI-приложения — он для терминальных задач; редактор внутри панели — дело вкуса, но отладчики и GUI-профайлеры оставьте снаружи.

FAQ

tmux или GNU screen? tmux: активная разработка, мышь, панели из коробки, современная документация. screen встречается на старых серверах — знание базовой пары команд (screen -r) полезно, ставить его себе — нет.

zellij — замена tmux? Современная альтернатива с дружелюбными подсказками по умолчанию. Попробовать можно; но tmux есть на любом сервере без установки, и это решает для рабочих сценариев.

Сколько памяти ест tmux? Сервер сессии — единицы МБ; память потребляют запущенные в нём процессы. Сам tmux в бюджете ОЗУ ноутбука не учитывается.

Сохраняются ли сессии между перезагрузками машины? Нет: перезагрузка убивает сервер tmux. Для восстановления раскладки используйте скрипты-devup или плагин resurrect — но запущенные процессы в любом случае придётся перезапустить.

Рабочий день с tmux: конкретный сценарий

Утро: tmux new -A -s api — сессия проекта поднялась или вернулась. Окно 1 — редактор, окно 2 (Ctrl-b c) — dev-сервер с логами, окно 3 — psql и тесты. Панель в окне 2 (Ctrl-b ") — docker compose ps под рукой. Все переходы — с клавиатуры: Ctrl-b 1/2/3, между панелями Ctrl-b стрелки (с мышью — просто кликом). Обед: закрыли крышку — процессы живы. Вернулись — tmux attach, картина та же, логи на месте.

Вечером долгая миграция: запустили в окне 3, Ctrl-b d — отцепились, ноутбук можно нести домой (если миграция идёт на сервере по SSH — она переживёт и дорогу). На следующий день tmux attach показывает результат. Этот паттерн — «процесс принадлежит сессии, а не окну» — единственная причина, по которой tmux живёт в рабочем стеке уже двадцать лет: GUI-терминалы меняются, модель остаётся. Для многопроектной работы заведите привычку: один проект — одна именованная сессия, список tmux ls читается как список открытых задач, а лишнее убивается tmux kill-session вместо блуждания по вкладкам.

Как передать коллеге раскладку сессии? Сессия живёт только на вашей машине, но раскладка описывается скриптом: несколько tmux new-window/send-keys в общем репозитории — и коллега поднимает идентичное окружение одной командой. Для сложных раскладок есть tmuxinator/tmuxp (конфиг в YAML), но для 3–5 окон обычный скрипт прозрачнее.

Стоит ли держать tmux запущенным постоянно? Сам сервер почти ничего не потребляет, но забытые сессии держат ваши процессы — watchers, демонов, хвосты логов. Раз в неделю просматривайте tmux ls и убивайте лишнее: это дисциплина, а не проблема tmux.

Источники: wiki и man tmux, документация Windows Terminal (ссылки в шапке).