Я использую Tmux на Ubuntu Trusty

Posted by

Сегодня речь пойдет о консоли, о терминальном мультиплексоре (Имя утилиты: ) посредством которого можно в рамках одного экрана работать со множеством терминалов. Это удобно, приходишь на работу, запускаешь скрипт и запускается терминал с разделенным окнами где в каждом отображается: текущая ситуация по нагрузке, почтовая очередь, статус выполнения бекапа и все многое другое до чего дотянутся Ваши задачи. Может сперва и не понятно, что есть мультиплексор, но стоит себя заставить поставить его и поработать некоторое время. А лучше поставить цель — научиться использовать. Также важным из собственных наблюдений считаю возможность отключаться от текущей сессии и подключаться заново. Чем это может помочь? К примеру я подключен к своему хостингу, анализирую выполнение бекапа и см. логи, отключился, а после снова подключился и продолжаю как не в чем не бывало, терминал просто как бы свернулся, но пока работает сервер работает и tmux.

Произвожу установку на рабочую систему Ubuntu Trusty Desktop/Server:

ekzorchik@srv-trusty:~$ sudo rm -Rf /var/lib/apt/lists/

ekzorchik@srv-trusty:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-trusty:~$ apt-cache search tmux

tmux - terminal multiplexer

Устанавливаю пакет tmux из стандартных репозитариев:

ekzorchik@srv-trusty:~$ sudo apt-get install tmux -y

ekzorchik@srv-trusty:~$ tmux

На заметку: управление терминалом tmux осуществляется через первоначальное сочетание клавиш (Ctrl + b) и комбинация.

Примеры с которыми знакомился я при изучении:

Ctrl + b + (Shift) + % — разделить окно на два вертикальных окна, если окно стало не нужны то набираем exit и окно(консоль) закрывается или Ctrl + b + x

Ctrl + b + (Shift) +" → разделить окно на два горизонтальный окна

Ctrl + b + o → для переключения между окнами, либо Ctrl + b + стрелки (влево, вправо, вперед, назад)

Нажать и держать Ctrl + b и нажимать стрелки влево («<-») и вправо («->») → этим действием я делаю ресайз окна по размеру.

Пример разделения консоли на окна:

Пример разделения окна через Tmux

Ctrl + b + c → Создать новое окно и перейти в него:

Три созданных окна в рамках сессии

 

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

при первом запуске приложения, данное окно будет названо в его честь

чтобы его переименовать: Ctrl + b + ,

Переименовываем окно

чтобы выйти и окна: Ctrl + b + &

Выходим из окна сессии

окна нумеруются с нуля, соответственно, новое окно будет отмечено цифрой 1.

Ctrl + b + 1 → перейти к окну номер 1

Ctrl + b + 2 → перейти к окну номер 2

Ctrl + b + n → перейти к следующему окну по порядку

Ctrl + b + p → перейти к предыдущему окну

Ctrl + b + w → отобразить список окон и перейти на выбранное окно.

Ctrl + b + s → выбрать сессию (Очень удобно)

Ctrl + b + t → отобразить текущее время, клавишей Esc закрыть показанное.

Ctrl + b + d → отключить сессию

Отобразить список сессий:

ekzorchik@srv-trusty:~$ tmux list-sessions

или так:

ekzorchik@srv-trusty:~$ tmux ls

0: 3 windows (created Thu Oct 26 12:55:18 2017) [90x24]

Подключиться обратно к отключенной сессии:

ekzorchik@srv-trusty:~$ tmux attach -t 0

или так:

ekzorchik@srv-trusty:~$ tmux attach-session -t 0

Убить отключенную сессию:

ekzorchik@srv-trusty:~$ tmux kill-session -t 0

Что еще примечательно так это возможность добавления настроек в пользовательском каталоге конфигурационного файла:

ekzorchik@srv-trusty:~$ nano ~/.tmux.conf

#Все что начинается с символа решетки «#» есть комментарий и выполняется не будет.

#изменить префикс запуска команд с Ctrl + b на Ctrl +a

