Обзор терминальных мультиплексоров: Tmux и Dvtm

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

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

Самым известным и распространенным терминальным мультиплексором является, конечно же, GNU Screen. При всех своих преимуществах он отличается некоторым неудобством в работе. Неудачно реализована, например, операция разделения экрана на части: при отключении от текущей сессии и последующем ее возобновлении порядок расположения частей не сохраняется.

В последнее время широкое распространение получили и другие терминальные мультиплексоры, более наглядные и удобные в работе — например, tmux и dvtm, которым и посвящена эта статья.

Tmux

Tmux работает под Linux и под MacOS; он включен в официальные репозитории большинства современных Linux-систем и может быть установлен при помощи стандартного менеджера пакетов.

Запустим tmux при помощи следующей команды:

$ tmux

В нижней части экрана появится строка состояния:

tmux

Управление всеми терминальными мультиплексорами осуществляется так: сначала нажимается так называемая префиксная комбинация клавиш, а после нее — клавиша, управляющая той или иной функцией. В tmux по умолчанию в качестве префиксной установлена комбинация Ctrl+B. Чтобы разделить экран терминала на две половины вертикальной чертой, нужно сначала нажать Ctrl+B, а затем — % (т.е. Shift+5):

tmux 1

Каждую из получившихся вкладок можно также разделить на две части горизонтальной чертой при помощи комбинации клавиш Ctrl+B ” (сначала нажимаем Ctrl+B, а затем — “).

Разделить окно на две части можно также при помощи команд:

$ tmux split-window -h

(разделить на две части горизонтально)

$ tmux split-window -v

(разделить на две части вертикально)

Чтобы перейти из одной части окна в другую, нажимаем сначала Ctrl+B, а затем — клавиши ←, ↑, → и ↓.

Чтобы создать новое окно, нажмем комбинацию клавиш Ctrl+B+C. В рамках одной сессии может быть задействовано неограниченное количество окон; каждое из них может быть в свою очередь разделено на части. Переключение между окнами осуществляется при помощи следующих комбинаций:

  • Ctrl+B+ 0…9 — перейти в указанное окно;
  • Ctrl+B P — перейти в предыдущее окно;
  • Ctrl+B N — перейти в следующее окно;
  • Ctrl+B L — перейти в предыдущее активное окно (т.е. в то, из которого ранее был осуществлен переход в текущее окно);
  • Ctrl+B X — закрыть окно (это можно также сделать при помощи команды exit).

Текущую сессию tmux можно прервать, нажав комбинацию клавиш Ctrl+B+D. Чтобы возобновить прерванную сессию, нужно ввести команду:

$ tmux attach

Прерванная сессия будет восстановлена; при этом все данные и процессы будут сохранены.
Эту команду можно ввести и в сокращенном виде:

$ tmux -a

Чтобы вывести на экран список сессий, нужно выполнить следующую команду:

$ tmux ls

Завершение открытой сессии осуществляется при помощи команды:

$ tmux kill-session -t [имя сессии]

Чтобы завершить все открытые сессии одновременно, нужно ввести команду:

$ tmux kill-server

Рекомендации по настройке

Отображение строки состояния в нижней части экрана можно отключить. Для этого введем следующую команду:

$ tmux set -g status off

А чтобы отключенная строка состояния отображалась снова — команду:

$ tmux set -g status on

Можно изменить положение строки состояния и сделать так, чтобы она находилась не в нижней, а в верхней части экрана:

$ set -g status-position top

Цвет строки состояния изменяется при помощи следующей команды:

tmux  set -g status-bg blue

Dvtm

Dvtm (dynamic virtual terminal manager) представляет собой терминальный мультиплексор, по функциональности во многом близкий к tmux.
Он также включен в официальные репозитории большинства современных Linux-систем и устанавливается при помощи стандартного менеджера пакетов.
После запуска dvtm в верхней части экрана будет отображена строка состояния:

dvtm

Управление dvtm организовано по тому же принципу, что и управление tmux. В качестве префиксной используется комбинация клавиш Ctrl+G. Понятие окна в dvtm интерпретируется совершенно иначе по сравнению с tmux. Для создания нового окна используется комбинация клавиш Ctrl+G C. При нажатии этой комбинации экран будет разделен на две части; при этом каждая из них является отдельным окном:

dvtm

При помощи той же самой комбинации клавиш можно создавать дополнительные окна:

dvtm

Порядок расположения окон можно изменять. Выделяются следующие варианты расположения:

  • вертикальное (Ctrl+G T) — текущее окно расположено в левой половине экрана; все остальные окна расположены в правой половине;
  • горизонтальное (Ctrl+G B) — основное рабочее окно занимает верхнюю половину экрана, все остальные окна располагаются внизу;
  • режим сетки (Ctrl+G G) — экран делится на части одинакового размера по количество созданных окон;
  • полноэкранный режим (Ctrl+G M) — текущее окно занимает весь экран.

Переходить от одного режима расположения окон к другому можно, нажимая омбинацию Ctrl+G+пробел.

Для управления окнами используются следующие клавиатурные комбинации:

  • Ctrl+G X — закрыть текущее окно;
  • Ctrl+G J — перейти в следующее окно;
  • Ctrl+G K — перейти в предыдущее окно;
  • Ctrl+G 0…9 — перейти в указанное окно (цифры обозначают номер окна);
  • Ctrl+G L — увеличить ширину текущего окна;
  • Ctrl+G H — уменьшить ширину текущего окна;
  • Ctrl+G Q — закрыть все окна и выйти из dvtm.

