Шпаргалка по tmux

Что такое tmux?
tmux — это консольный мультиплексор для Unix-подобных систем, который позволяет
запускать несколько терминальных сессий в одном окне, разделять экран на панели
и продолжать работу фоновых процессов даже после закрытия терминала или
разрыва SSH-соединения. Инструмент особенно полезен для одновременного
редактирования файлов, мониторинга логов и администрирования серверов.
Ещё он выглядит очень по-хакерски.
Как установить?
CentOS (нужен подключенный репо EPEL)
$ sudo yum install epel-release
$ sudo yum install tmux
Fedora
$ sudo dnf install tmux
Ubuntu/Debian/Astra
$ sudo apt-get install tmux
Общее использование
Запуск сессии tmux:
$ tmux
Присоединиться к УЖЕ работающей сессии
$ tmux a
Выключить сервер tmux и закрыть все сессии
$ tmux kill-server
Чтобы выделить текст в окне tmux мышью, зажмите клавишу SHIFT (Windows) или OPTIONS (Mac), а затем используйте мышь как обычно.
Горячие клавиши
| Клавиша | Описание |
|---|---|
CTRL+b <command> | отправить команду <command> в tmux вместо консоли |
| Общие команды | |
? | Показать список комманд (q закрывает список) |
: | Включить ввод комманд |
| Работа с окнами | |
c | создать окно |
, | удалить окно |
p | переключиться на предыдущее окно |
n | переключиться на следующее окно |
w | выбор окна стрелочками |
0…9 | выбор окна по номеру |
| Работа с панелями | |
% | Разбить панель горизонтально на две части |
- | Разбить окно вертикально на 2 части * |
→ | Перейти на правую панель |
← | Перейти на левую панель |
↑ | Перейти на верхнюю панель |
↓ | Перейти на нижную панель |
| Работа с сессиями | |
d | Отключится от сессии, оставив её работать в фоне |
| Режим копирования | |
CTRL + B + PageUP | вход в «режим копирования» |
PageUp, PageDown | прокрутка |
q | выход из «режима копирования» |
* требует настройки bind - split-window -v в конфигурационном файле ~/.tmux.conf
Команды
| Команда | Описание |
|---|---|
| tmux -s SESSION_NAME | создаёт сессию с именем SESSION_NAME |
| tmux list-sessions | выводит список всех активных сессий |
| tmux attach -t SESSION_NAME | соединяется с сессией SESSION_NAME |
| tmux a -t SESSION_NAME | соединяется с сессией SESSION_NAME |
| tmux a | соединяется с крайней сессией |
Автоматизация tmux
Этот скрипт проверяет, что если запущен tmux, то мы подключаемся к сессии server1, а если нет,
то создаём сессию server1 в которой запущенны некие программы.
#!/usr/bin/env bash
if /usr/bin/tmux has-session -t 'server1'
then
echo "Attaching to session..."
/usr/bin/tmux attach-session -t 'server1'
else
echo "Creating tmux session..."
/usr/bin/tmux new-session -d -s 'server1' -n 'mc' 'mc'
/usr/bin/tmux new-window -d -n 'root' 'su'
/usr/bin/tmux new-window -d -n 'shell'
/usr/bin/tmux new-window -d -n 'htop' 'htop'
/usr/bin/tmux new-window -d -n 'nginx' 'journalctl -u nginx -f'
/usr/bin/tmux new-window -d -n 'dovecot' 'journalctl -u dovecot -f'
/usr/bin/tmux new-window -d -n 'errors' 'journalctl -p 3 -f'
/usr/bin/tmux attach-session -t 'server1'
fi
Этот ответ сильно помог - https://unix.stackexchange.com/a/102534/229266
Включаем поддержку мыши
У меня поддержка манипулятора типа мышь заработала, когда я добавит это в ~/.tmux.conf:
set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on
Применить настройки можно так - $ tmux source ~/.tmux.conf
Меняем командный префикс по умолчанию
set -g prefix C-a
и теперь для отправки команды надо нажать вместо CTRL + b комбинацию CTRL + a.
Можно вообще убрать комбинацию по умолчанию (CTRL+b) такой командой:
unbind C-b
Меняем привязки клавиш
Можно добавить или изменить привязки клавиш путём редактирования файла конфигурации
~/.tmux.conf. Допустим, так можно привязать команду горизонтального разбиения окна к комбинации клавиш Ctrl+B+|:
bind | split-window -h
Включаем оповещение об активности в окне
tmux setw -g monitor-activity on
tmux set -g visual-activity on
Подключаемся к сессии tmux при соединении по SSH
В моём случае сработало редактирования файла ./bashrc - я добавил эти строки:
if [[ -z "$TMUX" && -n "$PS1" ]]; then
tmux attach-session -t default || tmux new-session -s default
fi
Как оно работает:
-z "$TMUX"проверяет, что сеанс пользователя не в окне tmux - это защитит от рекурсии - бесконечного “обёртывания” сессии вtmux-n "$PS1"проверяет, что терминал интерактивный - то есть, это не ломает SCP/SFTP.tmux attach-session -t defaultпытается соединиться с сессиейdefaultесли она естьtmux new-session -s defaultсоздаёт сессиюdefaultесли её нет.
Но, использование автоматической консоли tmux может сломать ansible и прочие скрипты, которые запускают команды удалённо через ssh,
поэтому, данный код лучше использовать с осторожностью.