open atlas
↑ К треку
Командная строка CLI · 09 · 04

Основы tmux

tmux сохраняет работающие процессы после разрыва SSH, размещая их внутри серверного процесса, который переживает закрытие терминала. Сессии содержат окна; окна содержат панели. Отсоединись с C-b d, переподключись через tmux attach — твоя работа там, где ты её оставил.

CLI Senior ◷ 25 min
Уровень
ОсновыJuniorMiddleSenior

Ты запускаешь долгую миграцию базы данных через SSH. Через двадцать минут ноутбук закрывает крышку — SSH-соединение обрывается, и процесс миграции получает SIGHUP и умирает. Наполовину перенесённая база данных, испорченные выходные. tmux решает этот класс проблем раз и навсегда. Он запускает серверный процесс на удалённой машине, которому принадлежит твоя оболочка и все дочерние процессы. Когда SSH-соединение разрывается, сервер tmux продолжает работать. Когда ты переподключаешься, ты снова прикрепляешься к той же сессии и твой терминал ровно там, где ты его оставил — миграция на 78%, буфер прокрутки цел.

tmux также решает совершенно другую проблему: работу в нескольких контекстах в одном терминале. Сессии, окна и панели позволяют одновременно запустить сборку, следить за логами и редактировать конфиг в одном SSH-соединении.

Цель

После этого урока ты сможешь запустить именованную tmux-сессию, навигировать между сессиями, окнами и панелями с помощью префиксной клавиши C-b, отсоединиться от сессии через C-b d, переподключиться через tmux attach, и объяснить, почему сессии tmux переживают разрывы SSH, тогда как процессы в обычной SSH-оболочке — нет.

1

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, прикрепи клиента снова, и ты вернулся.

2

Запускай и именуй сессии; понимай трёхуровневую иерархию. Базовая иерархия:

  • Сессия — коллекция окон; имеет имя; переживает отключения.
  • Окно — один полноэкранный терминал внутри сессии; как вкладка браузера.
  • Панель — прямоугольное разделение окна; каждая панель имеет собственную оболочку.
tmux new-session -s deploy    # создать новую сессию с именем "deploy"
# или короче:
tmux new -s deploy

Внутри сессии зелёная строка состояния внизу показывает имя сессии, список окон и имя хоста. Всё, что ты делаешь внутри этой сессии, принадлежит серверу tmux и переживает разрыв SSH.

Список запущенных сессий снаружи tmux:

tmux list-sessions   # или: tmux ls
3

Префиксная клавиша 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 ценным для долгой удалённой работы.

4

Переподключайся к сессии через 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
5

Окна и панели позволяют мультиплексировать одно 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-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources1
expand
  1. 01

Trademarks belong to their respective owners. Editorial reference only.