set-option -g prefix C-a

# отключить префикс Ctrl + b

unbind-key C-b

#использование префиксов в удаленной сессии

bind-key C-a send-prefix

#изменить нумерацию не с нуля, а с единицы

set -g base-index 1

#отключить Escape последовательности

set-option -sg escape-time 0

#обновить ~/.tmux.conf

unbind r

bind r source-file ~/.tmux.conf

# enable mouse

setw -g mode-mouse on

set -g mouse-select-pane on

set -g mouse-resize-pane on

set -g mouse-select-window on

Чтобы создать сессию где будут запущены группы приложений одной задачи:

ekzorchik@srv-trusty:~$ tmux new-session -s example

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

  • $ tmux list-session
  • $ tmux new-session <имя-сессии>
  • $ tmux attach-session -t <имя-сессии>
  • $ tmux rename-session -t <имя-сессии>
  • $ tmux choose-session -t <имя-сессии>
  • $ tmux kill-session -t <имя-сессии>

Создание сессии с именем окна htop, имя сессии one и после запуск утилиту htop:

ekzorchik@srv-trusty:~$ tmux new-session -n htop -s one 'htop'

На заметку: чтобы изменения в tmux применились нужно завершить полностью сессию и запустить заново.

Чтобы предопределить лимит(буфер) вводимых команд:

ekzorchik@srv-trusty:~$ set -g history-limit 999999

Отобразить список ключей:

ekzorchik@srv-trusty:~$ tmux list-keys

Отобразить список команд:

ekzorchik@srv-trusty:~$ tmux list-commands

Отобразить информацию по каждой сессии:

ekzorchik@srv-trusty:~$ tmux info

Перечитать конфигурационный файл tmux (~/.tmux.conf)

ekzorchik@srv-trusty:~$ tmux source-file ~/.tmux.conf

Чтобы отправить команду в отключенный сеанс (если не указать слово Enter то команда будет просто набрана, но не запущена)

ekzorchik@srv-trusty:~$ tmux send -t 5 htop ENTER

после подключившись к ней вижу запущенную утилиту htop

ekzorchik@srv-trusty:~$ tmux attach-session -t 5

Подключившись к сессии вижу отправленную ранее команду

Чтобы записывать все происходящее в консоли:

ekzorchik@srv-trusty:~$ nano ~/.tmux.conf

bind-key H pipe-pane "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Started logging to $HOME/#W-tmux.log'

bind-key h pipe-pane \; display-message 'Ended logging to $HOME/#W-tmux.log'

ekzorchik@srv-trusty:~$ tmux source-file ~/.tmux.conf

ekzorchik@srv-trusty:~$ tmux attach-session -t example

и нажимаю Ctrl + b + H и включается запись в лог, а если Ctrl + b + h для выключения записи в лог.

Чтобы назначить собственные действия командам в ~/.tmux.conf

  • bind-key -n F1 select-window -t 1
  • -n F1 → задаем клавишу
  • select-window -t 1 → выполняемое действие

Пример запуска с заранее предопределенными окнами программ:

ekzorchik@srv-trusty:~$ nano window

#!/bin/bash

# запускаю сервер tmux

tmux start-server

# создаю сессию: -n имя окна, -s имя сессии, и запускаю приложение

tmux new-session -n htop -s one 'htop'

# создаю окно под номером 2 в сесии one с именем vim и запускаю приложение

tmux new-window -n vim -t one:2 'vim'

# выбираю первое окно

tmux select-window -t one:1

# присоединяюсь к активному терминалу с сессией one и запущенным приложением htop

tmux attach -t one

ekzorchik@srv-trusty:~$ chmod +x window

ekzorchik@srv-trusty:~$ ./window

Предеопределенный запуск настроек терминала с окнами

Итого я получил инструмент заслуживающий того, чтобы его использовать в повседневности. По мере моих наработок и вычитки различных источников данная заметка будет наполняться. Добавить здесь нечего нужно использовать, а пока я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.