
Каждый, кто работает в терминале, держит открытыми сразу несколько вкладок: в первой смотрит логи, во второй следит за списком запущенных процессов через htop, в третьей работает с Git, в четвертой запускает миграции базы данных. При переключении между вкладками легко запутаться, закрыть нужную, а при обрыве связи — потерять запущенные процессы и сессии.
Привет! Я Саломея, продуктовый технический писатель в Selectel. В этой статье поделюсь своим опытом, как с помощью tmux упорядочить этот хаос и сделать работу удобнее. Разделим окно терминала на панели, запустим сессию, которая не прервется при закрытии окна, автоматизируем настройку рабочего пространства. Посмотрим, как выполнять команду сразу на нескольких серверах.
Содержание
→ Что такое tmux и какие задачи он решает
→ Установка tmux
→ Основные команды
→ Окна и панели
→ Непрерывные сессии
→ Синхронизация панелей
→ Скрипты сессий
→ Конфигурация ~/.tmux.conf
→ Заключение
Что такое tmux и какие задачи он решает
tmux (terminal multiplexer) — открытая консольная утилита-мультиплексор. Она позволяет создавать несколько сессий терминала в одном окне и управлять ими. Каждая сессия состоит из окон, а те, в свою очередь, — из панелей. Вместо десятка вкладок с отдельными процессами tmux помогает организовать структурированное рабочее пространство.
Можно решать разные задачи одновременно:
сохранять работу процессов при разрыве соединения по SSH;
делить экран на панели для независимых процессов;
автоматизировать подготовку рабочего пространства.
Полный список возможностей утилиты вы можете прочитать в репозитории проекта на GitHub.
Установка tmux
Утилита доступна почти для всех Unix-систем. В Ubuntu и Debian установить tmux можно командой:
sudo apt update && sudo apt install tmux
Убедимся, что утилита установлена:
tmux -V
В выводе увидим номер установленной версии tmux — например, tmux 3.6.
Команды установки для других ОС можно подсмотреть на страничке документации.
Основные команды
Префикс tmux
Префикс — это комбинация клавиш для вызова внутренних команд программы. По умолчанию установлен префикс Ctrl+b. Обозначать его в примерах мы будем так же — <prefix>. Чтобы выполнить команду, нужно нажать сочетание клавиш для префикса, затем отпустить обе клавиши, и наконец, нажать нужную клавишу действия.
Если какие‑то комбинации покажутся неудобными, расстраиваться не стоит — tmux очень гибок в настройке, чуть позже подробно разберем, как это делается.
Список основных команд
Команда |
Описание |
|
Создать новую сессию без названия |
|
Создать новую сессию с названием |
|
Вывести список запущенных сессий |
|
Подключиться к конкретной сессии |
|
Отключиться от сессии (она останется работать в фоне) |
|
Кроме текущей, завершить все сессии и их процессы |
|
Завершить сессию |
Окна и панели
После создания сессии можно приступить к организации рабочего пространства. В этом нам помогут окна и панели.
Окно — полноценный терминал внутри сессии. У каждого из них своя история команд, свои запущенные процессы. Окно можно сравнить с вкладкой в браузере — видно только ее содержимое.
Панель — это составная часть окна, которую можно делить на несколько таких соседствующих областей. В каждой — независимый терминал. В одной панели можно редактировать конфигурационный файл, в другой — запустить tcpdump и так далее.
Строка состояния отображается внизу окна и показывает имя текущей сессии, название активного окна, а также разную системную информацию.

Окна
По умолчанию при создании сессии создается одно окно с индексом 0.

Чтобы создать новое окно и переключиться на него, выполним команду:
<prefix> c

