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

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

Анатолий Остроумов

linux

656 Words

2026-07-02 22:24 +0300


tmux ui

Что такое 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выбор окна стрелочками
09выбор окна по номеру
Работа с панелями
%Разбить панель горизонтально на две части
-Разбить окно вертикально на 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

Как оно работает:

  1. -z "$TMUX" проверяет, что сеанс пользователя не в окне tmux - это защитит от рекурсии - бесконечного “обёртывания” сессии в tmux
  2. -n "$PS1" проверяет, что терминал интерактивный - то есть, это не ломает SCP/SFTP.
  3. tmux attach-session -t default пытается соединиться с сессией default если она есть
  4. tmux new-session -s default создаёт сессию default если её нет.

Но, использование автоматической консоли tmux может сломать ansible и прочие скрипты, которые запускают команды удалённо через ssh, поэтому, данный код лучше использовать с осторожностью.