tmux для системного администратора: порядок в терминале, живые сессии и управление панелями
При работе с серверами одного окна терминала обычно недостаточно. В одной вкладке приходится просматривать логи, в другой - запускать `htop`, в третьей - работать с Git, а в четвертой - выполнять миграции базы данных или следить за сетевым трафиком. Такая схема быстро превращается в хаос: легко закрыть не ту вкладку, потерять нужный процесс или запутаться в десятках SSH-подключений.
Ситуацию меняет tmux - консольный мультиплексор для Unix-систем. Он позволяет организовать несколько терминальных сессий внутри одного окна, разделять экран на панели и сохранять запущенные процессы даже после разрыва SSH-соединения. Практический разбор возможностей утилиты и сценариев ее применения можно найти в материале о [работе tmux для системного администратора](https://habr.com/ru/companies/selectel/articles/1074388/?utm_campaign=1074388&utm_source=habrahabr&utm_medium=rss).
Что такое tmux
Структура tmux состоит из трех уровней:
- сессия объединяет рабочее окружение;
- окна напоминают вкладки браузера;
- панели делят окно на несколько независимых терминалов.
В результате администратор может держать в одной сессии отдельные окна для логов, мониторинга, Git и обслуживания базы данных. При этом все процессы продолжают работать в фоне, даже если закрыть терминал на локальном компьютере или временно потерять соединение.
Установить программу в Ubuntu или Debian можно стандартным менеджером пакетов:
```bash
sudo apt update
sudo apt install tmux
```
Проверить результат установки поможет команда:
```bash
tmux -V
```
В ответ система покажет установленную версию, например `tmux 3.6`.
Базовые tmux команды
Большинство действий внутри программы вызывается через специальный префикс. По умолчанию это `Ctrl+b`. Сначала нажимают `Ctrl+b`, отпускают клавиши, а затем вводят команду.
Основные варианты использования:
```bash
tmux
```
Создает новую безымянную сессию.
```bash
tmux new -s project
```
Запускает сессию с именем `project`.
```bash
tmux ls
```
Показывает список активных сессий.
```bash
tmux attach -t project
```
Подключает к уже существующей сессии.
Сочетание `Ctrl+b`, затем `d`, отсоединяет пользователя от сессии, не останавливая процессы. Это одна из главных причин, почему tmux для системного администратора становится незаменимым инструментом.
Завершить конкретную сессию можно так:
```bash
tmux kill-session -t project
```
А удалить все сессии, кроме текущей, позволяет команда:
```bash
tmux kill-session -a
```
Окна и панели
Новое окно создается сочетанием `Ctrl+b`, затем `c`. Перейти к следующему окну можно с помощью `Ctrl+b`, `n`, к предыдущему - `Ctrl+b`, `p`. Для перехода по номеру используется комбинация `Ctrl+b` и цифра от 0 до 9.
Чтобы рабочее окружение оставалось понятным, окна лучше переименовывать. Внутри tmux нажмите `Ctrl+b`, затем запятую и введите, например, `logs`, `git`, `monitoring` или `database`.
Панели позволяют одновременно видеть несколько терминалов в одном окне. Вертикальное разделение выполняется сочетанием `Ctrl+b`, затем `%`, горизонтальное - `Ctrl+b`, затем `"`. Переход между панелями осуществляется через `Ctrl+b` и клавиши со стрелками.
Размер области можно изменить, удерживая `Ctrl+b` и нажимая стрелки. Закрывается активная панель командой `exit` либо сочетанием `Ctrl+b`, затем `x`.
Понять, как использовать tmux в повседневной работе, проще всего на практическом примере. Например, в одном окне можно создать три панели: в первой выполнить `tail -f /var/log/syslog`, во второй запустить `htop`, а в третьей оставить командную строку для диагностики. Такое окружение будет доступно после повторного подключения к серверу.
Восстановление сессии после обрыва связи
Обычная SSH-сессия завершается вместе с запущенными внутри нее интерактивными процессами. Если команда выполнялась несколько часов, случайный обрыв сети может привести к потере результата. tmux отделяет рабочую сессию от соединения пользователя: сервер продолжает выполнять процессы, а администратор позднее подключается к ним снова.
Типичный сценарий выглядит так:
```bash
tmux new -s deploy
```
После запуска развертывания достаточно нажать `Ctrl+b`, `d`, закрыть SSH и заняться другими делами. Вернувшись на сервер, выполните:
```bash
tmux attach -t deploy
```
И увидите тот же экран с прежними процессами. Такое tmux восстановление сессии особенно полезно при сборке больших проектов, резервном копировании, миграциях баз данных и длительном мониторинге.
Для автоматического восстановления после перезагрузки сервера используют дополнительные инструменты, например `tmux-resurrect` и `tmux-continuum`. Первый сохраняет состояние окон и панелей, второй периодически создает резервные копии и может запускать восстановление автоматически.
Синхронный ввод и управление несколькими серверами
Иногда одну и ту же команду требуется выполнить сразу в нескольких терминалах. В tmux для этого предусмотрен режим синхронизации панелей. Нажмите `Ctrl+b`, затем `:`, введите:
```text
setw synchronize-panes on
```
Теперь введенный текст будет передаваться во все панели текущего окна. Это удобно при работе с несколькими серверами или сравнении одинаковых конфигураций.
Использовать функцию нужно осторожно: ошибочная команда будет отправлена сразу во все области. После завершения операции синхронизацию следует отключить:
```text
setw synchronize-panes off
```
Скрипты рабочего окружения
Если набор окон и панелей повторяется ежедневно, его можно описать в shell-скрипте:
```bash
#!/bin/bash
tmux new-session -d -s ops
tmux rename-window -t ops:0 logs
tmux send-keys -t ops:0 'tail -f /var/log/syslog' C-m
tmux new-window -t ops:1 -n monitor
tmux send-keys -t ops:1 'htop' C-m
tmux new-window -t ops:2 -n shell
tmux attach-session -t ops
```
Такой сценарий автоматически создает сессию, переименовывает окна и запускает нужные команды. Для сложных конфигураций можно применять утилиты вроде `tmuxp` или `teamocil`, позволяющие хранить описание окружения в YAML- или JSON-файлах.
Настройка конфигурации
Параметры tmux хранятся в файле `~/.tmux.conf`. В нем можно заменить неудобный префикс, включить нумерацию окон с единицы, изменить внешний вид строки состояния и настроить мышь.
Пример конфигурации:
```text
set -g mouse on
set -g base-index 1
setw -g pane-base-index 1
set -g history-limit 10000
```
Здесь включается управление мышью, окна и панели начинают нумероваться с единицы, а история терминала увеличивается до 10 000 строк. После изменения файла настройки можно перечитать без перезапуска:
```text
tmux source-file ~/.tmux.conf
```
Для более комфортной работы можно назначить более удобный префикс, например `Ctrl+a`, однако придется учитывать возможные конфликты с другими программами и привычными сочетаниями клавиш.
tmux полезен не только опытным администраторам. Он постепенно формирует предсказуемую модель работы: каждая задача получает собственное окно, долгие операции не зависят от SSH, а часто повторяющиеся действия превращаются в скрипты. Благодаря этому терминал перестает быть набором случайных вкладок и становится управляемым рабочим пространством.
Если нужно быстро освоить основные приемы, достаточно начать с трех действий: создавать именованные сессии, разделять окна на панели и отсоединяться от них перед завершением SSH-сеанса. После этого можно переходить к автоматизации, синхронизации и настройке конфигурации. Подробные примеры применения и дополнительные сценарии собраны в статье о [tmux и сохранении терминальных сессий](https://habr.com/ru/companies/selectel/articles/1074388/?utm_campaign=1074388&utm_source=habrahabr&utm_medium=rss).