Теперь у нас два окна: с индексами 0 и 1. Активное отмечено звездочкой *.
Для переключения между окнами используются команды:
Команда |
Описание |
|
Переключиться на следующее окно |
|
Переключиться на предыдущее окно |
|
Переключиться на окно с конкретным номером |
Чтобы не путаться в окнах, их можно именовать с помощью команды:
<prefix> ,
Нужно будет ввести новое имя и нажать Enter. Теперь в строке состояния легко найти нужное окно по понятному названию.

Чтобы закрыть окно, нужно на него переключиться и выполнить команду:
<prefix> &
Панели
Панели можно получать, деля окна по вертикали и горизонтали.
Разделить окно вертикально можно командой:
<prefix> %

Чтобы сделать то же самое, но по горизонтали:
<prefix> "

Для переключения между панелями предусмотрены команды:
Команда |
Описание |
<prefix> ↑ |
На панель выше |
<prefix> ↓ |
На панель ниже |
<prefix> ← |
На панель слева |
<prefix> → |
На панель справа |
Если нам нужно временно развернуть одну панель на все окно, поможет команда:
<prefix> z
Повторное ее выполнение восстанавливает исходный размер панели.
Закрывает активную панель команда:
<prefix> x

Бесплатный курс «Системный администратор Linux с нуля»
Освойте администрирование Linux на SelectOS и станьте востребованным специалистом.
Непрерывные сессии
Представим кошмар любого разработчика: мы подключились к удаленному серверу по SSH, запустили сборку огромного проекта на несколько часов, и пошли пить чай с коллегами. Вернулись и обнаружили, что офисный Wi-Fi «моргнул» и… SSH-сессия разорвана!
Непрерывные сессии tmux спасают от таких кошмаров наяву. Проверим, как это работает на простом примере.
Создадим новую сессию:
tmux new -s test
Для имитации непрерывного процесса запустим утилиту ping:
ping 8.8.8.8
Отключимся от текущей сессии:
<prefix> d
После отсоединения в терминале появится сообщение о том, что сессия продолжает работать в фоновом режиме:

Посмотрим на список активных сессий и убедимся, что нужная сессия работает в фоновом режиме:
tmux ls

Теперь можно закрыть терминал или даже отключиться от интернета интернет — сессия продолжит функционировать.
Вновь подключимся к нашей сессии и проверим, что ping продолжает выполняться:
tmux a -t test
Мультиплексор tmux позволяет запускать любые команды и не бояться, что их выполнение прервется из-за обрыва связи или человеческого фактора.
Сессии можно сделать и по-настоящему бессмертными: они будут сохраняться не только после отключения клиентской стороны, но даже после перезагрузки самого сервера!
Для этого придется познакомиться с плагинами tmux-resurrect и tmux-continuum. Они как раз предназначены для сохранения и полного восстановления сессий со всеми окнами, панелями и выполняемыми процессами.
Подробнее на их возможностях останавливаться не будем, так как сильно уйдем в сторону от ознакомления с tmux. Вся информация по их установке и настройке доступна по ссылкам выше, которые ведут в репозитории проектов на GitHub.
Синхронизация панелей
Синхронизация панелей — это режим, при котором команды, вводимые в одной панели, повторяются и выполняются во всех других в пределах текущего окна.
Нужно подключиться по SSH к нескольким серверам и обновить на них пакеты? — выручит синхронизация панелей. Быстро поднять Docker-контейнеры на разных серверах или в разных директориях? — снова она. Остановить все микросервисы для деплоя новой версии? — полагаю, уже ясно, что выручит в подобных операциях.
Чтобы включить этот режим, подключимся к сессии с несколькими панелями:
tmux a -t <name>
В коде выше, <name> — имя сессии.
Вызовем командную строку tmux:
<prefix> :
Теперь включим режим синхронизации панелей, введя:
setw synchronize-panes
Нажимаем Enter.
Команда setw — это сокращение от set-window-option, она включает опцию только для текущего окна. В скриптах автоматизации tmux, о которых поговорим позже, удобнее использовать именно полную форму команды — например set-window-option или synchronize-panes, — так как будет легче понять, что же мы подразумевали, когда писали код.
«Если можно применить опцию только для текущего окна, то можно и для всех окон?» — наверняка подумали вы. Да, конечно. Флаги -t и -g позволяют управлять областью настройки. По умолчанию каждая команда применяется только к текущему окну.
Если нужно включить режим синхронизации для конкретного окна, используется флаг -t, например:
setw -t <name>:<index> synchronize-panes
Здесь, <name> — имя сессии, а <index> — номер окна.
Если же нужно включить этот режим для всех окон сессии, пригодится флаг -g:
setw -g synchronize-panes
Теперь попробуем ввести какую-нибудь команду в активной панели — например, ping 8.8.8.8. Ввод команды мгновенно воспроизводится во всех панелях окна.

