tmux

Материал из llmdocs — справочник разработчика
tmux
АвторНиколас Мэрриотт (Nicholas Marriott)
Первый выпуск2007
Типтерминальный мультиплексор
ЯзыкC
ЛицензияISC
ПлатформыLinux, macOS, BSD
ПредшественникGNU Screen (1987)
Файл настройки~/.tmux.conf (или ~/.config/tmux/tmux.conf)

tmux (terminal multiplexer) — программа, которая запускает внутри одного окна терминала несколько независимых псевдотерминалов, раскладывает их на окна и панели и, главное, продолжает держать их запущенными, когда пользователь отключается. Если соединение по SSH оборвалось, долгая сборка или обучение модели не прервутся: достаточно переподключиться и выполнить tmux attach.

История

Идея мультиплексора восходит к GNU Screen (1987).[4] tmux написал Николас Мэрриотт в 2007 году как современную альтернативу с понятной архитектурой «клиент — сервер», вертикальным и горизонтальным делением экрана и скриптуемой конфигурацией. С 2009 года tmux входит в базовую систему OpenBSD, а в Linux-дистрибутивах доступен через пакетный менеджер.[1]

Устройство

tmux состоит из сервера — фонового процесса, который владеет всеми сессиями, — и клиентов, подключающихся к нему из терминалов. Иерархия объектов:[2]

Объект Что это
Сервер один процесс на пользователя, общается с клиентами через сокет в /tmp
Сессия набор окон; можно отсоединиться и вернуться
Окно «вкладка», занимает весь экран
Панель (pane) часть окна со своим shell

Поскольку процессы принадлежат серверу, а не терминалу, закрытие окна эмулятора или разрыв сети не отправляет им сигнал SIGHUP (см. Процессы и сигналы).

Основные команды

Все сочетания клавиш начинаются с префикса — по умолчанию Ctrl+b, затем отпустить и нажать клавишу команды.[3]

Действие Команда / клавиши
Новая сессия tmux new -s work
Список сессий tmux ls
Подключиться tmux attach -t work (или tmux a)
Отсоединиться префикс d
Новое окно префикс c
Следующее/предыдущее окно префикс n / префикс p
Деление по вертикали / горизонтали префикс % / префикс "
Переход между панелями префикс + стрелки
Увеличить панель на весь экран префикс z
Режим прокрутки и копирования префикс [
Командная строка tmux префикс :

Настройка

Конфигурация пишется на языке команд tmux в ~/.tmux.conf:

# префикс Ctrl+a вместо Ctrl+b
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# мышь: выбор панелей, прокрутка, изменение размеров
set -g mouse on

# нумерация окон с 1 и большая история
set -g base-index 1
set -g history-limit 50000

# vi-клавиши в режиме копирования
setw -g mode-keys vi

Применить без перезапуска: tmux source-file ~/.tmux.conf. Режим копирования с vi-клавишами удобен тем, кто привык к Vim.

Скриптование

Любое действие доступно как команда, поэтому раскладку рабочего места можно описать скриптом:

tmux new-session -d -s dev -n editor
tmux send-keys -t dev:editor 'vim .' C-m
tmux new-window -t dev -n server
tmux send-keys -t dev:server 'npm run dev' C-m
tmux split-window -h -t dev:server 'tail -f app.log'
tmux attach -t dev

Для этого существуют и готовые инструменты: tmuxinator и tmuxp описывают сессии в YAML. Плагины подключаются через TPM (Tmux Plugin Manager); популярный tmux-resurrect сохраняет раскладку между перезагрузками сервера.

Сравнение

  • GNU Screen — старше, есть почти везде, умеет работать с последовательными портами; деление экрана и настройка менее удобны.
  • Zellij — мультиплексор на Rust с подсказками клавиш на экране и плагинами на WebAssembly.
  • Встроенные вкладки терминала (iTerm2, WezTerm, Kitty) удобны локально, но не переживают разрыв SSH; iTerm2 умеет интегрироваться с tmux через tmux -CC.

Практика

Типичный сценарий на сервере: зайти по SSH, выполнить tmux new -s train, запустить длинную задачу, нажать Ctrl+b d и выйти. Позже — ssh host -t tmux attach -t train. Для фоновых служб, которые должны пережить перезагрузку, правильнее использовать systemd, а не tmux.

См. также

Источники

  1. tmux — репозиторий и wiki
  2. tmux(1) — man page (OpenBSD)
  3. tmux Getting Started
  4. GNU Screen