Найти в Дзене
DeSoft.ru

Теминальный мультплексор tmux и плагины к нему

Для работы в терминале уже долгое время использую мультиплексор Tmux. Ставлю его практически на всех серверах, с которыми приходится сталкиваться. Основная причина - это конечно продолжение работы сессий даже при отключении / разрыве ssh соединения - переподключились, вернулись в сессию, а все запущенные процессы как работали, так и работают. Сам инструмент во многом удобнее аналогов (например, Screen) и оброс обширной функциональностью за время своего существования. 📌 Установка (Debian / Ubuntu) sudo apt install tmux Установка на другие системы - tmux-wiki-installing 📌 Шпаргалка по основным командам и горячим клавишам # создание новой сессии с именем по умолчанию (порядковый номер)
tmux
# создание новой сессии с именем mysession
tmux new -s mysession
# подключиться к последней созданной сессии
tmux attach
# подключиться к сессии mysession
tmux attach -t mysession
# отключиться от сессии
tmux detach
# список сессий
tmux ls
# завершить сессию mysession
tmux kill-session -t myses

Для работы в терминале уже долгое время использую мультиплексор Tmux. Ставлю его практически на всех серверах, с которыми приходится сталкиваться. Основная причина - это конечно продолжение работы сессий даже при отключении / разрыве ssh соединения - переподключились, вернулись в сессию, а все запущенные процессы как работали, так и работают. Сам инструмент во многом удобнее аналогов (например, Screen) и оброс обширной функциональностью за время своего существования.

📌 Установка (Debian / Ubuntu)

sudo apt install tmux

Установка на другие системы - tmux-wiki-installing

📌 Шпаргалка по основным командам и горячим клавишам

# создание новой сессии с именем по умолчанию (порядковый номер)
tmux

# создание новой сессии с именем mysession
tmux new -s mysession

# подключиться к последней созданной сессии
tmux attach

# подключиться к сессии mysession
tmux attach -t mysession

# отключиться от сессии
tmux detach

# список сессий
tmux ls

# завершить сессию mysession
tmux kill-session -t mysession

# завершить все сессии
tmux kill-server

# посмотреть полный список команд
tmux list-commands

# префикс
Ctrl + b | префикс, с которого начинаются все команды
# сессии
Ctrl + b d | отключиться от сессии
Ctrl + b s | выбрать сессию

# окна
Ctrl + b c | создать новое окно
Ctrl + b w | посмотреть список окон
Ctrl + b n | переключиться на след окно
Ctrl + b p | переключиться на пред окно
Ctrl + b 0..9 | переключиться на окно по номеру
Ctrl + b x | закрыть окно (требуется подтверждение)

# панели
Ctrl + b " | разделить окно на две панели горизонтально
Ctrl + b % | разделить окно на две панели вертикально
Ctrl + b Arrow key | переключиться между панелями
Ctrl + b + Arrow key | изменить размеры панели


🔹 Функциональность
Tmux расширяется с помощью плагинов. Для установки плагинов можно (и рекомендуется) использовать Tmux Plugin Manager.

🔹 Список доступных плагинов - tmux-plugins-list.

📌 Установим менеджер плагинов Tmux Plugin Manager

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
  • В конфигурационный файл tmux (~/.tmux.conf) добавим
# список плагинов
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# инициализация TPM (оставляем внизу конфигурационного файла)
run '~/.tmux/plugins/tpm/tpm'

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

  • Подхватим изменения
tmux source ~/.tmux.conf


📌
Плагин для сохранения / восстановления сессий Tmux Resurrect

Как известно, настроенное окружение в Tmux слетает после перезагрузки сервера. Заходишь, заново все перенастраиваешь и так до следующей перезагрузки. Для решения этой проблемы существует плагин Tmux Resurrect, благодаря которому можно сохранить все настроенное окружение Tmux сессий и восстановить в одно сочетаний клавиш.

  • Добавляем плагин в ~/tmux.conf
