Gymterview
middle

Что такое мультиплексоры терминала screen и tmux?

Мультиплексоры терминала — программы, позволяющие в одном терминале создавать несколько виртуальных сессий, переключаться между ними и, главное, отсоединяться от сессии с возможностью вернуться позже. Процессы в сессии мультиплексора продолжают работать даже после закрытия терминала или обрыва SSH-соединения.

Аналогия: мультиплексор — это рабочий стол с несколькими мониторами, где каждый монитор можно включить/выключить, а программы на них продолжают работать. Даже если вы уйдёте из кабинета (закроете SSH), вернувшись, найдёте всё в том же состоянии.

screen — классический мультиплексор

Пример
# Создать новую сессию
screen
screen -S mysession              # С именем

# Управление сессиями
screen -ls                       # Список сессий
screen -r mysession              # Подключиться к сессии
screen -d -r mysession           # Отсоединить от другого терминала и подключить здесь

Основные горячие клавиши (префикс Ctrl+a):

Комбинация Действие
Ctrl+a c Создать новое окно
Ctrl+a n / Ctrl+a p Следующее / предыдущее окно
Ctrl+a " Список окон
Ctrl+a 0-9 Перейти к окну по номеру
Ctrl+a d Отсоединиться (detach)
Ctrl+a k Закрыть окно (kill)

tmux — современный мультиплексор (рекомендуется)

tmux использует иерархию: сессия -> окна -> панели (panes).

Пример
# Управление сессиями
tmux                             # Новая сессия
tmux new -s dev                  # Новая сессия с именем "dev"
tmux ls                          # Список сессий
tmux attach -t dev               # Подключиться к сессии
tmux kill-session -t dev         # Удалить сессию

Горячие клавиши tmux (префикс Ctrl+b)

Комбинация Действие
Ctrl+b d Отсоединиться от сессии (detach)
Ctrl+b c Создать новое окно
Ctrl+b n / Ctrl+b p Следующее / предыдущее окно
Ctrl+b 0-9 Перейти к окну по номеру
Ctrl+b , Переименовать окно
Ctrl+b % Разделить панель вертикально
Ctrl+b " Разделить панель горизонтально
Ctrl+b стрелки Переключение между панелями
Ctrl+b z Развернуть/свернуть панель (zoom)
Ctrl+b x Закрыть текущую панель
Ctrl+b [ Режим прокрутки (q для выхода)

Сравнение screen и tmux

Характеристика screen tmux
Разделение на панели Ограниченное Полноценное
Скриптовость Слабая Отличная (tmux send-keys и др.)
Статусная строка Базовая Гибко настраиваемая
Копирование/вставка Неудобное Режим vi/emacs
Активная разработка Практически нет Активная

Типичный workflow Java-разработчика с tmux

Пример
# Создать сессию для проекта
tmux new -s myproject

# Окно 0: редактор (vim/nano)
# Ctrl+b c — новое окно
# Окно 1: сборка и запуск (mvn spring-boot:run)
# Ctrl+b c — новое окно
# Окно 2: логи (tail -f app.log)
# Ctrl+b c — новое окно
# Окно 3: git, тесты

# Разделить окно на панели для удобства
# Ctrl+b % — слева код, справа логи

Пример конфигурации ~/.tmux.conf

Пример
# Сменить префикс на Ctrl+a (как в screen)
set -g prefix C-a
unbind C-b

# Нумерация окон с 1
set -g base-index 1

# Включить мышь
set -g mouse on

# Разделение панелей более интуитивными клавишами
bind | split-window -h
bind - split-window -v

На собеседовании: ключевой use case — запуск долгих процессов на сервере по SSH: tmux new -s deploy, запустили деплой, Ctrl+b d — отсоединились, SSH-соединение можно закрыть, процесс продолжает работать. Вернулись: tmux attach -t deploy. Это показывает практический опыт работы с серверами.