Прямой ответ
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 обычно и ставят:
ssh devbox→tmux new -A -s work(создать или присоединиться).- Работаете: долгие сборки, миграции, логи — всё в сессии на сервере.
- Обрыв связи/закрыли крышку — ничего не умерло.
- Вернулись:
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 (ссылки в шапке).