Tmux
Tmux — терминальный мультиплексор. Он позволяет создавать несколько терминалов в одном окне, делить экран на панели и сохранять процессы после закрытия терминала или разрыва SSH-соединения.
Руководство рассчитано на tmux 3.x в Linux и macOS.
Содержание
- Основные понятия
- Установка
- Префикс
- Быстрый старт
- Сессии
- Окна
- Панели
- Командный режим и адресация
- Прокрутка и копирование
- Конфигурация
- Автоматизация
- Работа по SSH
- Устранение неполадок
- Шпаргалка
Основные понятия
сервер tmux
└── сессия
├── окно 1
│ ├── панель 1
│ └── панель 2
└── окно 2
└── панель 1- Сервер — фоновый процесс tmux, хранящий рабочие окружения.
- Сессия — независимое окружение, например
backendилиadmin. - Окно — аналог вкладки терминала.
- Панель — отдельная область внутри окна.
- Клиент — терминал, подключённый к сессии.
Отсоединение от сессии не завершает программы внутри неё. Они работают, пока не завершены явно, не остановлен сервер tmux или не выключена машина.
Установка
Ubuntu и Debian
sudo apt update
sudo apt install tmuxFedora
sudo dnf install tmuxArch Linux
sudo pacman -S tmuxmacOS
brew install tmuxПроверка версии:
tmux -VПрефикс
Стандартный префикс tmux — Ctrl+b. Большинство сочетаний вводятся после него.
Запись Prefix c означает:
- нажать
Ctrl+b; - отпустить клавиши;
- нажать
c.
Это не одновременное нажатие трёх клавиш. Список действующих сочетаний открывается командой:
Prefix ?Для выхода из списка нажмите q.
Быстрый старт
Создать именованную сессию:
tmux new -s workОтсоединиться, сохранив процессы:
Prefix dПоказать сессии:
tmux lsПодключиться снова:
tmux attach -t workКороткий вариант:
tmux a -t workСоздать сессию или подключиться к ней, если она существует:
tmux new-session -A -s workСессии
Команды оболочки
| Действие | Команда |
|---|---|
| Создать сессию | tmux new -s NAME |
| Создать в фоне | tmux new -d -s NAME |
| Показать сессии | tmux ls |
| Подключиться | tmux a -t NAME |
| Отключить другие клиенты и подключиться | tmux a -d -t NAME |
| Переименовать | tmux rename-session -t OLD NEW |
| Завершить сессию | tmux kill-session -t NAME |
| Завершить все, кроме выбранной | tmux kill-session -a -t NAME |
| Завершить сервер и все сессии | tmux kill-server |
Сочетания внутри tmux
| Сочетание | Действие |
|---|---|
Prefix d |
Отсоединиться |
Prefix s |
Выбрать сессию |
Prefix $ |
Переименовать сессию |
Prefix ( |
Предыдущая сессия |
Prefix ) |
Следующая сессия |
Prefix L |
Последняя использованная сессия |
Завершение последней оболочки в сессии обычно закрывает эту сессию.
Окна
Окна похожи на вкладки.
| Сочетание | Действие |
|---|---|
Prefix c |
Создать окно |
Prefix , |
Переименовать окно |
Prefix & |
Закрыть окно с подтверждением |
Prefix n |
Следующее окно |
Prefix p |
Предыдущее окно |
Prefix l |
Последнее использованное окно |
Prefix w |
Список окон и панелей |
Prefix 0…9 |
Перейти к окну по индексу |
Prefix ' |
Ввести индекс окна |
Prefix . |
Изменить индекс окна |
Prefix f |
Найти окно по отображаемому тексту |
Команды через режим Prefix ::
new-window -n logs
new-window -n server 'npm run dev'
rename-window editorБезопасный способ закрыть текущую оболочку:
exitPrefix & принудительно закрывает окно и завершает процессы во всех его панелях.
Панели
Разделение и закрытие
| Сочетание | Действие |
|---|---|
Prefix % |
Разделить окно слева/справа |
Prefix " |
Разделить окно сверху/снизу |
Prefix x |
Закрыть панель с подтверждением |
Prefix z |
Развернуть панель или вернуть раскладку |
Prefix ! |
Вынести панель в отдельное окно |
Навигация
| Сочетание | Действие |
|---|---|
Prefix Left |
Панель слева |
Prefix Right |
Панель справа |
Prefix Up |
Панель сверху |
Prefix Down |
Панель снизу |
Prefix o |
Следующая панель |
Prefix ; |
Последняя активная панель |
Prefix q |
Показать номера панелей |
Размер и раскладка
Изменение размера стандартными сочетаниями:
Prefix Ctrl+Left
Prefix Ctrl+Right
Prefix Ctrl+Up
Prefix Ctrl+DownИли через Prefix ::
resize-pane -L 5
resize-pane -R 5
resize-pane -U 3
resize-pane -D 3Переключение готовых раскладок:
Prefix SpaceВыбор раскладки по имени:
select-layout even-horizontal
select-layout even-vertical
select-layout main-horizontal
select-layout main-vertical
select-layout tiledПерестановка панелей:
Prefix { поменять с предыдущей
Prefix } поменять со следующейКомандный режим и адресация
Командный режим открывается сочетанием:
Prefix :Полный адрес объекта имеет вид:
сессия:окно.панельПримеры адресов:
work:1
work:editor
work:1.0
work:editor.2Команду tmux можно выполнить внутри командного режима или из обычной оболочки:
tmux rename-window -t work:1 editor
tmux select-window -t work:editor
tmux send-keys -t work:server 'npm run dev' EnterДиагностические команды:
tmux list-commands
tmux list-keys
tmux show-options -g
tmux list-clientsПрокрутка и копирование
У tmux есть собственная история каждой панели. Войти в режим копирования:
Prefix [Выйти — q. Если включён режим mode-keys vi, доступны клавиши:
| Клавиша | Действие |
|---|---|
h, j, k, l |
Перемещение |
Ctrl+u, Ctrl+d |
Полстраницы вверх/вниз |
g, G |
Начало/конец истории |
/, ? |
Поиск вперёд/назад |
n, N |
Следующее/предыдущее совпадение |
Space |
Начать выделение |
Enter |
Скопировать выделение в буфер tmux |
Вставить последний буфер:
Prefix ]Работа с буферами из оболочки:
tmux list-buffers
tmux show-buffer
tmux save-buffer ~/tmux-buffer.txt
printf '%s' 'текст' | tmux load-buffer -Буфер tmux и системный буфер обмена — разные сущности. Интеграция с системным буфером зависит от ОС и терминала: обычно применяются OSC 52, pbcopy в macOS, wl-copy в Wayland или xclip в X11.
Конфигурация
Основной пользовательский файл:
~/.tmux.confТакже может поддерживаться XDG-путь:
~/.config/tmux/tmux.confПерезагрузить настройки:
tmux source-file ~/.tmux.confПример готового ~/.tmux.conf
# Префикс Ctrl+a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Нумерация с единицы
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
# Удобство
set -g mouse on
set -g history-limit 50000
set -sg escape-time 10
setw -g mode-keys vi
# Новые окна и панели наследуют текущий каталог
bind c new-window -c '#{pane_current_path}'
unbind %
unbind '"'
bind | split-window -h -c '#{pane_current_path}'
bind - split-window -v -c '#{pane_current_path}'
# Навигация между панелями
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Повторяемое изменение размера
bind -r H resize-pane -L 5
bind -r J resize-pane -D 2
bind -r K resize-pane -U 2
bind -r L resize-pane -R 5
# Перезагрузка конфигурации
bind r source-file ~/.tmux.conf \; display-message 'tmux.conf перезагружен'
# Цветовой режим
set -g default-terminal 'tmux-256color'
set -as terminal-features ',xterm-256color:RGB'
# Строка состояния
set -g status-interval 5
set -g status-left '#S '
set -g status-right '%Y-%m-%d %H:%M'После сохранения нажмите Prefix r либо один раз выполните tmux source-file ~/.tmux.conf. В приведённом варианте разделение выполняется через Prefix | и Prefix -.
Название терминала в terminal-features должно соответствовать значению $TERM до запуска tmux. Не задавайте $TERM случайным значением в настройках оболочки.
Мышь
При set -g mouse on можно выбирать панели, менять их размер, прокручивать историю и переключать окна мышью. Для обычного выделения текста терминалом часто требуется удерживать Shift; точное поведение зависит от эмулятора терминала.
Автоматизация
Создание рабочего пространства
#!/usr/bin/env bash
set -euo pipefail
SESSION="myapp"
ROOT="$HOME/projects/myapp"
if tmux has-session -t "$SESSION" 2>/dev/null; then
exec tmux attach-session -t "$SESSION"
fi
tmux new-session -d -s "$SESSION" -n editor -c "$ROOT"
tmux send-keys -t "$SESSION:editor" 'nvim .' Enter
tmux new-window -t "$SESSION" -n server -c "$ROOT"
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
tmux new-window -t "$SESSION" -n shell -c "$ROOT"
tmux split-window -h -t "$SESSION:shell" -c "$ROOT"
tmux select-layout -t "$SESSION:shell" even-horizontal
tmux select-window -t "$SESSION:editor"
exec tmux attach-session -t "$SESSION"Сделать скрипт исполняемым:
chmod +x ~/bin/myapp-tmuxПолезные команды для скриптов
# Проверить существование сессии
tmux has-session -t work
# Создать фоновую сессию с командой
tmux new-session -d -s job 'python3 long_task.py'
# Захватить видимое содержимое панели
tmux capture-pane -p -t work:1.0
# Захватить содержимое вместе с историей
tmux capture-pane -p -S - -t work:1.0 > pane.log
# Вывести структуру tmux
tmux list-sessions -F '#{session_name}: #{session_windows} окон'
tmux list-windows -a -F '#{session_name}:#{window_index} #{window_name}'
tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_current_command}'Работа по SSH
Запускайте tmux на удалённой машине, если процессы должны пережить разрыв SSH:
ssh user@example.com
tmux new-session -A -s mainПосле запуска задачи отсоединитесь через Prefix d. Позже снова подключитесь по SSH и выполните:
tmux attach -t mainЕсли локальный и удалённый tmux используют один префикс, передать Ctrl+b внутреннему экземпляру можно последовательностью:
Prefix Ctrl+bУдобная альтернатива — разные префиксы: например, Ctrl+a локально и Ctrl+b удалённо.
Подключение только для чтения:
tmux attach -r -t mainУстранение неполадок
no server running
Сервер не запущен либо используется другой сокет. Создайте сессию:
tmux new -s workduplicate session
Сессия уже существует:
tmux attach -t workИли используйте универсальную команду:
tmux new-session -A -s workСессия отмечена как attached
Можно подключиться параллельно либо отключить прежний клиент:
tmux attach -d -t workНе применился tmux.conf
tmux source-file ~/.tmux.conf
tmux show-options -g mouse
tmux show-options -g prefixСообщения tmux открываются через Prefix ~.
Не работают цвета
Проверьте терминал и наличие terminfo:
printf '%s\n' "$TERM"
infocmp tmux-256color
tmux display-message -p '#{client_termname} / #{default-terminal}'Если tmux-256color отсутствует, установите пакет terminfo для своей системы. Временный совместимый вариант:
set -g default-terminal 'screen-256color'Зависла панель
Сначала попробуйте Ctrl+c. Принудительное закрытие:
Prefix xИли:
tmux kill-pane -t work:1.0Это завершит процессы панели и может привести к потере несохранённых данных.
Шпаргалка
Самые важные команды
| Действие | Команда или сочетание |
|---|---|
| Создать сессию | tmux new -s NAME |
| Создать или подключиться | tmux new -A -s NAME |
| Список сессий | tmux ls |
| Подключиться | tmux a -t NAME |
| Отсоединиться | Prefix d |
| Создать окно | Prefix c |
| Переименовать окно | Prefix , |
| Следующее/предыдущее окно | Prefix n / Prefix p |
| Разделить слева/справа | Prefix % |
| Разделить сверху/снизу | Prefix " |
| Перейти между панелями | Prefix + стрелка |
| Закрыть панель | Prefix x |
| Развернуть панель | Prefix z |
| Режим копирования | Prefix [ |
| Вставить буфер tmux | Prefix ] |
| Командный режим | Prefix : |
| Справка по клавишам | Prefix ? |
Минимум для запоминания
tmux new -s work создать сессию
Prefix d отсоединиться
tmux a -t work подключиться
Prefix c создать окно
Prefix % разделить слева/справа
Prefix " разделить сверху/снизу
Prefix ? открыть справкуГлавное правило: Prefix d сохраняет работающие процессы, а закрытие панели, окна или сессии завершает связанные с ними процессы.