Чтобы отключить синхронизацию панелей, снова подключимся к сессии:
tmux a -t <name>
Не забудем, что <name> — имя сессии.
Так же вызовем командную строку tmux:
<prefix> :
Выключим режим той же командой:
setw synchronize-panes
Ввод в панелях снова стал независимым.
Скрипты сессий
Лень — двигатель прогресса. Зачем каждый раз вручную создавать сессию, окна, панели, запускать команды, если это можно автоматизировать? Давайте избавим себя от рутины с помощью bash-скрипта. Пусть он настраивает рабочее пространство.
Вот пример простого bash-скрипта main.sh, который создаст новую сессию, окна, разделит окна на панели и запустит команды:
#!/bin/bash # Название сессии SESSION="main" # Создаем первое окно с названием "resources" tmux new-session -d -s $SESSION -n "resources" # Отправляем текст на ввод для запуска утилиты htop tmux send-keys -t $SESSION:0 "htop" C-m # Делим окно горизонтально tmux split-window -v -t $SESSION:0 # Отправляем текст на ввод для запуска утилиты df tmux send-keys -t $SESSION:0.1 "df -h" C-m # Создаем второе окно с названием "ping" tmux new-window -t $SESSION -n "ping" # Отправляем текст на ввод для запуска утилиты ping tmux send-keys -t $SESSION:1 "ping 8.8.8.8" C-m # Создаем третье окно с названием "logs" tmux new-window -t $SESSION -n "logs" # Отправляем текст на ввод для вывода логов tmux send-keys -t $SESSION:2 "tail -f /var/log/syslog" C-m # Подключаемся к сессии и открываем первое окно "resources" tmux attach -t $SESSION:0
Флаг -d создает сессию в фоновом режиме, чтобы сначала ее можно было настроить. Команда send-keys отправляет команду в нужную панель для выполнения, а C-m — это аналог нажатия Enter на клавиатуре.
Перед запуском скрипта дадим ему права на исполнение:
chmod +x main.sh
Стартует наша автоматизация одной командой:
./main.sh
После запуска мы получаем сессию с тремя окнами: resources, ping и logs. Благодаря команде attach -t $SESSION:0 сразу попадаем в первое созданное окно — в нашем примере это resources.
С помощью скрипта можно настроить любое количество окон и панелей, распределить все как удобно и запустить любые команды. Теперь наше рабочее пространство разворачивается быстро и без усилий.
С течением времени поддерживать длинные цепочки команд send-keys станет утомительным делом. Это верный знак, что пора переходить к тяжелой артиллерии — инструментам для управления сессиями через YAML- или JSON-файлы:
Tmuxinator (на Ruby) — описывает структуру окон и панелей в простом YAML-файле, а затем разворачивает проект одной короткой командой вида
tmuxinator start myfirstproject;tmuxp (на Python) — альтернатива для тех, кто предпочитает Python или JSON. Большой плюс утилиты — наличие библиотеки
libtmux, которая предоставляет полноценный Python API. Управлять окнами и панелями можно прямо из скриптов на Python.
Эти инструменты значительно упрощают создание сложных рабочих пространств.
Конфигурация ~/.tmux.conf
Что может быть приятнее, чем настройка утилиты под себя? Конфигурационный файл ~/.tmux.conf позволяет это сделать.
Откроем или создадим файл конфигурации ~/.tmux.conf с помощью любого текстового редактора:
nano ~/.tmux.conf
В качестве примера рассмотрим самые популярные настройки, которые значительно улучшают опыт взаимодействия с tmux:
# Включаем поддержку мыши. Это позволяет выделять текст, листать историю и менять размер панелей мышкой set -g mouse on # Меняем нумерацию окон и панелей с 0 на 1 # Внимание! В скриптах вроде нашего main.sh придется заменить 0 на 1, например, $SESSION:0 станет $SESSION:1) set -g base-index 1 setw -g pane-base-index 1 # Увеличиваем историю буфера прокрутки set -g history-limit 5000 # Меняем префикс Ctrl + b на более удобное сочетание клавиш, например Ctrl + a unbind C-b set -g prefix C-a bind C-a send-prefix # Применение изменений в конфигурационный файл по горячей клавише. Чтобы применить изменения, нужно нажать <prefix> и заданную горячую клавишу, например, r bind r source-file ~/.tmux.conf ; display-message "Changes applied"
Сохраняем файл ~/.tmux.conf и применяем изменения вручную:
tmux source-file ~/.tmux.conf
Конфигурационный файл ~/.tmux.conf можно настроить более гибко. Полный список опций доступен в репозитории проекта на GitHub или в справке по команде man tmux.
Заключение
Tmux — это полноценный инструмент, который упрощает и делает удобнее работу в консоли. Он экономит и время, и нервы. Вместо множества терминалов — один. Попробуйте провести в мультиплексоре хотя бы несколько часов. Вы удивитесь, как обходились без него раньше.
Наверняка среди читателей есть те, кто уже работает в tmux. Поделитесь, пожалуйста, вашими идеями, хитростями и любимыми плагинами. Будет очень полезно и мне, и всем, кто заглянул в комментарии.
Комментарии (30)

