opened image

tmux: от «разделить окно» до инструмента профессионального админа

 

Если вы хотя бы раз админили сервер по SSH, вы почти наверняка попадали в эту ситуацию:

  • что‑то долго устанавливается;

  • вы случайно закрываете терминал или отваливается интернет;

  • сессия рвётся — и всё, процесс прерван.

Вот тут на сцену выходит tmux — терминальный мультиплексор. Звучит страшно, но по сути это «менеджер вкладок и экранчиков внутри одного терминала», который живёт на сервере и не зависит от того, подключены вы или нет.

В этой статье я расскажу о tmux глазами системного администратора, но так, чтобы даже новичок смог с ним подружиться: от базового «разделить окно» до приёмов, которыми реально пользуются в продакшене. По дороге разберём подводные камни, чтобы не наступать на те же грабли.

 

 

Зачем вообще нужен tmux

 

Представьте: вы зашли по SSH на сервер, запустили долгий бэкап, а интернет моргнул. Без tmux — процесс упал. С tmux — вы просто заново подключаетесь к серверу и «вклиниваетесь» в живую сессию, где всё продолжает работать.

 

Кратко, что даёт tmux:

  1. Сессии, живущие без вас
    Всё, что запущено внутри tmux, продолжит работать даже после разрыва SSH.

  2. Окна и панели
    Можно разложить один терминал на несколько «экранчиков»: слева логи, справа htop, внизу — shell. И всё это в одном подключении.

  3. Подключение с разных мест
    Вы можете зайти в одну и ту же сессию tmux с домашнего ноутбука, потом с телефона, потом с рабочего ПК — и видеть всё, что там происходило.

  4. Меньше случайных «ой, окно закрылось»
    Даже если вы закрыли свою терминальную программу, tmux–сессия на сервере жива.

 

 

Базовая идея: префикс и команды

 

По умолчанию tmux использует префикс Ctrl+b. Это как «сказать tmux: слушай, сейчас будет команда».

 

Схема всегда одна:

  1. Нажимаем Ctrl+b (и отпускаем).

  2. Затем — нужную букву/символ.

Например, Ctrl+b % — это:

  1. Нажал Ctrl+b, отпустил.

  2. Нажал %.

  3. Окно разделилось вертикально.

Если вас бесит Ctrl+b, позже можно переназначить на Ctrl+a, но для начала оставим как есть.

 

 

Сессии: фундамент работы с tmux

 

Создать и подключиться

 

Самый простой старт:

tmux

 

Вы попали в новую сессию, внутри которой обычный shell — просто «под контролем» tmux.

 

Чуть более аккуратно:

tmux new -s work

 

Так вы создаёте сессию с именем work. Это удобно, когда у вас несколько проектов.

 

Отцепиться, но не убить

Классический приём админа:

  • вы в tmux;

  • нужно отойти, но процесс работать должен.

Нажимаем:

Ctrl+b d

 

Буква d — от слова detach (отцепиться). Сессия остаётся на сервере, а вы вываливаетесь в обычный shell.

 

Посмотреть список и вернуться

Посмотреть список сессий:

tmux ls

 

Подключиться к уже существующей:

tmux attach -t work   # по имени
# или
tmux a -t work

 

Создания, отцепления и возврата в сессию обычно достаточно, чтобы уже ощутить пользу tmux.

 

Подводный камень №1: «tmux не запоминает то, что было»

 

Новички иногда удивляются: «я установил в tmux какие‑то пакеты, вышел, заново зашёл по SSH — и меня кидает не в ту же сессию, а просто в shell».

Это нормальное поведение:

  • tmux–сессия осталась,

  • но автоматически в неё никто не входит.

Всегда нужно либо:

  • вручную сделать tmux a,

  • либо настроить себе алиас в shell, чтобы он подключался к tmux сам (это уже следующий уровень комфорта).

 

 

Окна: как вкладки в браузере, только в терминале

 

Внутри одной сессии tmux могут быть окна (windows). Это как вкладки в браузере: разные команды, каталоги, процессы — в рамках одной логической задачи.

