Основы tmux
tmux сохраняет работающие процессы после разрыва SSH, размещая их внутри серверного процесса, который переживает закрытие терминала. Сессии содержат окна; окна содержат панели. Отсоединись с C-b d, переподключись через tmux attach — твоя работа там, где ты её оставил.
Ты запускаешь долгую миграцию базы данных через SSH. Через двадцать минут ноутбук закрывает крышку — SSH-соединение обрывается, и процесс миграции получает SIGHUP и умирает. Наполовину перенесённая база данных, испорченные выходные. tmux решает этот класс проблем раз и навсегда. Он запускает серверный процесс на удалённой машине, которому принадлежит твоя оболочка и все дочерние процессы. Когда SSH-соединение разрывается, сервер tmux продолжает работать. Когда ты переподключаешься, ты снова прикрепляешься к той же сессии и твой терминал ровно там, где ты его оставил — миграция на 78%, буфер прокрутки цел.
tmux также решает совершенно другую проблему: работу в нескольких контекстах в одном терминале. Сессии, окна и панели позволяют одновременно запустить сборку, следить за логами и редактировать конфиг в одном SSH-соединении.
После этого урока ты сможешь запустить именованную tmux-сессию, навигировать между сессиями, окнами и панелями с помощью префиксной клавиши C-b, отсоединиться от сессии через C-b d, переподключиться через tmux attach, и объяснить, почему сессии tmux переживают разрывы SSH, тогда как процессы в обычной SSH-оболочке — нет.
tmux переживает разрывы SSH, потому что его серверный процесс независим от SSH-сессии. При SSH без tmux:
SSH клиент → SSH-соединение → bash (твоя оболочка)
└─ твои процессы (дети bash)При разрыве SSH-соединения ядро отправляет SIGHUP bash. Bash отправляет SIGHUP всем своим детям, затем завершается. Твои процессы умирают.
С tmux:
SSH клиент → SSH-соединение → tmux клиент → tmux сервер (независимый процесс)
└─ твои сессии / окна / панелиСервер tmux запускается при первом запуске tmux. Он продолжает работать как демон на удалённой машине независимо от SSH-соединений. При разрыве SSH умирает только клиент tmux — сервер и всё внутри него продолжают работать. Переподключись через SSH, прикрепи клиента снова, и ты вернулся.
Запускай и именуй сессии; понимай трёхуровневую иерархию. Базовая иерархия:
- Сессия — коллекция окон; имеет имя; переживает отключения.
- Окно — один полноэкранный терминал внутри сессии; как вкладка браузера.
- Панель — прямоугольное разделение окна; каждая панель имеет собственную оболочку.
tmux new-session -s deploy # создать новую сессию с именем "deploy"
# или короче:
tmux new -s deployВнутри сессии зелёная строка состояния внизу показывает имя сессии, список окон и имя хоста. Всё, что ты делаешь внутри этой сессии, принадлежит серверу tmux и переживает разрыв SSH.
Список запущенных сессий снаружи tmux:
tmux list-sessions # или: tmux lsПрефиксная клавиша C-b предшествует каждой команде tmux. Все привязки клавиш tmux начинаются с нажатия Ctrl+b (префикс), его отпускания, затем нажатия командной клавиши. Ctrl не удерживается при нажатии второй клавиши.
Основные привязки:
| Действие | Клавиши |
|---|---|
| Отсоединиться от сессии | C-b d |
| Новое окно | C-b c |
| Следующее окно | C-b n |
| Предыдущее окно | C-b p |
| Список окон | C-b w |
| Переименовать окно | C-b , |
| Разделить панель горизонтально | C-b % |
| Разделить панель вертикально | C-b " |
| Перемещение между панелями | C-b + стрелка |
| Закрыть текущую панель | C-b x |
| Показать привязки клавиш | C-b ? |
Самое важное: C-b d отсоединяет тебя от сессии, не останавливая её. Всё внутри продолжает работать. Эта операция и делает tmux ценным для долгой удалённой работы.
Переподключайся к сессии через tmux attach. После отсоединения или после переподключения SSH:
tmux attach # прикрепиться к самой последней сессии
tmux attach -t deploy # прикрепиться к сессии с именем "deploy"
tmux a -t deploy # сокращениеЕсли у тебя несколько сессий и ты забыл их имена:
tmux ls
# deploy: 2 windows (created Mon Jun 21 10:30:00 2026)
# monitor: 1 windows (created Mon Jun 21 09:15:00 2026)Затем прикрепляйся по имени. При прикреплении терминал отображает сессию точно как она была: буфер прокрутки сохранён, процессы на середине выполнения, курсор там, где ты его оставил.
Уничтожить сессию (остановить всё внутри):
tmux kill-session -t deployОкна и панели позволяют мультиплексировать одно SSH-соединение. Практический рабочий процесс на удалённом сервере: одно окно для редактора, одно для сборки, одно для слежения за логами — всё в одном SSH-соединении с одной сессией tmux.
# Окно 0: запуск сборки
make build
# C-b c → новое окно
# Окно 1: следить за логами приложения
tail -f /var/log/app/production.log
# C-b c → новое окно
# Окно 2: мониторинг ресурсов
htop
# C-b n / C-b p → переключение между окнами
# C-b 0 / C-b 1 / C-b 2 → прыжок к окну по индексуПанели делят окно на области:
C-b % # разделить текущую панель влево/вправо
C-b " # разделить текущую панель вверх/вниз
C-b → # переместить фокус в правую панельКаждая панель — полноценная независимая оболочка. Можно смотреть логи в одной панели, редактируя конфиг в другой — всё в одном SSH-соединении.
Безопасный запуск долгой миграции базы данных через tmux.
# 1. SSH на сервер
ssh deploy@server.example
# 2. Запустить именованную tmux-сессию
tmux new -s migration
# 3. Запустить миграцию внутри сессии
cd /app && ./bin/migrate --env production
# 4. Миграция запущена. Нужно отойти.
# Отсоединиться, не останавливая миграцию:
# Нажми C-b d
# Вывод: [detached (from session migration)]
# 5. Теперь SSH-соединение может безопасно упасть.
# Сервер tmux сохраняет миграцию работающей.
# 6. Позже: снова SSH и переподключиться
ssh deploy@server.example
tmux attach -t migration
# Вывод миграции прокручен, и процесс
# всё ещё работает (или завершился) ровно там, где ты его оставил.Для дополнительной безопасности при многочасовых операциях также перенаправляй вывод в лог-файл — чтобы можно было просмотреть его даже если буфер прокрутки сессии был потерян:
./bin/migrate --env production 2>&1 | tee /var/log/migration-$(date +%Y%m%d).log▸Почему это работает
На macOS tmux не установлен по умолчанию. Установи через brew install tmux. Префиксная клавиша и все привязки идентичны на всех платформах. Одно macOS-специфичное поведение: интеграция буфера обмена требует либо reattach-to-user-namespace (старый подход), либо настройки set -g mouse on + pbcopy/pbpaste. На Linux аналогичный функционал предоставляют xclip или xsel. Для большинства удалённой работы интеграция буфера обмена не нужна — выделение самого терминального эмулятора справляется.
▸Частая ошибка
Не путай C-b d (отсоединиться, сессия продолжает работать) с закрытием окна терминала или вводом exit внутри tmux (что закрывает оболочку, и если это последняя оболочка в сессии — уничтожает сессию). Также: если ты SSH-ишь на сервер и запускаешь процесс напрямую — без tmux — nohup ./script & является запасным вариантом, предотвращающим убийство процесса через SIGHUP, но не даёт возможности переподключиться и видеть живой вывод. tmux — правильный инструмент. nohup — аварийный обходной путь, когда tmux недоступен.
Ты запускаешь долгий процесс внутри tmux-сессии. Твоё SSH-соединение обрывается. Что происходит с процессом?
tmux запускает серверный процесс на удалённом хосте, которому принадлежат твои сессии. При разрыве SSH отключается только клиент — сервер и все запущенные процессы продолжают работу. Сессии (именованные через -s) переживают отключения и содержат окна (как вкладки), которые содержат панели (разделения). Префиксная клавиша C-b предшествует каждой команде: C-b d отсоединяет (сессия продолжает работать), C-b c открывает новое окно, C-b %/C-b " делят панели. tmux attach -t имя переподключает тебя к существующей сессии с сохранённым буфером прокрутки. Для любой долгой удалённой задачи — миграций, сборок, деплоев — сначала запусти tmux, затем запускай команду внутри него.
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.