# tmux

> Терминальный мультиплексор — делит одно окно терминала на панели и окна и сохраняет сессии запущенными после отключения, в том числе по SSH.

Источник: https://llmdocs.ru/wiki/tmux/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Автор**: Николас Мэрриотт (Nicholas Marriott)
- **Первый выпуск**: 2007
- **Тип**: терминальный мультиплексор
- **Язык**: C
- **Лицензия**: ISC
- **Платформы**: Linux, macOS, BSD
- **Предшественник**: GNU Screen (1987)
- **Файл настройки**: ~/.tmux.conf (или ~/.config/tmux/tmux.conf)
**tmux** (*terminal multiplexer*) — программа, которая запускает внутри одного окна терминала несколько независимых псевдотерминалов, раскладывает их на окна и панели и, главное, продолжает держать их запущенными, когда пользователь отключается. Если соединение по [SSH](https://llmdocs.ru/wiki/ssh.md) оборвалось, долгая сборка или обучение модели не прервутся: достаточно переподключиться и выполнить `tmux attach`.

## История

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

## Устройство

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

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

Поскольку процессы принадлежат серверу, а не терминалу, закрытие окна эмулятора или разрыв сети не отправляет им сигнал SIGHUP (см. [Процессы и сигналы](https://llmdocs.ru/wiki/processes-signals.md)).

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

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

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

## Настройка

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

```tmux
# префикс 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](https://llmdocs.ru/wiki/vim.md).

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

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

```bash
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](https://llmdocs.ru/wiki/systemd.md), а не tmux.

## См. также

- [SSH](https://llmdocs.ru/wiki/ssh.md)
- [Shell и Bash](https://llmdocs.ru/wiki/shell-bash.md)
- [Zsh](https://llmdocs.ru/wiki/zsh.md)
- [Vim](https://llmdocs.ru/wiki/vim.md)

## Источники

1. [tmux — репозиторий и wiki](https://github.com/tmux/tmux/wiki)
2. [tmux(1) — man page (OpenBSD)](https://man.openbsd.org/tmux)
3. [tmux Getting Started](https://github.com/tmux/tmux/wiki/Getting-Started)
4. [GNU Screen](https://www.gnu.org/software/screen/)
