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 ?.
  • На ноутбуке (МОСТЕХ ОС) версия может отличаться от серверной — всё, что здесь помечено «проверено», проверено на серверной версии.
Оценка статьи 0

Комментарии

Пока комментариев нет.