В dvtm имеется одна интересная функция, которой больше нет ни в одном из известных нам терминальных мультиплексоров: нажатие клавиш в текущем окне могут автоматически воспроизводиться во всех остальных открытых окнах. Нажмем комбинацию клавиш Ctrl+G+A. Если после этого нажать на какую-нибудь клавишу, нажатие сработает во всех окнах сразу.(UPD. Наши читатели сообщают, что аналогичная функция имеется и в tmux: tmux set synchronize-panes on).

Если ввести в текущем окне какую-либо команду, она также будет одновременно выполнена во всех открытых окнах. С помощью этой функции можно, например, осуществлять одновременную настройку нескольких удаленных серверов по одинаковой схеме.

В отличие от tmux, dvtm не поддерживает сохранения и возобновления сессий. Для этого используется dtach — вспомогательная утилита, которая обеспечивает возможность отключения от текущей сессии и последующего подключения к ней для любых консольных приложений. Устанавливается при помощи стандартного менеджера пакетов.

Чтобы получить возможность отключать сессии и снова подключаться к ним, нужно запустить dvtm под dtach:

$ dtach -c /tmp/dvtm-session -r winch dvtm

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

Чтобы покинуть dtach, нужно нажать комбинацию Ctrl+\. Подключение к существующей сессии осуществляется при помощи команды:

$ dtach -a /tmp/dvtm-session -r winch

Более подробная информация о dtach представлена на официальной man-странице.

В заключение приведем небольшую шпаргалку — таблицу основных команд и клавиатурных комбинаций, используемых в screen, tmux и dvtm.

Сравнительная таблица команд и клавиатурных комбинаций

Управление сессиями

Операцияscreentmuxdvtm
Запустить новую сессиюscreentmux
tmux new-session
tmux new-session -s [имя сессии]
Возможность сохранения и возобновления сессий не поддерживается — для этого нужно устанавливать утилиту dtach, реализующую такую возможность для всех консольных приложений. Запуск dvtm под dtach осуществляется при помощи команды:
dtach -c /tmp/dvtm-session -r winch dvtm
Подключиться к уже созданной сессииscreen -rtmux attach
tmux attach-session -s [имя сессии]
tmux -a
dtach -a /tmp/dvtm-session -r winch
Отсоединиться от текущей сессииCtrl+A Dtmux detach ИЛИ Ctrl+B DCtrl+\
Просмотреть список активных сессийscreen -lstmux lsps aux | grep dtach
Удалить сессиюscreen -r [имя сессии] -X quittmux kill-session -t [имя сессии]
Удалить все сессииCtrl+A \tmux kill-server

Управление окнами

Операцияscreentmuxdvtm
Cоздать новое окноCtrl+A CCtrl+B CCtrl+G C
Перейти в указанное окноCtrl+B 0….9Ctrl+G 0….9
Перейти в предыдущее окноCtrl+A PCtrl+B PCtrl+G J
Перейти в следующее окноCtrl+A NCtrl+B NCtrl+G K
Перейти в последнее активное окноCtrl+A LCtrl+B L
Показать список всех открытых оконCtrl+A «
Увеличить ширину окнаCtrl+B+Ctrl N→ или Ctrl+B Alt → (увеличивает с большим шагом)Ctrl+G L
Уменьшить ширину окнаCtrl+B Ctrl+←Ctrl+G H
Воспроизводить нажатия клавиш во всех открытых окнахtmux set synchronize-panes onCtrl+G A
Закрыть текущее окноCtrl+A XCtrl+B XCtrl+G X

Что еще почитать по теме

T-Rex 30 марта 2021

Что такое SMTP-протокол и как он устроен?

SMTP (Simple Mail Transfer Protocol) — протокол передачи почты. Он был представлен еще в 1982 году, но не теряет актуальности до сих пор. В статье разбираемся, какие задачи решает протокол и как он ра…
T-Rex 30 марта 2021
Владимир Туров 1 сентября 2020

Дело совершенно секретного iPod

Это был обычный серый день в конце 2005 года. Я сидел на рабочем месте и писал код для следующей версии iPod. Вдруг без стука ворвался директор ПО для iPod, начальник моего начальника, и закрыл дверь.
Владимир Туров 1 сентября 2020
T-Rex 21 августа 2020

TrendForce: цены на SSD упадут

Эксперты DRAMeXchange предсказывают значительное падение цен на оперативную память и твердотельные накопители в ближайшее время. Причина — сокращение спроса на чипы для NAND и DRAM.
T-Rex 21 августа 2020

Новое в блоге

Михаил Фомин 24 июня 2022

Docker Swarm VS Kubernetes — как бизнес выбирает оркестраторы

Рассказываем, для каких задач бизнесу больше подойдет Docker Swarm, а когда следует выбрать Kubernetes.
Михаил Фомин 24 июня 2022
Ульяна Малышева 30 сентября 2022

«Нулевой» локальный диск. Как мы запустили облако только с сетевыми дисками и приручили Ceph

Чем хороши сетевые диски и почему именно Ceph, рассказал директор по развитию ядра облачной платформы Иван Романько.
Ульяна Малышева 30 сентября 2022
Валентин Тимофеев 30 сентября 2022

Как проходит онбординг сотрудников ИТО? Что нужно, чтобы выйти на смену в дата-центр

Рассказываем, как обучаем новых сотрудников, какие задачи и испытания проходят инженеры прежде, чем выйти на свою первую смену.
Валентин Тимофеев 30 сентября 2022
T-Rex 28 сентября 2022

Книги по SQL: что почитать новичкам и специалистам

Собрали 6 книг, которые помогут на старте изучения SQL и при углублении в тему.
T-Rex 28 сентября 2022