Tmux: продуктивная работа с терминалом

tmuxlinuxterminalproductivity

Если вы работаете с серверами по SSH, рано или поздно случается: обрыв соединения посреди длительного процесса, и всё пропало. Или нужно следить за логами в одном окне, редактировать конфиг в другом, а в третьем запускать деплой. Переключаться между терминалами — неудобно, открывать пять SSH-сессий к одному серверу — расточительно.

Tmux решает обе проблемы: он сохраняет сессии при разрыве соединения и позволяет работать с несколькими панелями в одном терминале. После недели использования вы не захотите возвращаться к голому терминалу.

Установка

На большинстве дистрибутивов tmux есть в стандартных репозиториях:

# Ubuntu/Debian
sudo apt install -y tmux

# CentOS/RHEL
sudo yum install -y tmux

# macOS
brew install tmux

# Проверяем версию
tmux -V

Рекомендую tmux 3.0+ — в нём появились важные улучшения: поддержка popup-окон, улучшенная работа с буфером обмена, настраиваемые хуки.

Базовые концепции

Tmux оперирует тремя уровнями абстракции:

Структура tmux: серверы, сессии, окна и панели

Сессия (session) — верхний уровень. Это именованная группа окон. Сессия живёт на сервере, даже если вы отключились. Можно иметь несколько сессий: одна для проекта A, другая для проекта B.

Окно (window) — аналог вкладки в браузере. Каждое окно занимает весь экран терминала. Переключение между окнами мгновенное.

Панель (pane) — разделение окна на области. Можно разбить окно вертикально, горизонтально или комбинированно. Каждая панель — независимый терминал.

Все команды tmux начинаются с префикса — по умолчанию Ctrl+b. Нажимаете Ctrl+b, отпускаете, затем нажимаете клавишу команды.

Работа с сессиями

# Создать новую сессию с именем
tmux new-session -s work

# Или сокращённо
tmux new -s work

# Отключиться от сессии (detach) — сессия продолжает работать
# Ctrl+b, затем d

# Список активных сессий
tmux list-sessions
# или сокращённо
tmux ls

# Подключиться к существующей сессии
tmux attach -t work
# или
tmux a -t work

# Подключиться к последней сессии
tmux a

# Убить сессию
tmux kill-session -t work

# Переименовать текущую сессию
# Ctrl+b, затем $

Типичный workflow: подключаетесь к серверу по SSH, создаёте tmux-сессию, работаете. Если SSH-соединение обрывается — сессия остаётся. Переподключаетесь и делаете tmux a — всё на месте, все процессы работают.

Работа с окнами

# Создать новое окно
# Ctrl+b, затем c

# Переключиться на следующее окно
# Ctrl+b, затем n

# Переключиться на предыдущее окно
# Ctrl+b, затем p

# Переключиться на окно по номеру
# Ctrl+b, затем 0..9

# Переименовать текущее окно
# Ctrl+b, затем ,

# Закрыть текущее окно
# Ctrl+b, затем &
# или просто exit в шелле

В строке состояния внизу видны все окна с их номерами и именами. Звёздочка * отмечает текущее окно.

Работа с панелями

Панели — это основная причина, по которой люди начинают использовать tmux:

# Разделить горизонтально (верх/низ)
# Ctrl+b, затем "

# Разделить вертикально (лево/право)
# Ctrl+b, затем %

# Переключиться между панелями
# Ctrl+b, затем стрелки (←↑↓→)

# Изменить размер панели
# Ctrl+b, зажать стрелку

# Перевести панель в полноэкранный режим (zoom)
# Ctrl+b, затем z
# Повторное нажатие — вернуть обратно

# Закрыть текущую панель
# Ctrl+b, затем x

# Поменять панели местами
# Ctrl+b, затем { или }

# Выбрать раскладку панелей
# Ctrl+b, затем пробел (переключает стандартные раскладки)

Zoom-режим (Ctrl+b z) особенно полезен: развернули панель с логами на весь экран, посмотрели, нажали z снова — вернулись к многопанельному виду.

Копирование текста (copy mode)

Tmux имеет собственный буфер для копирования. Это работает даже через SSH — не нужно выделять мышью:

# Войти в режим копирования
# Ctrl+b, затем [

# Навигация — стрелки или vi-клавиши (hjkl)
# Начать выделение — пробел
# Скопировать выделенное — Enter

# Вставить из буфера tmux
# Ctrl+b, затем ]

Для полноценной работы в copy mode лучше включить vi-клавиши (см. раздел про конфиг ниже).

Конфигурация: ~/.tmux.conf

Дефолтные настройки tmux… спорные. Префикс Ctrl+b неудобен, нумерация окон с нуля, нет мыши. Вот конфиг, к которому я пришёл после нескольких лет использования:

# ~/.tmux.conf

# Префикс: Ctrl+a вместо Ctrl+b (ближе к мизинцу)
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# Нумерация окон и панелей с 1 (не с 0)
set -g base-index 1
setw -g pane-base-index 1

# Автоматическая перенумерация окон при закрытии
set -g renumber-windows on

# Увеличить буфер истории
set -g history-limit 50000

# Уменьшить задержку после Escape (важно для vim)
set -sg escape-time 10

# Включить мышь (resize, select, scroll)
set -g mouse on

# Vi-клавиши в copy mode
setw -g mode-keys vi

# Vi-подобные биндинги для копирования
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel

# Разделение панелей интуитивными клавишами
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# Новое окно в текущей директории
bind c new-window -c "#{pane_current_path}"

