tmux: терминальный мультиплексор
tmux — терминальный мультиплексор: программа, в которой можно держать несколько терминалов в одном окне, а главное — отсоединяться от них, не закрывая.
Смысл в одной фразе: сессия tmux живёт отдельно от окна терминала. Закрылся терминал, оборвалась SSH-сессия, погас экран — работа внутри продолжается. Вернувшись, вы подключаетесь к той же сессии и видите её как была.
Именно поэтому tmux — первый инструмент при долгих операциях: перенос сотен гигабайт, сборка, rsync, установка обновлений.
Установка
# RPM-семейство (МОСТЕХ, РОСА, Fedora): имя пакета — tmux
$ sudo dnf install tmux # в старых выпусках: sudo urpmi tmux
# Debian и Ubuntu
$ sudo apt install tmux
# проверка
$ tmux -V
tmux не требует службы, демона или настройки: поставили — и работает. Отдельная настройка нужна только для удобства (файл ~/.tmux.conf ниже).
Три уровня: сессия, окно, панель
сессия (session) ← к ней подключаются и отсоединяются
├── окно (window) ← как вкладка: переключаются с клавиатуры
│ ├── панель (pane) ← как разделённый экран внутри окна
│ └── панель
└── окно
Одна сессия может жить часами и содержать несколько окон, а окно — делиться на панели. Отсоединяются от сессии, а потеря связи её не убивает.
Префикс: с чего начинается любая команда
Все горячие клавиши tmux начинаются с префикса — по умолчанию Ctrl+b. То есть Ctrl+b, отпустить, затем следующая клавиша.
| Клавиши | Что делают |
|---|---|
Ctrl+b d |
Отсоединиться (сессия остаётся работать) |
Ctrl+b c |
Новое окно |
Ctrl+b n / p |
Следующее / предыдущее окно |
Ctrl+b 1…9 |
Окно по номеру |
Ctrl+b , |
Переименовать окно |
Ctrl+b & |
Закрыть окно (спросит подтверждение) |
Ctrl+b s |
Список сессий (переключение) |
Ctrl+b w |
Список окон |
Ctrl+b % |
Разделить на две панели по вертикали |
Ctrl+b " |
Разделить по горизонтали |
Ctrl+b стрелка |
Перейти на панель |
Ctrl+b z |
Развернуть панель на весь экран и обратно |
Ctrl+b x |
Закрыть панель |
Ctrl+b [ |
Режим прокрутки и копирования (выход — q) |
Ctrl+b ? |
Справка по всем клавишам |
Привязки сверены с живой системой — tmux list-keys -T prefix на tmux 3.5a: d → detach-client, c → new-window, n → next-window, p → previous-window, z → resize-pane -Z (развернуть панель), [ → copy-mode, ? → list-keys, s → choose-tree -Zs (список сессий), w → choose-tree -Zw (список окон), x → закрытие панели с подтверждением, & → закрытие окна с подтверждением.
Команды из оболочки
Работать можно и командами — они нужны в скриптах и когда клавиши забыты.
$ tmux new -s work # новая сессия с именем
$ tmux new -d -s transfer 'rsync -a /home/user/ /backup/' # создать и сразу запустить команду, не заходя внутрь
$ tmux ls # список сессий
$ tmux attach -t work # подключиться
$ tmux attach # подключиться к единственной
$ tmux new -A -s transfer # подключиться, а если сессии нет — создать
$ tmux kill-session -t work # убить одну сессию
$ tmux kill-server # убить все
Строка tmux new -d -s transfer '…' — самый полезный вариант для долгой операции: сессия запускается отсоединённой, команда уже выполняется, а вы подключаетесь, когда удобно.
Работа с панелями
Панели нужны, когда хочется видеть два процесса одновременно: например, rsync с прогрессом и df -h.
# клавишами: Ctrl+b % (вертикально) или Ctrl+b " (горизонтально)
# командами:
$ tmux split-window -h # вертикальная граница
$ tmux split-window -v # горизонтальная
Двигать и изменять: Ctrl+b z — развернуть панель на весь экран (вернуться — снова z), Ctrl+b Ctrl+стрелка — менять размер, Ctrl+b space — перебрать готовые раскладки.
Прокрутка и копирование
Обычная прокрутка колесом в tmux историю не показывает — нужен режим копирования: Ctrl+b [, затем стрелки или PgUp/PgDn, выход — q.
Чтобы мышь и прокрутка работали привычно, в настройках включают:
set -g mouse on
set -g history-limit 100000
Копирование в системный буфер зависит от версии: в tmux 3.3 и новее по умолчанию стоит set-clipboard external (проверено на 3.5a) — tmux отдаёт копирование терминалу, и во многих терминалах текст попадает в системный буфер сам, без утилит. Если не работает — выделять мышью с зажатым Shift (терминал отдаёт выделение системе) или поставить xclip/wl-copy.
Настройки: ~/.tmux.conf
Что стоит по умолчанию (снято с tmux 3.5a командой tmux show -g):
| Настройка | По умолчанию | Что это значит |
|---|---|---|
prefix |
C-b |
Префикс всех клавиш |
mouse |
off |
Мышь выключена: колесо не листает, панели не тянутся |
history-limit |
2000 |
Строк истории на панель — для длинных логов мало |
base-index |
0 |
Окна нумеруются с нуля |
pane-base-index |
0 |
Панели тоже с нуля |
set-clipboard |
external |
Копирование отдаётся терминалу |
Файл ~/.tmux.conf читается при запуске сервера tmux. Разумный минимум:
# мышь и история
set -g mouse on
set -g history-limit 100000
# нумерация окон и панелей с единицы, а не с нуля
set -g base-index 1
setw -g pane-base-index 1
# перечитать конфиг по Ctrl+b r
bind r source-file ~/.tmux.conf \; display "конфиг перечитан"
Изменить префикс (по умолчанию Ctrl+b) можно так:
unbind C-b
set -g prefix C-a
bind C-a send-prefix
Ctrl+a удобнее — но именно поэтому он конфликтует с привычкой «в начало строки» в оболочке: send-prefix как раз возвращает прежнее поведение по двойному нажатию.
Сценарии, ради которых tmux и ставят
Долгий перенос файлов. Запускаем отсоединённую сессию, подключаемся и смотрим:
$ tmux new -d -s transfer 'rsync -aHAX --info=progress2 /home/user/ user@192.168.77.2:/home/user/'
$ tmux attach -t transfer # смотреть прогресс
# Ctrl+b d — отсоединиться, работа продолжится
Важно, и это проверено на живых сессиях: когда команда заканчивается, сессия закрывается вместе с ней. Пока rsync работает — всё хорошо, но посмотреть результат после завершения уже не получится: панель исчезнет, а если сессия была одна, уйдёт и весь сервер tmux. Чтобы сессия осталась, в конец команды добавляют оболочку:
$ tmux new -d -s transfer 'rsync -aHAX --info=progress2 /home/user/ user@192.168.77.2:/home/user/; bash'
Работа на сервере. Подключился по SSH, запустил tmux, начал работу — и связь пропала. Подключаешься снова, tmux attach — всё на месте, включая вывод команды, которая как раз выполнялась.
Сборка или обновление системы. То же самое: обрыв связи не прерывает процесс.
Автоматизация. tmux умеет управлять панелями из скриптов:
$ tmux send-keys -t work 'ls -la' Enter # набрать команду в сессии
$ tmux capture-pane -t work -p # прочитать, что в панели сейчас
Частые вопросы
«Сессия не найдена». tmux ls показывает, что есть на самом деле; имена чувствительны к регистру.
После перезагрузки сессий нет. Так и должно быть: tmux хранит сессии в памяти. Если нужно восстанавливать их после перезапуска, для этого есть отдельный плагин (tmux-resurrect), но это уже надстройка.
Панель не реагирует на мышь. Проверить, что set -g mouse on применён (tmux show -g mouse), и что конфиг перечитан.
Не работает Ctrl+b. Возможно, префикс переназначен в конфиге, или перехватывает терминал. Справка по текущим клавишам — Ctrl+b ?.
Источники
man 1 tmux— полное описание: команды, клавиши, параметры. Всё, что не описано здесь, есть там.man 5 tmux.conf— формат файла настроек (в некоторых сборках справка по настройкам включена вman 1 tmux).- Проект: https://github.com/tmux/tmux · страница справки: https://man.openbsd.org/tmux
- Версия и значения по умолчанию сняты с живой системы: tmux 3.5a, команды
tmux -V,tmux show -g <настройка>(19.10.2026). - Привязки клавиш —
tmux list-keys -T prefixна той же системе. - В репозиториях проверенного выпуска Ubuntu — tmux 3.6a. В МОСТЕХ/РОСА версия будет своя: проверять
tmux -V.
Что ещё не проверено
Проверено на живой системе (tmux 3.5a, сервер): версия; значения по умолчанию (mouse off, history-limit 2000, base-index 0, prefix C-b, set-clipboard external); привязки клавиш из таблицы; что -h при делении создаёт панели рядом; что сессия с одноразовой командой закрывается вместе с ней, а с ; bash в конце — остаётся.
Не проверено: send-keys и capture-pane — попытки через ssh без терминала дали пустой вывод, так что автоматизацию из этой статьи я не подтвердил; tmux attach и подключение к существующей сессии тоже требуют настоящего терминала; привязки % и " (деление панелей) взяты из документации, а не из сверки.
- Возможные различия по версиям: настройка
mouseпоявилась в 2.1 (в более старых мышь не работает вовсе),set-clipboard external— в 3.3, режим копирования и раскладки панелей в 1.x отличались. На своей машине сверяться сtmux -VиCtrl+b ?. - На ноутбуке (МОСТЕХ ОС) версия может отличаться от серверной — всё, что здесь помечено «проверено», проверено на серверной версии.
Комментарии
Пока комментариев нет.