nickolaym
26.08.2026 09:12Кстати про смену префикса. "На что-то более удобное" есть смысл менять, только если этот хоткей вовсю используется в приложении, открытом в терминале.
В противном случае получится ни себе ни людям.
Ни себе - потому что вырабатывается привычка, а потом садишься за чужой ненастроенный терминал, и первым делом начинаешь танцы с бубном, чтобы перенастроить под себя. Каждый раз.
Ни людям - потому что сядет коллега админить твою машину (или свою машину после тебя), и - ахаха, попался.

nickolaym
26.08.2026 09:12Ещё одна полезная настройка, помимо мыши - это
set -g set-clipboard onЧтобы интегрироваться с системным буфером обмена, особенно, на запись. На вставку из системного - проблем-то не возникнет, а вот на проброс выделения в систему, а не во встроенный тмуксовский буфер...

eps
26.08.2026 09:12К слову, у iTerm2 - macOS Terminal шикарная встроенная поддержка
tmux. Она сама включается, если запуститьtmuxс unicode и control channel,tmux -uCCВ принципе, мой стандартный способ захода на удалённый сервер:
ssh user@host -t tmux -uCC new -As defaultЗапускает сеанс
defaultили подключается к уже запущенному; идемпотентна. И передаёт управление tmux-ом моей терминалке.

wiki7979
26.08.2026 09:12Вся "полезность", "крутость" этого хвалёного tmux летит к чертям после перезагрузки вашего компа. Никакой resurrect не восстановит ваши SSH сессии, которые вы так старательно настраивали несколько дней.

