tmux: сессии, которые не обрываются при отключении SSH — понятная шпаргалка
Как пользоваться tmux: запустить сессию на сервере, отключиться и вернуться без потери работы, окна и панели, прокрутка и копирование, мышь, полезный ~/.tmux.conf, запуск команд скриптом и сравнение со screen и nohup.
Содержание
- 1Зачем нужен tmux
- 2Установка
- 3Первый запуск и префикс Ctrl+B
- 4Отсоединиться и вернуться
- 5Именованные сессии
- 6Список сессий и переключение
- 7Окна
- 8Панели: делим экран
- 9Прокрутка и копирование
- 10Мышь
- 11Конфиг ~/.tmux.conf
- Перезагрузка конфига
- Префикс Ctrl+A — по желанию
- 12Запуск команд в сессии скриптом
- 13tmux, screen и nohup
- 14Шпаргалка
- 15Если не работает
- 16Чек-лист
- 17Частые вопросы
- Продолжит ли работать программа, если закрыть окно терминала?
- Сохраняются ли сессии tmux после перезагрузки?
- Чем окно отличается от панели?
- Можно ли подключиться к одной сессии с двух компьютеров?
- Почему не работает Ctrl+B в tmux на Mac?
- Как узнать, что я сейчас внутри tmux?
- Как закрыть tmux полностью?
- Нужно ли запускать tmux через sudo?
- 18Что дальше
Вы запустили на сервере обновление системы, копирование архива на сотню гигабайт или сборку проекта. Через двадцать минут ноутбук ушёл в сон, Wi-Fi моргнул — и SSH-соединение оборвалось. Вместе с ним завершилась и команда: всё, что было запущено в этом терминале, получило сигнал и закрылось.
tmux решает эту проблему. Это «терминал внутри терминала»: программы работают не в вашем SSH-подключении, а в сессии tmux на самом сервере. Подключение может оборваться, а сессия останется. Вы заходите снова, набираете одну команду — и видите всё ровно в том состоянии, в каком оставили.
Вторая причина полюбить tmux — окна и панели. В одном окне терминала можно держать несколько вкладок и делить экран на части: слева редактор конфига, справа журнал службы, снизу htop. Ниже — всё по порядку, от первого запуска до своего конфига. Все примеры проверены на tmux 3.4 из репозиториев Ubuntu 24.04.
Зачем нужен tmux
Три типичные ситуации, в которых он экономит нервы:
- 🔌 Долгие команды на сервере. Обновление,
rsyncбольшого каталога, распаковка архива, перекодирование видео. Запускаете в tmux, отсоединяетесь, закрываете ноутбук. Команда продолжает работать. - 📡 Нестабильное соединение. Мобильный интернет, VPN, который иногда переподключается, удалённый доступ с Mac через половину города. Обрыв больше не означает потерю работы.
- 🪟 Несколько терминалов в одном. Не нужно открывать пять SSH-подключений к одному серверу: всё помещается в одну сессию с окнами и панелями.
Важно понимать устройство. На сервере работает сервер tmux — фоновый процесс, который держит сессии. Ваш терминал — лишь клиент, который к нему подключается. Отключили клиента — сессии продолжают жить, пока сервер не перезагрузят или вы сами их не закроете.
Установка
В Ubuntu и Debian tmux есть в стандартных репозиториях. На серверных образах Ubuntu он часто уже установлен — проверьте:
tmux -Vtmux 3.4Если команда не найдена, поставьте пакет:
sudo apt update
sudo apt install tmuxВ Fedora — sudo dnf install tmux, в Arch — sudo pacman -S tmux. Подробнее о менеджерах пакетов — в статье apt, snap, flatpak и AppImage.
Первый запуск и префикс Ctrl+B
Запустите tmux без параметров:
tmuxВнешне почти ничего не изменится: та же командная строка, но внизу появится зелёная строка состояния. Слева в ней номер сессии и список окон, справа — имя хоста, время и дата. Это значит, что вы внутри tmux.
Все команды tmux вызываются через префикс — сочетание Ctrl + B. Нажимается это так:
- Зажмите Ctrl и нажмите B.
- Отпустите обе клавиши.
- Нажмите клавишу команды, например d.
Новички часто держат Ctrl до конца и нажимают Ctrl + D — а это выход из оболочки и закрытие окна. Префикс и команда — два отдельных нажатия.
Дальше в статье запись Ctrl + B d означает именно это: префикс, отпустить, потом d.
Отсоединиться и вернуться
Это главный приём, ради которого tmux и ставят.
Отсоединиться (detach) — Ctrl + B d. Вы вернётесь в обычный терминал, а tmux сообщит:
[detached (from session 0)]Всё, что было запущено в сессии, продолжает работать. Можно закрыть SSH и выключить ноутбук. Если соединение оборвалось само, результат тот же: сессия просто осталась без клиента.
Вернуться (attach) — подключитесь к серверу снова и выполните:
tmux attachБез параметров команда подключает к последней использованной сессии. Короткие формы — tmux a и tmux at. Если сессий нет вообще, tmux ответит:
no sessionsИменованные сессии
Сессия из голого tmux получает номер: 0, 1, 2. Когда их несколько, путаться в номерах неудобно. Давайте сессиям имена:
tmux new -s workКлюч -s (session) задаёт имя. new — сокращение от new-session, обе формы работают.
Подключиться к конкретной сессии — ключ -t (target):
tmux attach -t workЕсли сессия с таким именем уже есть, вторую tmux не создаст:
duplicate session: workА если ошиблись в имени при подключении:
can't find session: wrokУдобная команда на каждый день — подключиться к сессии, а если её нет, создать:
tmux new -A -s workКлюч -A делает new-session похожей на attach, когда сессия уже существует. Её удобно повесить на алиас в ~/.bashrc, например alias tw='tmux new -A -s work'.
Переименовать текущую сессию изнутри — Ctrl + B $, снаружи — tmux rename-session -t старое новое.
Список сессий и переключение
tmux lsbackup: 1 windows (created Sun Oct 11 19:57:20 2026)
work: 3 windows (created Sun Oct 11 19:57:20 2026)В каждой строке: имя сессии, сколько в ней окон и когда она создана. Если к сессии сейчас подключён клиент, в конце строки появится (attached). ls — сокращение от list-sessions.
Когда сервер tmux не запущен (сессий нет), вывод такой:
no server running on /tmp/tmux-1000/defaultЭто не ошибка: просто ни одной сессии ещё не создано. 1000 — ваш UID, путь — файл сокета, через который клиент общается с сервером.
Переключаться между сессиями можно, не выходя из tmux:
- Ctrl + B s — интерактивный список сессий: выбор стрелками, Enter — переключиться;
- Ctrl + B ( и ) — предыдущая и следующая сессия.
Закрыть сессию целиком вместе со всеми программами в ней:
tmux kill-session -t backupА tmux kill-server закрывает вообще все сессии. Используйте осторожно: всё, что в них работало, будет завершено.
Окна
Окно в tmux — как вкладка в браузере: занимает весь экран, а список окон виден в строке состояния внизу. Текущее помечено звёздочкой *, предыдущее — минусом -.
| Действие | Клавиши |
|---|---|
| Новое окно | Ctrl + B c |
| Следующее окно | Ctrl + B n |
| Предыдущее окно | Ctrl + B p |
| Окно по номеру | Ctrl + B 0…9 |
| Последнее использованное окно | Ctrl + B l |
| Список всех окон и сессий | Ctrl + B w |
| Переименовать окно | Ctrl + B , |
| Закрыть окно (с подтверждением) | Ctrl + B & |
По умолчанию окно называется по запущенной в нём программе: bash, htop, journalctl. Если окон много, лучше дать им понятные имена: нажмите Ctrl + B ,, сотрите старое имя, введите новое и нажмите Enter.
Посмотреть окна сессии из обычного терминала:
tmux list-windows -t work0: bash (1 panes) [80x24] [layout b25d,80x24,0,0,0] @0
1: logs- (1 panes) [80x24] [layout b25f,80x24,0,0,2] @2
2: bash* (1 panes) [80x24] [layout b260,80x24,0,0,3] @3 (active)Здесь три окна: 0 и 2 называются bash, окно 1 переименовано в logs. Звёздочка и пометка (active) — текущее окно, минус — предыдущее. В скобках — число панелей и размер в символах.
Обычный способ закрыть окно — просто выйти из оболочки: exit или Ctrl + D. Когда в сессии закрывается последнее окно, закрывается и сама сессия.
Панели: делим экран
Панель — часть окна со своей оболочкой. Удобно, когда нужно одновременно видеть несколько вещей: например, слева правите конфиг, справа смотрите журнал службы через journalctl -f — об этом подробно в статье про systemd и journalctl.
| Действие | Клавиши |
|---|---|
| Разделить слева направо (две колонки) | Ctrl + B % |
| Разделить сверху вниз (две строки) | Ctrl + B " |
| Перейти в соседнюю панель | Ctrl + B ← → ↑ ↓ |
| Следующая панель по кругу | Ctrl + B o |
| Показать номера панелей | Ctrl + B q |
| Развернуть панель на всё окно и обратно | Ctrl + B z |
| Закрыть панель (с подтверждением) | Ctrl + B x |
| Вынести панель в отдельное окно | Ctrl + B ! |
| Изменить размер на 1 символ | Ctrl + B Ctrl + ← (и другие стрелки) |
| Изменить размер на 5 символов | Ctrl + B Alt + ← (и другие стрелки) |
Названия клавиш легко перепутать, поэтому запомните по картинке: символ % похож на вертикальную черту между двумя кружками — получаются две колонки. Кавычка " — две панели одна над другой.
Пара деталей, которые экономят время:
- 🔁 Перемещение и изменение размера можно повторять без повторного префикса: нажмите Ctrl + B, а потом несколько раз подряд стрелку. tmux ждёт повтор примерно полсекунды.
- 🔍 z — зум. Развернули панель, чтобы прочитать длинный вывод, нажали ещё раз — вернулась на место. Пока панель развёрнута, в строке состояния рядом с именем окна стоит буква
Z. - ⌨️ На macOS сочетания с Alt часто не работают, пока в настройках терминала не включено «Option как Meta». Тогда пользуйтесь Ctrl-вариантом или мышью.
Список панелей окна с их размерами:
tmux list-panes -t work0: [60x30] [history 0/2000, 1200 bytes] %0
1: [59x15] [history 0/2000, 600 bytes] %1
2: [59x14] [history 0/2000, 560 bytes] %2 (active)Здесь окно разделено на левую панель во всю высоту и две правые друг над другом. history 0/2000 — сколько строк прокрутки занято из доступных. 2000 — это мало, ниже покажу, как увеличить.
Прокрутка и копирование
Колёсико мыши и Shift + PgUp в tmux по умолчанию не листают вывод: tmux сам рисует экран, и терминал не знает о его истории. Для прокрутки есть режим копирования (copy mode).
- Ctrl + B [ — войти в режим. В правом верхнем углу панели появится счётчик позиции вроде
[0/1532]. - Стрелки, PgUp и PgDn — листать.
- Ctrl + B PgUp — войти в режим и сразу пролистать на страницу вверх.
- q или Esc — выйти и вернуться к командной строке.
Пока вы в режиме копирования, программа в панели продолжает работать — вывод просто копится ниже.
Поиск по истории — Ctrl + R (вверх) и Ctrl + S (вниз). Начинаете вводить текст, tmux сразу подсвечивает совпадение. n — к следующему.
Копирование (раскладка по умолчанию, в стиле Emacs):
- В режиме копирования подведите курсор к началу нужного текста.
- Ctrl + Пробел — начать выделение.
- Стрелками расширьте выделение.
- Alt + W — скопировать и выйти из режима.
- Ctrl + B ] — вставить в текущую панель.
Текст попадает в буфер tmux, а не в системный буфер обмена компьютера. Список буферов — Ctrl + B =.
Если привыкли к Vim, включите в конфиге setw -g mode-keys vi. Тогда выделение — Пробел, копирование — Enter, поиск — / и ?, перемещение — h j k l.
Мышь
По умолчанию мышь в tmux выключена. Включить её в текущем сервере можно прямо из командной строки tmux: нажмите Ctrl + B : и введите:
set -g mouse onИли из обычного терминала: tmux set -g mouse on. После этого:
- 🖱️ клик по панели — сделать её активной;
- 🪟 клик по имени окна в строке состояния — переключиться на него;
- ↔️ перетаскивание границы между панелями — изменить размер;
- 🔼 колёсико — прокрутка истории, tmux сам войдёт в режим копирования;
- 📋 правая кнопка — контекстное меню с пунктами «разделить», «развернуть», «закрыть».
Настройка из командной строки действует до перезапуска сервера tmux. Чтобы мышь была включена всегда, добавьте строку в конфиг.
Конфиг ~/.tmux.conf
tmux читает настройки из файла ~/.tmux.conf при запуске сервера. Файла по умолчанию нет — создайте его. Вот разумный набор для старта, каждая строка проверена на tmux 3.4:
# Мышь: клики, прокрутка колёсиком, изменение размеров панелей
set -g mouse on
# Нумерация окон и панелей с 1 — удобнее нажимать на клавиатуре
set -g base-index 1
setw -g pane-base-index 1
# После закрытия окна оставшиеся перенумеровываются без дыр
set -g renumber-windows on
# История прокрутки: 50 000 строк вместо 2000
set -g history-limit 50000
# Быстрая реакция на Esc (важно для vim)
set -sg escape-time 10
# Перезагрузить конфиг: префикс + r
bind r source-file ~/.tmux.conf \; display-message "Конфиг перезагружен"
# Новые панели и окна открываются в текущем каталоге
bind '%' split-window -h -c "#{pane_current_path}"
bind '"' split-window -v -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"Что здесь важно:
set -g— глобальная настройка для всех сессий,setw— настройка окон.base-index 1— окна нумеруются с 1, а не с 0. Клавиша 1 на клавиатуре стоит слева, 0 — справа, после 9. С нумерацией с единицы окна идут по порядку клавиш.history-limitдействует только на новые панели. Старые сохранят прежний лимит, пока их не закроете.-c "#{pane_current_path}"— без этого новая панель открывается в каталоге, где была создана сессия, а не там, где вы сейчас работаете.bind rпереопределяет стандартную клавишу r (перерисовка экрана). Если она нужна, выберите другую букву.
Перезагрузка конфига
Изменения в ~/.tmux.conf не применяются сами по себе к уже запущенному серверу. Варианты:
tmux source-file ~/.tmux.confИли изнутри tmux: Ctrl + B :, затем source-file ~/.tmux.conf. С привязкой из конфига выше — просто Ctrl + B r.
Проверить, что настройка применилась:
tmux show -g history-limit
tmux show -g mousehistory-limit 50000
mouse onПрефикс Ctrl+A — по желанию
Многие переносят префикс на Ctrl + A: так было в screen, и до A ближе тянуться. Минус — в оболочке это сочетание переносит курсор в начало строки, и после переназначения для этого придётся нажать Ctrl + A дважды.
unbind C-b
set -g prefix C-a
bind C-a send-prefixТретья строка как раз позволяет отправить Ctrl + A в программу двойным нажатием. Дальше в статье я пишу стандартный префикс Ctrl + B. Если вы его сменили, мысленно подставляйте свой.
Запуск команд в сессии скриптом
tmux можно полностью управлять из командной строки, без единого нажатия префикса. Это пригодится, когда нужно по одной команде поднимать готовое рабочее окружение или запускать долгую задачу в фоне.
Создать сессию, не подключаясь к ней — ключ -d (detached):
tmux new -d -s workОтправить в неё команду — send-keys. Текст набирается в панели так, будто вы ввели его с клавиатуры, а слово Enter нажимает клавишу Enter:
tmux send-keys -t work 'sudo apt update && sudo apt upgrade -y' EnterЗапустить команду сразу при создании сессии — допишите её последним аргументом:
tmux new -d -s backup 'rsync -a /srv/photos/ /mnt/backup/photos/'Учтите разницу. Во втором случае сессия живёт ровно столько, сколько команда: rsync закончился — сессия закрылась, и вывод посмотреть уже нельзя. Через send-keys команда работает внутри обычной оболочки, и после её завершения сессия остаётся с выводом на экране.
Целиком это выглядит так. Скрипт создаёт сессию deploy с двумя окнами и запускает в каждом свою команду:
#!/bin/bash
S=deploy
# Если сессия уже есть — ничего не делаем
tmux has-session -t "$S" 2>/dev/null && { echo "Сессия $S уже есть"; exit 0; }
tmux new -d -s "$S" -n main
tmux send-keys -t "$S:main" 'echo "Старт: $(date +%T)"; sleep 2; echo Готово' Enter
tmux new-window -t "$S" -n logs
tmux send-keys -t "$S:logs" 'uptime' Enter
echo "Сессия $S запущена"Цель -t "$S:main" означает «сессия deploy, окно main». Ключ -n при создании задаёт имя окна. has-session возвращает код 0, если сессия существует, — так скрипт не создаёт дубликат. Сделайте файл исполняемым (chmod +x, права можно посчитать в калькуляторе chmod) и запустите дважды:
Сессия deploy запущена
Сессия deploy уже естьПроверим, что внутри:
tmux list-windows -t deploy -F '#{window_index}: #{window_name}'0: main
1: logsКлюч -F задаёт свой формат вывода: здесь только номер и имя окна. А содержимое панели можно забрать в обычный терминал командой capture-pane, ключ -p выводит его на экран:
tmux capture-pane -p -t deploy:mainnixlife@server:~$ echo "Старт: $(date +%T)"; sleep 2; echo Готово
Старт: 19:57:45
Готово
nixlife@server:~$Так удобно проверять из скриптов, закончилась ли долгая задача, не подключаясь к сессии. Подключиться и посмотреть вживую — как обычно, tmux attach -t deploy.
Такой скрипт можно запускать и по расписанию через cron — собрать строку для crontab поможет генератор cron. Но если задача должна работать постоянно и перезапускаться после сбоя, лучше оформить её службой systemd: tmux — инструмент для человека, а не для автозапуска сервисов.
tmux, screen и nohup
Три способа пережить обрыв SSH, коротко:
| tmux | screen | nohup | |
|---|---|---|---|
| Вернуться к программе и работать с ней | ✅ | ✅ | ❌ только смотреть лог |
| Окна и панели | ✅ | ✅ окна, деление экрана скромнее | ❌ |
| Префикс по умолчанию | Ctrl + B | Ctrl + A | — |
| Управление скриптами | ✅ удобно | ✅ есть | — |
| Развивается | активно | медленно | это одна простая утилита |
- screen — старший брат tmux. Работает похоже:
screen -S work, отсоединиться — Ctrl + A d, вернуться —screen -r work. Если на старом сервере есть только screen — пользуйтесь им, суть та же. - nohup — для «запустил и забыл».
nohup команда > log.txt 2>&1 &отвязывает программу от терминала, и обрыв SSH её не убьёт. Но вернуться к ней нельзя: ни ответить на вопрос программы, ни нажать Ctrl + C. Только читать файл лога.
Для интерактивной работы на сервере tmux удобнее всех. nohup хорош, когда программа ни о чём не спрашивает и нужен только её результат.
Шпаргалка
| Что сделать | Команда или клавиши |
|---|---|
| Новая сессия с именем | tmux new -s work |
| Подключиться или создать | tmux new -A -s work |
| Новая сессия в фоне | tmux new -d -s work |
| Список сессий | tmux ls |
| Вернуться в сессию | tmux attach -t work |
| Отсоединиться | Ctrl + B d |
| Выбрать сессию из списка | Ctrl + B s |
| Переименовать сессию | Ctrl + B $ |
| Закрыть сессию | tmux kill-session -t work |
| Новое окно | Ctrl + B c |
| Следующее / предыдущее окно | Ctrl + B n / p |
| Окно по номеру | Ctrl + B 0…9 |
| Переименовать окно | Ctrl + B , |
| Разделить на колонки | Ctrl + B % |
| Разделить на строки | Ctrl + B " |
| Перейти в панель | Ctrl + B ← → ↑ ↓ |
| Развернуть панель | Ctrl + B z |
| Закрыть панель | Ctrl + B x |
| Режим прокрутки | Ctrl + B [, выход — q |
| Вставить скопированное | Ctrl + B ] |
| Командная строка tmux | Ctrl + B : |
| Список всех клавиш | Ctrl + B ? |
| Перечитать конфиг | tmux source-file ~/.tmux.conf |
| Отправить команду в сессию | tmux send-keys -t work 'команда' Enter |
Если не работает
no server running on /tmp/tmux-1000/default. Сессий нет: их закрыли, или сервер перезагружался. Создайте новую через tmux new -s имя. Если вы уверены, что сессия была, проверьте, тот ли это пользователь: сессии root и обычного пользователя не видят друг друга. Сессия, запущенная после sudo -i, видна только из-под root.
sessions should be nested with care, unset $TMUX to force. Вы пытаетесь запустить tmux внутри tmux. Обычно это случайность: вы уже в сессии и забыли. Проверить просто — echo $TMUX: если строка не пустая, вы внутри tmux. Переключиться на другую сессию изнутри — Ctrl + B s.
sessions should be nested with care, unset $TMUX to forceopen terminal failed: not a terminal. tmux attach или tmux new без -d запущены там, где нет терминала: в cron, в скрипте без TTY, через ssh server tmux attach. Для SSH добавьте ключ -t: ssh -t server tmux attach. В скриптах создавайте сессии только с -d.
Префикс не реагирует. Проверьте, что отпускаете Ctrl перед клавишей команды. Если tmux запущен внутри другого tmux (например, локально и на сервере), префикс перехватывает внешний. Чтобы отправить его во внутренний, нажмите Ctrl + B дважды, потом команду.
Колёсико мыши не листает, а перебирает историю команд. Мышь выключена — добавьте set -g mouse on в конфиг и перезагрузите его.
Изменения в конфиге не применились. Конфиг читается только при старте сервера. Выполните tmux source-file ~/.tmux.conf или закройте все сессии. И проверьте ошибки: при синтаксической ошибке tmux покажет номер строки.
Цвета в vim или btop выглядят бледно. Проверьте, что в оболочке внутри tmux echo $TERM показывает tmux-256color или screen-256color. Если нет — добавьте в конфиг set -g default-terminal "tmux-256color" и перезапустите сервер tmux.
Чек-лист
Частые вопросы
Продолжит ли работать программа, если закрыть окно терминала?
Да, если она запущена внутри tmux. Закрытие окна или обрыв SSH для tmux — то же самое, что отсоединение. Сессия и всё в ней остаются на сервере.
Сохраняются ли сессии tmux после перезагрузки?
Нет. Сервер tmux — обычный процесс, после перезагрузки он не запускается сам, а программы в сессиях завершаются. Для восстановления раскладки окон есть сторонние плагины, но запущенные программы они не воскрешают.
Чем окно отличается от панели?
Окно занимает весь экран, как вкладка, и между окнами переключаются. Панели — части одного окна, видны одновременно. В сессии может быть много окон, в окне — много панелей.
Можно ли подключиться к одной сессии с двух компьютеров?
Да, tmux attach -t work с двух мест покажет одну и ту же сессию, ввод с обоих клиентов попадёт в неё. Размер окна по умолчанию подстраивается под терминал, которым пользовались последним. Чтобы при подключении отключить остальных клиентов, используйте tmux attach -d -t work.
Почему не работает Ctrl+B в tmux на Mac?
Работает так же, как в Linux: это Control, а не ⌘ Cmd. Сочетания с Alt на Mac требуют включить в настройках терминала опцию «Use Option as Meta key».
Как узнать, что я сейчас внутри tmux?
Внизу видна строка состояния. Если её отключили в конфиге — выполните echo $TMUX: внутри tmux переменная не пустая.
Как закрыть tmux полностью?
Выйти из всех оболочек командой exit — с последним окном закроется сессия, с последней сессией — сервер. Быстрее — tmux kill-server, но это завершит всё, что запущено в сессиях.
Нужно ли запускать tmux через sudo?
Нет. Запускайте tmux от своего пользователя, а sudo пишите перед конкретными командами внутри. Сессии разных пользователей изолированы. Подробнее о root и sudo — в статье про root в Ubuntu.
Что дальше
tmux — базовый инструмент любой работы с сервером по SSH. Если вы только настраиваете машину, загляните в установку Ubuntu Server и защиту сервера после установки. А чтобы долгая задача в tmux не упёрлась в нехватку места, пригодится статья о том, как посмотреть место на диске.
Если статья пригодилась — отметьте, это помогает выбирать темы
Статья помогла?
Комментарии
Пока никто не написал. Будьте первым — вопрос или свой опыт одинаково полезны.