Основные команды:

  • Ctrl+b c — создать новое окно.

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

  • Ctrl+b p — к предыдущему.

  • Ctrl+b 0..9 — перейти к окну по номеру.

  • Ctrl+b , — переименовать окно (очень спасает, когда окон много).

  • Ctrl+b & — закрыть окно.

 

Совет:

Привыкайте давать окнам осмысленные имена: web, db, logs. Через пару недель вы скажете себе «спасибо».

 

 

Панели: то самое «разделить окно»

 

Вот то, с чего обычно начинается любовь к tmux: разделение окна на несколько панелей.

 

Делим экран

  • Ctrl+b % — разделить вертикально (лево/право).

  • Ctrl+b " — разделить горизонтально (верх/низ).

Например:

  1. В верхней панели — tail -f /var/log/nginx/access.log.

  2. В нижней — редактируете конфиг или перезапускаете сервис.

Переключение между панелями

  • Ctrl+b o — перейти к следующей панели по кругу.

  • Ctrl+b ↑/↓/←/→ — переход по стрелкам (обычно работает из коробки).

  • Ctrl+b q — показать номера панелей, затем нажать цифру.

 

Изменение размера панелей

 

По умолчанию можно использовать команды на основе префикса, но это не всегда удобно. В конфиге (ниже) можно настроить управление стрелками.

Без конфига часто работают такие команды:

Ctrl+b :resize-pane -D 5  # вниз на 5 строк
Ctrl+b :resize-pane -U 5  # вверх
Ctrl+b :resize-pane -L 10 # влево на 10 колонок
Ctrl+b :resize-pane -R 10 # вправо

 

На практике большинство админов один раз настраивают удобные бинды и больше к этому не возвращаются.

 

Управление панелями

  • Ctrl+b x — закрыть текущую панель.

  • Ctrl+b zзум: развернуть панель на весь экран / вернуть.

  • Ctrl+b ! — вытащить панель в отдельное окно.

 

Подводный камень №2: «я всё разрезал, а теперь каша»

 

Очень легко увлечься и поделить один экран на 6–8 панелей, и вот уже ничего не читабельно. Тут помогают:

  • Ctrl+b Space — переключение между готовыми раскладками (layouts); tmux сам аккуратно разложит панели;

  • Ctrl+b z — временный зум именно той панели, с которой вы сейчас работаете.

 

Не бойтесь закрывать лишнее — Ctrl+b x не убивает всю сессию, только текущую панель.

 

 

Copy-mode и прокрутка: как нормально скроллить

 

Многие новички путаются: «я не могу прокрутить вверх, у меня терминал не листается». Это потому, что tmux перехватывает вывод.

 