domix32
26.08.2026 09:12Интересно, было бы послушать что такого вы там настраиваете в соединениях по несколько дней? Плагины на воскрешение лэйаута есть, даже конфиги можно писать, чтобы срабатывала какая-нибудь автокоманда при запуске, которая воскресит само соединение. Настраивать это всё конечно больно, но принципиально не невозможно. Поэтому предлагаю попробовать потрогать zellij - у него конфиги более человечные и настраиваются проще. Да и последний layout воскрешает на раз из коробки да и вообще эргономичнее в сравнении с tmux.

wiki7979
26.08.2026 09:12zellij - то же самое. А настраиваю может не несколько дней, но раз настроил - оно существует несколько дней и может быть закрыто, открыто и тд. Человек к этому привыкает, а после перезагрузки всё пропадает и он должен вспоминать в каком окне что было и что где работало. И насколько я помню, resurrect ничем не помогает - потому что если логин по паролю, то он нигде не будет сохранен. А если настройка восстановления включает в себя создание каких-то программ или конфигов на целевых серверах - то нафиг все это надо. Короче, в теории это все хорошо, но в реальности - теория сталкивается с реальностью

domix32
26.08.2026 09:12Ну, парольный вход на то и парольный, чтобы каждый раз его спрашивать. Не нравится каждый раз перевходить - сделайте вход по публичному ключу или по сертификату.
или конфигов на целевых серверах
не на целевых серверах, а на машине с которой вы ходите. делаете
tmux --config my_config, а в конфиге что-то вроде этого:# my_config layout split vertical ratio(1,3) panel: name "ssh1" cmd "ssh -p22 user@host1 -id blabla.crt 'top'" panel: name "ssh2" cmd "ssh -p22 user@host2 -id blabla.crt 'watch tail -f /etc/nginx/logs/log.txt'"правильный синтаксис конечно надо будет подсмотреть или у иишек спросить, но общая идея примерно такая. Для zellij аналогично, только там формат в kdl. На целевых машинах ничего доносить не требуется. Если вы конечно инсепшн какой-нибудь устраивать не планируете или у вас рабочее место на удаленной машине.

wiki7979
26.08.2026 09:12Это заморочно - обновлять конфиги после каждого визуального изменения.

domix32
26.08.2026 09:12Из вариантов остаётся все также ручками запускать каждую из команд. Так что не очень понятно на что вы в таком случае жалуетесь.

wiki7979
26.08.2026 09:12Ну мне это не надо. Кому надо наверно заморочится с конфигами. А простым людям этот tmux с zellij - одно неудобство.
Основной посыл этих тулзов такой что они удобны своей многооконностью и поддержанием открытых соединений. Но это вовсе не так.

randomsimplenumber
26.08.2026 09:12А чем удобно пользоваться простому народу?

wiki7979
26.08.2026 09:12Ну обычными терминалами, что уж тут. Только я каждый сервер транслирую через локальный ttyd чтобы доступаться к ним из браузера через закладки и создавать в любых количествах нужные сессии: один клик - новая сессия. Или вместо закладок удобно также держать их все в dashy..
По факту, мне не нужны многооконность и сохранение сессий.

nickolaym
26.08.2026 09:12Странная логика!
Кококо tmux не переживает ребут хоста, очень неудобно, не хочу пользоваться! И другим буду всячески отсоветовывать.
Хочу пользоваться ttyd - который тоже не переживает ребут хоста, да и с сессиями и с обрывом связи там тоже отдельный секс!
По факту, просто заменил одно терминальное приложение на другое.
А то, что в браузере многооконность есть - это не смущает? Просто окна переехали с серверной стороны на клиентскую.
nickolaym
У тмукса есть возможность выполнить несколько команд одним махом.
Удобно использовать тмукс, подключаясь по ссш: при обрыве связи не оборвётся сессия.
Если на удалённом компьютере написать простенький скрипт (скажем, ~/start-my-tmux)
то команда
восстановит либо развернёт сессию, как надо.
iwheksid Автор
Полезное дополнение! Спасибо!
Qetzlcoatl
А можно вместо
tmux attach || tmux newиспользоватьtmux new -A -s sessionname.