Как использовать tmux на Linux VPS
Установка и настройка tmux на Linux VPS: постоянные терминальные сессии, разделение окон на панели и защита от разрывов SSH. Для Debian 12 и Ubuntu 24.04.
Ты подключаешься к VPS по SSH, запускаешь долгую миграцию базы данных, и тут отваливается Wi-Fi. Процесс убит. Работа потеряна.
tmux решает эту проблему. Он запускает терминальные сессии (sessions) прямо на сервере, независимо от SSH-соединения. Отключился, подключился заново и продолжил с того же места.
Этот туториал охватывает tmux от первой установки до скриптованных раскладок с несколькими панелями. Все команды работают на Debian 12 и Ubuntu 24.04.
Что такое tmux и зачем он нужен на VPS?
tmux — это терминальный мультиплексор (terminal multiplexer). Он позволяет запускать несколько терминальных сессий внутри одного SSH-подключения, и эти сессии продолжают жить на сервере даже после отключения.
tmux организует работу на трёх уровнях:
- Sessions (сессии) — контейнер верхнего уровня. Каждая сессия — отдельное рабочее пространство. Можно отключиться от сессии и подключиться позже.
- Windows (окна) — живут внутри сессий. Аналог вкладок. Каждое окно запускает свою оболочку.
- Panes (панели) — разделяют окно на несколько прямоугольников, каждый со своей командой.
Session "deploy"
├── Window 0: "editor"
│ ├── Pane 0: vim
│ └── Pane 1: file watcher
└── Window 1: "logs"
└── Pane 0: journalctl -f
На VPS tmux даёт три вещи, которые реально важны:
- Защита от разрыва SSH. Процессы продолжают работать при обрыве соединения. Переподключился — восстановил сессию.
- Многопанельные рабочие пространства. Логи в одной панели, команды в другой, редактор в третьей. Всё в одном SSH-подключении.
- Постоянство сессий. Сессия работает днями. Отключился вечером, подключился утром.
Как установить tmux на Debian 12 и Ubuntu 24.04?
tmux есть в стандартных репозиториях Debian 12 и Ubuntu 24.04. Установка одной командой.
sudo apt update && sudo apt install -y tmux
Проверяем установку:
tmux -V
Ожидаемый вывод на Debian 12:
tmux 3.3a
Ожидаемый вывод на Ubuntu 24.04:
tmux 3.4
Обрати внимание: номер версии подтверждает, что tmux установлен из официальных репозиториев. Если видишь пустой вывод или "command not found", установка не прошла. Проверь вывод apt на ошибки.
Как создавать и управлять сессиями tmux?
Сессия (session) tmux — это постоянное рабочее пространство на сервере. Создаёшь сессию, запускаешь команды, и она продолжает жить, даже если закроешь терминал.
Создание сессий
Создаём сессию с именем:
tmux new-session -s deploy
Это создаёт сессию "deploy" и подключает тебя к ней. Внизу терминала появится зелёная статус-строка. Она подтверждает, что ты внутри tmux-сессии.
Создание сессии без подключения к ней (полезно в скриптах):
tmux new-session -d -s background
Проверяем, что сессия существует:
tmux list-sessions
background: 1 windows (created Thu Mar 19 10:00:00 2026)
Как отключиться от сессии tmux и подключиться обратно?
Это основной рабочий процесс на VPS. Отключаешься от сессии, освобождаешь терминал, потом подключаешься обратно и продолжаешь работу. Сессия продолжает работать на сервере.
Для отключения нажми prefix key (клавишу-префикс), затем d:
Ctrl-b d
Prefix key по умолчанию — Ctrl-b. Нажми Ctrl и b одновременно, отпусти, затем нажми d. Все горячие клавиши tmux работают так: сначала префикс, потом клавиша действия.
Терминал возвращается к обычной оболочке. Сессия продолжает работать.
Для повторного подключения:
tmux attach -t deploy
Если у тебя только одна сессия, имя можно не указывать:
tmux attach
Проверяем, какие сессии запущены:
tmux list-sessions
deploy: 1 windows (created Thu Mar 19 10:00:00 2026) (attached)
background: 1 windows (created Thu Mar 19 10:05:00 2026)
Метка (attached) показывает, к какой сессии подключён твой терминал.
Удаление сессий
Когда сессия больше не нужна, удаляем:
tmux kill-session -t background
Проверяем, что она удалена:
tmux list-sessions
Чтобы убить все сессии и полностью остановить сервер tmux:
tmux kill-server
Переименование сессий
Внутри сессии нажми:
Ctrl-b $
Введи новое имя и нажми Enter. Полезно, если сессия была создана без имени и tmux присвоил ей номер.
Как использовать окна tmux для организации задач?
Windows (окна) — это вкладки внутри сессии. Каждое окно запускает свою оболочку. Используй их для разделения задач, которые не нужно видеть одновременно.
Создаём новое окно:
Ctrl-b c
Статус-строка обновляется и показывает новое окно. Звёздочка (*) отмечает активное окно:
[deploy] 0:bash 1:bash*
Переключение между окнами
По номеру:
Ctrl-b 0 # Go to window 0
Ctrl-b 1 # Go to window 1
Циклически:
Ctrl-b n # Next window
Ctrl-b p # Previous window
Переименование окна
Ctrl-b ,
Введи осмысленное имя вроде "logs" или "editor" и нажми Enter. Именованные окна делают статус-строку читаемой, когда открыто несколько окон.
Закрытие окна
Набери exit в оболочке, или нажми:
Ctrl-b &
tmux попросит подтверждение перед закрытием.
Как разделить терминал на панели?
Panes (панели) разделяют окно на несколько терминалов, видимых одновременно. Именно тут tmux раскрывается на полную для администрирования VPS: логи в одной панели, команды в другой.
Горизонтальное разделение (верх и низ):
Ctrl-b "
Вертикальное разделение (лево и право):
Ctrl-b %
После разделения у тебя две панели. Зелёная граница выделяет активную панель.
Как перемещаться между панелями и менять их размер?
Перемещение между панелями стрелками:
Ctrl-b ↑ # Move to pane above
Ctrl-b ↓ # Move to pane below
Ctrl-b ← # Move to pane left
Ctrl-b → # Move to pane right
Изменение размера панелей:
Ctrl-b Ctrl-↑ # Resize pane up
Ctrl-b Ctrl-↓ # Resize pane down
Ctrl-b Ctrl-← # Resize pane left
Ctrl-b Ctrl-→ # Resize pane right
Масштабирование панели
Нужно временно развернуть панель на весь экран? Переключаем zoom:
Ctrl-b z
Нажми ещё раз, чтобы вернуть разделённую раскладку. В статус-строке появляется Z рядом с именем окна, когда панель развёрнута.
Закрытие панели
Набери exit в панели, или нажми:
Ctrl-b x
tmux попросит подтверждение. Если закрыть последнюю панель в окне, окно тоже закроется.
Перестановка панелей
Ротация позиций панелей:
Ctrl-b { # Move current pane left/up
Ctrl-b } # Move current pane right/down
Как использовать copy mode в tmux для прокрутки и поиска?
По умолчанию в tmux нельзя прокручивать содержимое панели колесом мыши или Page Up. Copy mode (режим копирования) даёт прокрутку, поиск и выделение текста.
Входим в copy mode:
Ctrl-b [
Теперь ты в режиме копирования. В правом верхнем углу отображается позиция в буфере прокрутки (например, [0/500]).
Навигация в copy mode
По умолчанию tmux использует клавиши в стиле emacs. Если переменная окружения EDITOR или VISUAL содержит "vi", используются клавиши в стиле vi.
Режим emacs (по умолчанию):
| Действие | Клавиша |
|---|---|
| Прокрутка вверх | Ctrl-Up или Page Up |
| Прокрутка вниз | Ctrl-Down или Page Down |
| Перемещение курсора | Arrow keys |
| Начало строки | Ctrl-a |
| Конец строки | Ctrl-e |
| Поиск вперёд | Ctrl-s |
| Поиск назад | Ctrl-r |
| Начать выделение | Ctrl-Space |
| Скопировать выделение | Alt-w |
| Выйти из copy mode | q |
Режим vi:
| Действие | Клавиша |
|---|---|
| Прокрутка вверх | Ctrl-u (полстраницы) |
| Прокрутка вниз | Ctrl-d (полстраницы) |
| Перемещение курсора | h j k l |
| Поиск вперёд | / |
| Поиск назад | ? |
| Начать выделение | Space |
| Скопировать выделение | Enter |
| Выйти из copy mode | q |
После копирования вставляем:
Ctrl-b ]
Обрати внимание: copy mode — это способ найти нужное в длинном выводе команды. Если сборка упала и ошибка ушла за экран, войди в copy mode и поищи назад через Ctrl-r (emacs) или ? (vi).
Как настроить tmux через .tmux.conf?
tmux читает конфигурацию из ~/.tmux.conf при запуске сервера. Начиная с tmux 3.2 также проверяется ~/.config/tmux/tmux.conf.
Эта конфигурация хорошо подходит для администрирования VPS. Каждая строка объяснена.
Создаём или редактируем конфиг:
nano ~/.tmux.conf
# -- General -----------------------------------------------------------------
# Change prefix from Ctrl-b to Ctrl-a (easier to reach)
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# Start window numbering at 1 (0 is far from the prefix key)
set -g base-index 1
setw -g pane-base-index 1
# Renumber windows when one is closed (no gaps)
set -g renumber-windows on
# Increase scrollback buffer (default is 2000 lines)
set -g history-limit 50000
# Reduce escape delay (snappier key response)
set -g escape-time 10
# Enable mouse support (scroll, click panes, resize)
set -g mouse on
# -- Display -----------------------------------------------------------------
# 256-color terminal support
set -g default-terminal "tmux-256color"
# -- Key Bindings ------------------------------------------------------------
# Split panes with | and - (more intuitive than " and %)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# Navigate panes with Alt-arrow (no prefix needed)
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
# Reload config with prefix r
bind r source-file ~/.tmux.conf \; display-message "Config reloaded"
# -- Copy Mode ---------------------------------------------------------------
# Use vi keys in copy mode
setw -g mode-keys vi
# -- Status Bar --------------------------------------------------------------
# Status bar position
set -g status-position bottom
# Update interval (seconds)
set -g status-interval 5
# Clean status bar colors
set -g status-style "bg=colour235,fg=colour136"
set -g status-left "#[fg=colour235,bg=colour136] #S #[fg=colour136,bg=colour235] "
set -g status-right "#[fg=colour136] %H:%M %d-%b-%Y "
set -g status-left-length 20
Сохраняем и выходим. Применяем конфиг к запущенной сессии tmux:
tmux source-file ~/.tmux.conf
Проверяем: нажимаем Ctrl-a (новый префикс) вместо Ctrl-b. Если работает, конфиг загрузился.
Устанавливаем правильные права на конфиг:
chmod 600 ~/.tmux.conf
ls -la ~/.tmux.conf
-rw------- 1 youruser youruser 1234 Mar 19 10:00 /home/youruser/.tmux.conf
Права 600 означают, что только твой пользователь может читать и писать файл. Это важно, если в конфиге tmux прописаны кастомные скрипты или пути.
Объяснение ключевых изменений:
- Префикс
Ctrl-aставит клавишу под левый мизинец.Ctrl-bтребует растяжки. Самый популярный ребайнд. base-index 1— окна начинаются с 1, а не с 0.Ctrl-a 1для первого окна интуитивнее.history-limit 50000— хранит 50 000 строк буфера прокрутки на панель. Стандартные 2 000 — мало для чтения логов.escape-time 10— уменьшает задержку после нажатия Escape. Стандартное значение (500 мс) делает Vim внутри tmux заторможенным.-c "#{pane_current_path}"в привязках split — открывает новые панели в текущей директории, а не в домашней.mode-keys vi— переключает copy mode на навигацию в стиле vi. Замени наemacs, если предпочитаешь.
Как установить плагины tmux через tpm?
tmux Plugin Manager (tpm) позволяет устанавливать плагины из GitHub. Два плагина, которые стоит знать:
- tmux-resurrect — сохраняет и восстанавливает сессии tmux после перезагрузки сервера
- tmux-continuum — автоматически сохраняет сессии через заданные интервалы
Установка tpm
Клонируем репозиторий:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
Добавляем эти строки в конец ~/.tmux.conf:
# -- Plugins -----------------------------------------------------------------
# Plugin manager
set -g @plugin 'tmux-plugins/tpm'
# Save/restore sessions across reboots
set -g @plugin 'tmux-plugins/tmux-resurrect'
# Auto-save sessions every 15 minutes
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
# Initialize tpm (keep this line at the very bottom)
run '~/.tmux/plugins/tpm/tpm'
Перезагружаем конфиг:
tmux source-file ~/.tmux.conf
Устанавливаем плагины изнутри tmux:
Ctrl-a I
Это заглавная I. tpm скачает и установит плагины. По завершении появится сообщение.
Проверяем, что плагины установлены:
ls ~/.tmux/plugins/
tmux-continuum tmux-resurrect tpm
Использование tmux-resurrect
Сохраняем текущую раскладку сессии:
Ctrl-a Ctrl-s
Восстанавливаем после перезагрузки:
Ctrl-a Ctrl-r
tmux-resurrect сохраняет раскладку окон, разделение панелей и текущую директорию каждой панели. С включённым tmux-continuum это происходит автоматически каждые 15 минут.
Как работать с вложенными сессиями tmux через SSH?
Когда tmux запущен локально и ты подключаешься по SSH к VPS, где тоже работает tmux, получается tmux внутри tmux. Оба экземпляра реагируют на один и тот же префикс. Нажатия клавиш уходят во внешний (локальный) tmux вместо внутреннего (удалённого).
Решение: отправить префикс во внутреннюю сессию, нажав его дважды.
Ctrl-a Ctrl-a d # Detach the inner (remote) session
Первый Ctrl-a перехватывается внешним tmux. Второй Ctrl-a пересылается внутреннему tmux как его префикс. Затем d отключает внутреннюю сессию.
Более чистый подход: использовать разные prefix key. Оставь Ctrl-a локально, а на удалённых серверах оставь стандартный Ctrl-b. Тогда конфликта нет.
Если ты уже сменил префикс на обеих сторонах, добавь переключатель в локальный ~/.tmux.conf:
# Toggle prefix passthrough with F12
bind -T root F12 \
set prefix None \;\
set key-table off \;\
set status-style "bg=colour238,fg=colour240" \;\
display-message "Prefix OFF (sending to inner)"
bind -T off F12 \
set -u prefix \;\
set -u key-table \;\
set -u status-style \;\
display-message "Prefix ON (local)"
Нажми F12, чтобы отключить локальный префикс и передавать все клавиши удалённому tmux. Нажми F12 ещё раз, чтобы включить обратно. Затемнённая статус-строка визуально показывает текущий режим.
Как создать скриптованные раскладки tmux для администрирования сервера?
Вместо ручного разделения панелей при каждом подключении по SSH, скриптуй раскладку. Это создаёт повторяемое рабочее пространство одной командой.
Создаём скрипт:
nano ~/tmux-admin.sh
#!/usr/bin/env bash
# tmux-admin.sh: three-pane admin layout
SESSION="admin"
# Kill old session if it exists
tmux kill-session -t "$SESSION" 2>/dev/null
# Create session with first window named "monitor"
tmux new-session -d -s "$SESSION" -n "monitor"
# Top pane: system monitoring
tmux send-keys -t "$SESSION:monitor" "htop" C-m
# Split horizontally: bottom pane for logs
tmux split-window -v -t "$SESSION:monitor"
tmux send-keys -t "$SESSION:monitor.1" "journalctl -f" C-m
# Split bottom pane vertically: right pane for shell
tmux split-window -h -t "$SESSION:monitor.1"
# Create second window for a working shell
tmux new-window -t "$SESSION" -n "work"
# Select the first window
tmux select-window -t "$SESSION:monitor"
# Select the bottom-right pane (the empty shell)
tmux select-pane -t "$SESSION:monitor.2"
# Attach to the session
tmux attach -t "$SESSION"
Делаем скрипт исполняемым и запускаем:
chmod 700 ~/tmux-admin.sh
~/tmux-admin.sh
Получаешь раскладку из трёх панелей: htop сверху, journalctl -f снизу слева и пустая оболочка снизу справа. Второе окно "work" доступно для произвольных команд.
Обрати внимание: C-m в конце send-keys — это возврат каретки. Он нажимает Enter для выполнения команды.
Автозапуск tmux при загрузке через systemd
Для постоянных административных сессий создаём systemd-сервис:
sudo nano /etc/systemd/system/tmux-admin@.service
[Unit]
Description=tmux admin session for %i
After=network.target
[Service]
Type=forking
User=%i
ExecStart=/usr/bin/tmux new-session -d -s admin
ExecStop=/usr/bin/tmux kill-session -t admin
[Install]
WantedBy=multi-user.target
Включаем и запускаем для своего пользователя:
sudo systemctl enable --now tmux-admin@youruser.service
Проверяем, что сервис работает:
sudo systemctl status tmux-admin@youruser.service
● tmux-admin@youruser.service - tmux admin session for youruser
Loaded: loaded (/etc/systemd/system/tmux-admin@.service; enabled)
Active: active (running)
Теперь сессия tmux с именем "admin" запускается автоматически при загрузке. Подключаемся к ней после SSH:
tmux attach -t admin
Безопасность: права доступа к сокету tmux
tmux создаёт socket (файл сокета) для связи между серверным и клиентским процессами. По умолчанию сокет находится в директории под /tmp (например, /tmp/tmux-1000/).
Проверяем директорию сокета:
ls -la /tmp/tmux-$(id -u)/
srwxrwx--- 1 youruser youruser 0 Mar 19 10:00 default
Директория сокета принадлежит твоему пользователю с правами, которые не дают другим пользователям к ней доступ. Это значит, что другие пользователи на том же сервере не смогут подключиться к твоим сессиям tmux.
Однако если ты запускаешь tmux от root, любой процесс с правами root сможет подключиться. Не запускай tmux от root для повседневной работы. Подключайся по SSH как обычный пользователь и используй sudo для отдельных команд, которым нужны повышенные права.
Если нужно расшарить сессию tmux (для парного программирования или менторинга), используй отдельный сокет:
tmux -S /tmp/shared-session new-session -s pair
chmod 770 /tmp/shared-session
Другой пользователь подключается так:
tmux -S /tmp/shared-session attach -t pair
Отзываем доступ по завершении:
chmod 700 /tmp/shared-session
Что-то пошло не так?
tmux: command not found
Пакет не установился. Выполни sudo apt install -y tmux и проверь вывод на ошибки.
"no server running on /tmp/tmux-1000/default"
Нет запущенных сессий tmux. Создай одну: tmux new-session -s main.
Клавиши не работают / неправильный prefix
Проверь, какой prefix активен: tmux show-options -g prefix. Если менял prefix в .tmux.conf, перезагрузи конфиг: tmux source-file ~/.tmux.conf.
Прокрутка мышью не работает
Добавь set -g mouse on в ~/.tmux.conf и перезагрузи. В версиях tmux до 2.1 опция называлась set -g mode-mouse on (другой синтаксис).
Цвета выглядят неправильно внутри tmux
Установи set -g default-terminal "tmux-256color" в ~/.tmux.conf. Если твой эмулятор терминала поддерживает true color (24 бита), добавь:
set -as terminal-overrides ",*-256color:Tc"
Сессия потеряна после перезагрузки Сессии tmux не переживают перезагрузку по умолчанию. Используй tmux-resurrect и tmux-continuum (описаны выше), или создай systemd-сервис для автозапуска сессии.
Vim медленно выходит из режима вставки
Виновата стандартная escape-time (500 мс). Установи set -g escape-time 10 в ~/.tmux.conf.
Для диагностики проблем проверь логи tmux:
tmux start-server \; show-messages
Или смотри системные логи:
journalctl -u tmux-admin@youruser.service -f
Быстрая справка по горячим клавишам tmux
В этой таблице используется стандартный prefix Ctrl-b. Если ты перепривязал prefix на Ctrl-a (как в конфиге выше), используй его.
Sessions (сессии)
| Действие | Горячая клавиша | Команда |
|---|---|---|
| Новая именованная сессия | tmux new-session -s name |
|
| Отключиться | Ctrl-b d |
tmux detach |
| Список сессий | Ctrl-b s |
tmux list-sessions |
| Подключиться | tmux attach -t name |
|
| Переименовать сессию | Ctrl-b $ |
tmux rename-session |
| Удалить сессию | tmux kill-session -t name |
Windows (окна)
| Действие | Горячая клавиша | Команда |
|---|---|---|
| Новое окно | Ctrl-b c |
|
| Следующее окно | Ctrl-b n |
|
| Предыдущее окно | Ctrl-b p |
|
| Окно по номеру | Ctrl-b 0-9 |
|
| Переименовать окно | Ctrl-b , |
|
| Закрыть окно | Ctrl-b & |
|
| Список окон | Ctrl-b w |
Panes (панели)
| Действие | Горячая клавиша | Команда |
|---|---|---|
| Горизонтальное разделение | Ctrl-b " |
|
| Вертикальное разделение | Ctrl-b % |
|
| Навигация | Ctrl-b Arrow |
|
| Изменение размера | Ctrl-b Ctrl-Arrow |
|
| Zoom (масштабирование) | Ctrl-b z |
|
| Закрыть панель | Ctrl-b x |
|
| Переставить панель | Ctrl-b { / Ctrl-b } |
Copy Mode (режим копирования)
| Действие | Горячая клавиша |
|---|---|
| Войти в copy mode | Ctrl-b [ |
| Вставить из буфера | Ctrl-b ] |
| Поиск (emacs) | Ctrl-r (назад) / Ctrl-s (вперёд) |
| Поиск (vi) | ? (назад) / / (вперёд) |
| Выход | q |
Прочее
| Действие | Горячая клавиша |
|---|---|
| Командная строка | Ctrl-b : |
| Список всех горячих клавиш | Ctrl-b ? |
| Режим часов | Ctrl-b t |
Copyright 2026 Virtua.Cloud. Vse prava zashchishcheny.
Готовы попробовать?
Разверните свой сервер за секунды. Linux, Windows или FreeBSD.
Смотреть тарифы VPS