# Быстрое переключение между панелями (Alt+стрелки, без префикса)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Перезагрузка конфига
bind r source-file ~/.tmux.conf ; display "Config reloaded!"

# 256 цветов и true color
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"

# Строка состояния
set -g status-style 'bg=#1e1e2e fg=#cdd6f4'
set -g status-left '#[fg=#89b4fa,bold] #S '
set -g status-right '#[fg=#a6adc8] %H:%M %d-%b '
set -g status-left-length 30
setw -g window-status-current-style 'fg=#f38ba8 bold'
setw -g window-status-current-format ' #I:#W '
setw -g window-status-format ' #I:#W '

После изменения конфига перезагрузите его без перезапуска tmux:

# Из командной строки tmux (Ctrl+b, затем :)
source-file ~/.tmux.conf

# Или если добавили биндинг из конфига выше
# Ctrl+a, затем r

Плагины: TPM

Tmux Plugin Manager (TPM) — менеджер плагинов, который значительно расширяет возможности tmux.

Установка:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Добавьте в конец ~/.tmux.conf:

# Плагины
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'     # разумные дефолты
set -g @plugin 'tmux-plugins/tmux-resurrect'     # сохранение/восстановление сессий
set -g @plugin 'tmux-plugins/tmux-continuum'     # автосохранение сессий
set -g @plugin 'tmux-plugins/tmux-yank'          # копирование в системный буфер

# tmux-resurrect: что сохранять
set -g @resurrect-capture-pane-contents 'on'
set -g @resurrect-strategy-vim 'session'

# tmux-continuum: автосохранение каждые 15 минут
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'

# Инициализация TPM (должно быть в самом конце)
run '~/.tmux/plugins/tpm/tpm'

Установка плагинов: Ctrl+a, затем I (заглавная).

tmux-resurrect — killer-фича. При перезагрузке сервера все tmux-сессии теряются. Resurrect сохраняет состояние (окна, панели, рабочие директории) и восстанавливает после перезапуска: Ctrl+a Ctrl+s для сохранения, Ctrl+a Ctrl+r для восстановления.

Практические сценарии

Мониторинг сервера

Создаём рабочее пространство для наблюдения за сервером:

# Скрипт для создания мониторинг-сессии
tmux new-session -d -s monitor

# Первое окно: системные метрики
tmux send-keys -t monitor 'htop' C-m

# Разделяем горизонтально — логи
tmux split-window -v -t monitor
tmux send-keys -t monitor 'journalctl -f' C-m

# Разделяем правую панель — дисковое пространство
tmux split-window -h -t monitor
tmux send-keys -t monitor 'watch -n 5 df -h' C-m

# Подключаемся
tmux attach -t monitor

Разработка: IDE в терминале

tmux new-session -d -s dev -c ~/projects/myapp

# Редактор
tmux send-keys -t dev 'vim .' C-m

# Второе окно — терминал для команд
tmux new-window -t dev -c ~/projects/myapp
tmux rename-window -t dev 'shell'

# Третье окно — логи приложения
tmux new-window -t dev -c ~/projects/myapp
tmux rename-window -t dev 'logs'
tmux send-keys -t dev 'tail -f logs/app.log' C-m

tmux select-window -t dev:1
tmux attach -t dev

SSH + tmux: правильный workflow

На каждом сервере, к которому подключаюсь регулярно, у меня есть tmux-сессия. Алиас в ~/.bashrc на сервере:

# Подключиться к существующей сессии или создать новую
alias ta='tmux attach || tmux new-session -s main'

В ~/.ssh/config на клиенте можно автоматизировать:

Host production
    HostName 194.87.104.208
    Port 6622
    User alex
    RemoteCommand tmux attach -t main || tmux new-session -s main
    RequestTTY yes

Теперь ssh production сразу подключает к tmux-сессии.

Полезные команды

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

ДействиеКомбинация
Detach (отключиться)Prefix d
Новое окноPrefix c
Следующее окноPrefix n
Предыдущее окноPrefix p
Разделить горизонтальноPrefix "
Разделить вертикальноPrefix %
Переключить панельPrefix стрелки
Zoom панелиPrefix z
Режим копированияPrefix [
ВставитьPrefix ]
Список сессийPrefix s
Командная строка tmuxPrefix :
Показать номера панелейPrefix q

Альтернативы

Screen — предшественник tmux. До сих пор установлен почти везде. Если нужен терминальный мультиплексор на сервере, где нельзя ставить пакеты — screen, скорее всего, уже есть. Но функциональность и удобство значительно уступают tmux.

Zellij — современная альтернатива на Rust. Красивый UI из коробки, встроенные подсказки по клавишам, плагинная система на WebAssembly. Если начинаете с нуля и не привязаны к tmux — стоит попробовать.

Терминальные мультиплексоры в эмуляторах — iTerm2, WezTerm, Kitty имеют встроенные вкладки и разделение экрана. Но они не переживают разрыв SSH-соединения, что делает tmux незаменимым для серверной работы.

Итог

Tmux — один из тех инструментов, которые кажутся необязательными, пока не начнёшь использовать. После привыкания (пара дней) работа без tmux ощущается как работа без автодополнения в шелле — можно, но зачем.

Начните с малого: установите tmux, создайте сессию, попробуйте разделить экран на панели. Добавьте конфиг из этой статьи. Через неделю вы будете удивляться, как работали без этого.

© 2026 Terminal Notes. Built with SvelteKit.