Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

tmux у сисадмина — разбивает терминал, реанимирует сессии, уносит хаос

Дата публикации: 26-08-2026 08:00:05

Каждый, кто работает в терминале, держит открытыми сразу несколько вкладок: в первой смотрит логи, во второй следит за списком запущенных процессов через htop, в третьей работает с Git, в четвертой запускает миграции базы данных. При переключении между вкладками легко запутаться, закрыть нужную, а при обрыве связи — потерять запущенные процессы и сессии. Привет! Я Саломея, продуктовый технический писатель в Selectel. В этой статье поделюсь своим опытом, как с помощью tmux упорядочить этот хаос и сделать работу удобнее. Разделим окно терминала на панели, запустим сессию, которая не прервется при закрытии окна, автоматизируем настройку рабочего пространства. Посмотрим, как выполнять команду сразу на нескольких серверах. Читать далее →

Основное содержимое страницы с новостью.

Уровень сложностиПростой

Время на прочтение9 мин

Охват и читатели9.8K

Обзор

15c320a2d157f4a66ec9690c7808d0fc.jpg

Каждый, кто работает в терминале, держит открытыми сразу несколько вкладок: в первой смотрит логи, во второй следит за списком запущенных процессов через 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 очень гибок в настройке, чуть позже подробно разберем, как это делается.

Список основных команд

Команда

Описание

tmux

Создать новую сессию без названия

tmux new -s <name>

Создать новую сессию с названием <name>

tmux ls

Вывести список запущенных сессий

tmux a -t <name>

Подключиться к конкретной сессии <name>

<prefix> d

Отключиться от сессии (она останется работать в фоне)

tmux kill-session -a

Кроме текущей, завершить все сессии и их процессы

tmux kill-session -t <name>

Завершить сессию <name> и ее процессы

Окна и панели

После создания сессии можно приступить к организации рабочего пространства. В этом нам помогут окна и панели.

Окно — полноценный терминал внутри сессии. У каждого из них своя история команд, свои запущенные процессы. Окно можно сравнить с вкладкой в браузере — видно только ее содержимое.

Панель — это составная часть окна, которую можно делить на несколько таких соседствующих областей. В каждой — независимый терминал. В одной панели можно редактировать конфигурационный файл, в другой — запустить tcpdump и так далее.

Строка состояния отображается внизу окна и показывает имя текущей сессии, название активного окна, а также разную системную информацию.

Скриншот терминала с тремя панелями.

Скриншот терминала с тремя панелями.

Окна

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

Скриншот терминала с подсветкой первого окна с индексом 0.

Скриншот терминала с подсветкой первого окна с индексом 0.

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

<prefix> c
Скриншот терминала с подсветкой активного окна.

Скриншот терминала с подсветкой активного окна.

Теперь у нас два окна: с индексами 0 и 1. Активное отмечено звездочкой *. 

Для переключения между окнами используются команды:

Команда

Описание

<prefix> n

Переключиться на следующее окно

<prefix> p

Переключиться на предыдущее окно

<prefix> <index>

Переключиться на окно с конкретным номером <index>  от 0 до 9

Чтобы не путаться в окнах, их можно именовать с помощью команды:

<prefix> ,

Нужно будет ввести новое имя и нажать Enter. Теперь в строке состояния легко найти нужное окно по понятному названию.

Скриншот терминала с подсветкой имени окна.

Скриншот терминала с подсветкой имени окна.

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

<prefix> &
Панели

Панели можно получать, деля окна по вертикали и горизонтали.

Разделить окно вертикально можно командой:

<prefix> %
Скриншот терминала с двумя вертикальными панелями.

Скриншот терминала с двумя вертикальными панелями.

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

<prefix> "
Скриншот терминала с двумя горизонтальными панелями.

Скриншот терминала с двумя горизонтальными панелями.

Для переключения между панелями предусмотрены команды:

Команда

Описание

<prefix> ↑

На панель выше

<prefix> ↓

На панель ниже

<prefix> ←

На панель слева

<prefix> →

На панель справа

Если нам нужно временно развернуть одну панель на все окно, поможет команда:

<prefix> z

Повторное ее выполнение восстанавливает исходный размер панели.

Закрывает активную панель команда:

<prefix> x
8817b25c787517e6a0a056e27c522a36.gif

Бесплатный курс «Системный администратор Linux с нуля»

Освойте администрирование Linux на SelectOS и станьте востребованным специалистом.

Зарегистрироваться →

Непрерывные сессии

Представим кошмар любого разработчика: мы подключились к удаленному серверу по SSH, запустили сборку огромного проекта на несколько часов, и пошли пить чай с коллегами. Вернулись и обнаружили, что офисный Wi-Fi «моргнул» и… SSH-сессия разорвана! 

Непрерывные сессии tmux спасают от таких кошмаров наяву. Проверим, как это работает на простом примере. 

Создадим новую сессию:

tmux new -s test

Для имитации непрерывного процесса запустим утилиту ping:

ping 8.8.8.8

Отключимся от текущей сессии:

<prefix> d

После отсоединения в терминале появится сообщение о том, что сессия продолжает работать в фоновом режиме:

Скриншот терминала с сообщением о работе сессии tmux в фоновом режиме.

Скриншот терминала с сообщением о работе сессии tmux в фоновом режиме.

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

tmux ls
Скриншот терминала с сообщением о работе сессии tmux в фоновом режиме.

Скриншот терминала с сообщением о работе сессии tmux в фоновом режиме.

Теперь можно закрыть терминал или даже отключиться от интернета интернет — сессия продолжит функционировать.

Вновь подключимся к нашей сессии и проверим, что 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

После запуска мы получаем сессию с тремя окнами: resourcesping и 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. Поделитесь, пожалуйста, вашими идеями, хитростями и любимыми плагинами. Будет очень полезно и мне, и всем, кто заглянул в комментарии.

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Как задавать в скриптах имя вкладки screen?0623-06-2026
2Переезд с ESB на свой стек: что реально экономит бизнес08.0429-07-2026
3Как очередной умник свою клавиатуру изобретал06.0106-07-2026
4Тимлид: тупик или развилка. Разбираем семь карьерных выходов0523-06-2026
5От Django к no-code: опыт разработки системы управления инцидентами011.721-08-2026
6Инвентаризируем контейнеры с помощью Wazuh-агента0526-06-2026
7Организовал весь пентест-арсенал в одном месте: всё под рукой, офлайн и на русском5728-06-2026
8Taskbar с живыми превью работающих приложений (олдскул на NET11)0604-07-2026
9Почему Excel не работает, когда активов становится 500+: подводные камни управления ИТ-парком в табличных редакторах0722-06-2026
10Выпуск Bubblewrap 0.12, прослойки для создания изолированных окружений 09.2727-08-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 7.35. Источник: habr.com.