Что такое мультиплексоры терминала 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. Это показывает практический опыт работы с серверами.