devops
April 23, 2021

Tmux за 5 минут

00:00 - Зачем?

Если для какой-то задачи надо одновременно отобразить несколько терминалов, особенно если вы работаете по SSH и не хотите прерывать сессию при отключении, тогда tmux - ваш выбор. Я расскажу как использовать утилиту из коробки со стандартными конфигами для самых распространённых на практике случаев.

00:15 - Когда это нужно?

Работа по SSH

Чаще всего требуется подключиться к серверу для диагностики, в одном окне запустить монитор ресурсов, в другом - смотреть логи, в третьем - править конфигурационный файл или выполнять какие-то команды. Плюшки от использования tmux на сервере:

  1. Требуется всего одна SSH-сессия. На сервере tmux создаст сколько угодно виртуальных терминалов.
  2. Сессия tmux не завершится, если возникнут проблемы с сетью. Соответственно, не завершатся выполняемые процессы и команды, а расположение виртуальных терминалов никак не изменится
ssh с запущенным tmux

Локальная работа

При использовании таких систем, как Terraform, Kubernetes, Ansible, OpenShift и т.п., удобно запускать в одном терминале команды, в другом отслеживать актуальное состояние системы, в третьем править конфигурационные файлы, в четвёртом - изучать документацию и т.д.

Запуск Deployment на кластере Kubernetes

Запуск фоновых задач

Tmux можно использовать для запуска долгих скриптов или команд в фоновом режиме. Это может сэкономить время подготовки перед запуском, исключив пайпы и перенаправления.

Демонстрация экрана и параллельная работа

Поскольку сессия в tmux - это отдельный файл, доступ к ней можно открыть нескольким пользователям с правами на чтение или запись и демонстрировать свой "экран" или передать коллеге доступ.

Понты

Также можно удивить коллег своими навыками владения консолью и организовать дашборд с выхлопом различной информации вокруг основного терминала Тайлинг всегда выглядит впечатляюще :)

Чем больше непонятной информации на экране, тем меньше к вам вопросов

01:00 - Как поставить?

В зависимости от сценария использования, установку можно осуществить как на свою систему, так и на сервер, где вам потребуется несколько одновременно запущенных окон.

Linux

  • Ubuntu / Debian - запустить в терминале команду:
sudo apt install tmux
  • RedHat / CentOS / Fedora - запустить в терминале команду, соответствующую пакетному менеджеру:
sudo yum intall tmux
# OR
sudo dnf install tmux

MacOS

Предварительно потребуется установить пакетный менеджер brew, после чего выполнить в терминале команду:

brew install tmux

Windows

Сначала потребуется установить WSL2 и какой-нибудь дистрибутив Linux, после чего в терминале выполнить соответствующую дистрибутиву команду для установки пакета (см. выше)

01:15 - Как запускать?

Запуск tmux довольно тривиален, достаточно в терминале ввести команду:

tmux
Первый запуск tmux не производит особого впечатления

01:30 - Какая концепция?

Основные определения

  • pane - виртуальный терминал
  • layout - расположение виртуальных терминалов в окне
  • window - экран, на котором отображаются виртуальные терминалы. Может быть активным (текущим окном) или фоновым (окном, которое вы не видите в данный момент)
  • session - коллекция экранов и виртуальных терминалов. Сессий может быть несколько.
  • prefix - начальная комбинация клавиш, позволяющая передавать tmux команды управления. По умолчанию, это сочетание Ctrl+b

Режимы работы

  • Активный режим - когда tmux используется по прямому назначению, для работы с виртуальными теримналами
  • Командный режим - управление tmux с помощью встроенных команд
  • Фоновый режим - когда управление tmux производится аргументами командной строки
Схематичное представление элементов tmux

02:00 - Как работать?

Работа в активном режиме

Panes

  • Разделить окно
    Ctrl+b, % - вертикальное разделение [|]
    Ctrl+b, " - горизонтальное разделение [—]
  • Переключиться между терминалами
    Ctrl+b, <arrow> - переключиться с помощью стрелок
    Ctrl+b, Ctrl+o - переключаться по часовой стрелке
  • Изменить размеры терминала
    Ctrl+b, Ctrl+<arrow> - изменить размер активного терминала по горизонтали или вертикали с помощью стрелок
    Ctrl+b, z - развернуть терминал на всё окно. Повторная комбинация возвращает всё как было
    Ctrl+b, Space - переключить layout автоматически. Удобно, когда нет сил двигать терминалы руками
  • Вывести список терминалов
    Ctrl+b, w - показать экран навигации

Windows

  • Создать окно
    Ctrl+b, c - Создать новое окно
    Ctrl+b, , - Переименовать окно
  • Переключиться между окнами
    Ctrl+b, n - переключиться на следующее окно
    Ctrl+b, p - переключиться на предыдущее окно
    Ctrl+b, 0..9 - переключиться на окно 0 .. 9
    Ctrl+b, w - показать экран навигации
    Ctrl+b, f - поиск окна по имени
  • Закрыть окно
    Ctrl+b, & - убить текущее окно и терминалы в нём

Sessions

Ctrl+b, $ - переименовать текущую сессию
Ctrl+b, s - переключиться в сессию из списка
Ctrl+b, d - отсоединиться от tmux обратно в консоль

Полезные штуки
Ctrl+b, [ - перейти в режим копирования. С помощью стрелок или PgUp, PgDn можно листать длинный выхлоп команд. Вернуться обратно - Ctrl+C
Ctrl+b, ? - вывести справку с текущим описанием комбинаций клавиш

Работа в командном режиме

Ctrl+b, : - переключиться в командный режим

set -g mouse on - включить поддержку мыши. После этого между терминалами можно будет переключаться мышью, изменять их размер, а также прокручивать вывод.

Работа в фоновом режиме

tmux - создать новую сессию
tmux new -s <name> - создать новую сессию с заданным именем
tmux ls - вывести список сессий
tmux a - подключиться к последней активной сессии
tmux a -t <name> - подключиться к сессии с заданным именем
tmux kill-session -t <name> - завершить сессию с заданным именем
tmux kill-server - полностью завершить tmux

tmux new -d 'ping example.com' - запустить сессию с командой ping в фоновом режиме

04:45 - Куда копать дальше?

Следующий шаг в работе с tmux - настройка его под себя. Создание своего конфига и автоматизация рутинных задач, настройка шаблонов и красивостей. Но это уже материал для самостоятельного изучения. Я лишь попытался описать часто используемые функции из коробки.

Полезные ссылки:

05:00 - Заключение

Я считаю tmux полезным и удобным инструментом для работы в консоли, но часто сталкиваюсь с мнением, что он очень сложен в настройке и изучении. В этом посте я постарался рассказать о базовом минимуме, которого должно хватить большинству пользователей, чтобы справляться с повседневными задачами и параллельно изучать возможности tmux глубже.