Вход в режим просмотра (copy-mode)

  • Ctrl+b [ — войти в copy-mode.

Дальше:

  • стрелки, PageUp, PageDown — двигаться по буферу;

  • / — поиск вперёд;

  • ? — поиск назад;

  • n / N — следующие/предыдущие совпадения;

  • q — выйти.

 

Копирование текста внутри tmux

По умолчанию (emacs-стиль):

  1. Ctrl+b [ — войти в copy-mode.

  2. Стрелками поставить курсор в начало нужного фрагмента.

  3. Нажать Space — начать выделение.

  4. Стрелками выделить текст.

  5. Нажать Enter — скопировать в буфер tmux.

  6. Ctrl+b ] — вставить скопированное.

 

Мышь — друг человека (если включить)

Обычно в конфиге включают мышь:

set -g mouse on

 

После этого можно:

  • колесом мыши скроллить буфер;

  • кликом переключаться между панелями;

  • тянуть границы панелей мышкой.

 

Подводный камень №3: «я выделяю мышкой, но оно не копируется»

Если включена поддержка мыши в tmux, выделение мышью работает внутри tmux, а не в родном терминале. Это может ломать привычку «выделил — ПКМ — скопировал».

Решения:

  • привыкнуть к встроенному копированию tmux;

  • либо тонко настроить терминал и tmux, чтобы сочетание клавиш отправляло текст в системный буфер (это уже уровень «тонких настроек»).

Для начала достаточно понимать, что внутри tmux логика копирования и скролла может отличаться от «голого» терминала.

 

 

Немного «профи»: дерево сессий и синхронизация панелей

 

Дерево сессий/окон

Команда, которой часто пользуются админы:

  • Ctrl+b s — открывает список сессий и окон в виде дерева.

Стрелками перемещаемся, Enter — переходим. Очень удобно, когда у вас несколько сессий и внутри каждой по 5–10 окон.

 

Синхронизация панелей: один ввод — много серверов

Представьте, что у вас три одинаковых сервера, подключённых через SSH в трёх панелях. Вы хотите выполнить одну и ту же команду на всех сразу.

В tmux можно включить синхронизацию панелей:

Ctrl+b :setw synchronize-panes on

 

Теперь всё, что вы печатаете в одной панели окна, будет дублироваться во все панели этого окна.

Чтобы отключить:

Ctrl+b :setw synchronize-panes off

 

Очень мощный приём, но с ним нужно быть аккуратным: команда rm -rf / тоже поедет на все панели.

 

 

Минимальный конфиг tmux для комфортной работы

 

Конфигурационный файл tmux обычно лежит в ~/.tmux.conf.

Пример простого, но полезного конфига:

# Сменить префикс на Ctrl+a (как в screen)
unbind C-b
set-option -g prefix C-a
bind C-a send-prefix

# Включить мышь
set -g mouse on

# Удобный ресайз панелей стрелками
bind -r Left  resize-pane -L 5
bind -r Right resize-pane -R 5
bind -r Up    resize-pane -U 2
bind -r Down  resize-pane -D 2

# Быстрое разделение панелей
bind | split-window -h
bind - split-window -v

# Переключение окон по Alt+цифрам
bind -n M-1 select-window -t 1
bind -n M-2 select-window -t 2
bind -n M-3 select-window -t 3
bind -n M-4 select-window -t 4
bind -n M-5 select-window -t 5
bind -n M-6 select-window -t 6
bind -n M-7 select-window -t 7
bind -n M-8 select-window -t 8
bind -n M-9 select-window -t 9

 

После изменений конфиг можно подгрузить без выхода из tmux:

Ctrl+a :source-file ~/.tmux.conf

 

(Здесь мы уже поменяли префикс на Ctrl+a.)

 

 

Типичные ошибки и как их избежать

 

Ошибка 1. Запустил tmux, выключил сервер, всё пропало.

tmux не спасает от перезагрузки сервера. Он защищает от разрыва подключения, но не от остановки ОС. Всё, что вы делаете, всё равно живёт внутри Linux.

 

Ошибка 2. Внутри tmux запускают ещё один tmux просто так.

Иногда новички видят надпись tmux в заголовке окна и всё равно запускают tmux ещё раз. Получается tmux внутри tmux. Это не запрещено, но легко запутаться с префиксами.

Правило простое: в одной SSH–сессии вам почти всегда достаточно одного tmux.

 

Ошибка 3. Панелей слишком много, ничего не видно.

Не делите терминал до бесконечности. Лучше:

  • использовать несколько окон (windows);

  • использовать Ctrl+b z для временного зума;

  • применять Ctrl+b Space для аккуратной раскладки.

 

Ошибка 4. «Я не понимаю, где я нахожусь»

Заведите привычку:

  • давать сессиям осмысленные имена (tmux new -s projectX);

  • переименовывать окна (Ctrl+b ,);

  • использовать статусную строку tmux (по умолчанию она уже есть — внизу экрана видны окна и их номера).

 

Как начать пользоваться tmux уже сегодня

  1. Зайдите по SSH на свой сервер.

  2. Введите tmux и нажмите Enter.

  3. Попробуйте:

    • разделить окно: Ctrl+b % и Ctrl+b ";

    • создать новое окно: Ctrl+b c;

    • отцепиться: Ctrl+b d;

    • вернуться: tmux a.

  4. Через пару дней добавьте себе простой ~/.tmux.conf и включите мышь.

 

Главное — не бойтесь. tmux сначала кажется чем‑то «для гуру», но по факту это один из самых человечных инструментов в жизни администратора. Он про заботу о вашем времени и нервах: чтобы длинные команды не пропадали, процессы не падали из‑за плохого Wi‑Fi, а в одном окне можно было видеть сразу несколько кусочков системы.

И да, всё начинается с простой команды «разделить окно». А дальше вы оглянетесь и поймёте, что не представляете SSH–жизнь без tmux.