set -g @plugin 'tmux-plugins/tmux-resurrect'
  • Сохраняем изменения. Для установки и включения плагина выполняем команду Ctrl+b I - Tmux Plugin Manager установит плагин и обновит окружение Tmux автоматически. Плагин готов к применению.

❗️ Как применять

  • Подключаемся или создаем новую сессию
tmux new -s session1
  • Настраиваем панели, окна, запускаем все требуемые приложения и так далее
  • Комбинацией клавиш Ctrl + b Ctrl + s сохраняем сессию (в status bar tmux выпадет уведомление об успешном сохранении сессии).
  • Уничтожаем сессию или перезагружаемся
tmux kill-session -t session1
  • Открываем tmux заново
  • Восстанавливаем сессию комбинацией клавиш Ctrl + b Ctrl + r

❗️❗️ Интересный момент. В одном из окон при сохранении сессии у меня был открыт midnight commander. После восстановления окно с ним оказалось пустым, процесс не восстановился, хотя все остальные окна и процессы успешно вернулись в прежнее состояние. Для таких случаев существует возможность задать отдельную конфигурацию для конкретного процесса.

Добавляем в ~/tmux.conf следующее правило

set -g @resurrect-processes 'mc'

Таким образом, при восстановлении сессии через tmux-resurrect mc будет перезапущен (правда вкладки в mc не восстановятся, но уже что-то).

📌 Когда работаешь с большим числом окон и панелей, запускаешь процессы, выполняешь какой-то набор команд, часто возникает необходимость вернуться и просмотреть весь вывод в консоль или просто запомнить историю всех проделанных манипуляций. Тут нам поможет плагин Tmux Logging.

Основные возможности

  • Сохранение всего вывода в консоль в файл от момента начала логирования до его завершения соответствующими командами.
  • Текстовый скриншот экрана, т.е. сохранение в файл текущего вывода на экран консоли.
  • Запись истории всего происходящего в конкретной панели с момента ее создания.

Установка

В ~/.tmux.conf прописываем плагин:

set -g @plugin 'tmux-plugins/tmux-logging'

Сохраняем файл, подключаемся к tmux сессии, если еще не в ней, и устанавливаем плагин комбинацией Ctrl + b I.

Использование

➡️ Запустить / остановить записи логов для текущей панели: Ctrl + b Shift + p

  • Формат имени файла: tmux-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log
  • Каталог сохранения файла лога: $HOME

❗️ Если вы используете терминал с цветовой подсветкой синтаксиса, то полученные логи могут содержать ANSI символы, используемые как раз для цветового сопровождения текста, однако их наличие замусоривает вывод. Чтобы отфильтровать эти символы при записи логов, достаточно установить специализированный пакет ansifilter.

sudo apt install ansifilter -y

➡️ Сделать текстовый скриншот экрана: Ctrl + b Alt + p

  • Формат имени файла: tmux-screen-capture-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log
  • Каталог сохранения файла лога: $HOME

➡️ Записать в лог всю историю текущей панели с момента ее создания: Ctrl + b Alt + Shift + p

  • Формат имени файла: tmux-history-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log
  • Каталог сохранения файла лога: $HOME

Естественно, больше команд, чем вмещает в себя буфер tmux записать в историю не получится, но можно заранее расширить размер этого буфера в ~.tmux.conf следующим правилом:

set -g history-limit 50000

➡️ Очистить историю текущей панели: Ctrl + b Alt + c

📌 Для представления текущего каталога в виде древовидного списка в отдельной боковой панели существует плагин Tmux Sidebar (аналог утилиты tree, только вывод происходит в выделенную область, а не прямо в консоль текущего окна).

Установка

В ~/.tmux.conf прописываем плагин и устанавливаем:

set -g @plugin 'tmux-plugins/tmux-sidebar'

Использование

  • Ctrl + b Tab - открывает боковую панель с деревом каталогов и файлов текущей директории.
  • Ctrl + b Backspace - также открывает боковую панель, но еще и переносит фокус на нее.