Терминальные мультиплексоры: зачем нужны tmux и screen и как с ними работать

Если вы часто работаете в терминале Linux, вы наверняка сталкивались с ситуацией, когда нужно держать открытыми несколько окон одновременно или запустить долгий процесс, который не должен прерваться при закрытии терминала. Решение этих и многих других задач — терминальные мультиплексоры. Два самых популярных инструмента в этой области — tmux и screen. В этом руководстве мы разберём, зачем они нужны, чем отличаются и как начать с ними работать.

Что такое терминальный мультиплексор?

Терминальный мультиплексор — это программа, которая позволяет создавать, управлять и переключаться между несколькими виртуальными терминалами внутри одного окна терминала. По сути, вы получаете оконный менеджер для командной строки.

Основные возможности:

  • Разделение окна на панели: работа в нескольких сессиях одновременно.

  • Отсоединение и повторное подключение: можно запустить процесс, закрыть терминал, а позже вернуться к нему в том же состоянии .

  • Управление сессиями: несколько независимых рабочих пространств.

  • Совместная работа: подключение нескольких пользователей к одной сессии.

Зачем это нужно?

Представьте типичные сценарии:

  • Вы запустили обновление системы, которое займёт час, и хотите закрыть ноутбук, но не прерывать процесс.

  • Вы работаете на сервере по SSH, и соединение может разорваться — мультиплексор сохранит ваше состояние.

  • Вам нужно одновременно смотреть логи, редактировать конфиг и выполнять команды — разделите окно на панели.

  • Вы хотите держать несколько проектов открытыми в разных «рабочих столах» терминала.

И tmux, и screen решают эти задачи. Давайте разберём их по отдельности.

Screen: классический инструмент

GNU Screen — старейший мультиплексор, существующий с 1987 года. Он есть практически в любой системе Linux по умолчанию и отлично подходит для базовых задач.

Установка Screen

Screen обычно предустановлен. Если нет:

# Ubuntu/Debian

sudo apt install screen

# Fedora

sudo dnf install screen

# Arch

sudo pacman -S screen

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

Все команды в Screen начинаются с префикса Ctrl+A.

Действие Команда
Создать новую сессию screen
Создать сессию с именем screen -S имя_сессии
Отсоединиться от сессии Ctrl+A затем d
Показать список сессий screen -ls
Подключиться к сессии screen -r или screen -r имя_сессии
Создать новое окно Ctrl+A затем c
Переключиться между окнами Ctrl+A затем n (следующее) или p (предыдущее)
Разделить окно горизонтально Ctrl+A затем S
Переключиться между панелями Ctrl+A затем Tab
Удалить текущую панель Ctrl+A затем X
Завершить сессию Ctrl+A затем k (подтвердить)

Пример рабочего процесса:

# Запускаем сессию с именем «backup»

screen -S backup

# Запускаем длительную команду

rsync -av /home/ /media/backup/

# Отсоединяемся (Ctrl+A d)

# Позже подключаемся обратно

screen -r backup

Несколько окон GNU Screen в одном терминале Linux с переключением между ними
GNU Screen позволяет создавать множество окон внутри одной терминальной сессии

Tmux: современная альтернатива

tmux (terminal multiplexer) — более современный мультиплексор, который пришёл на смену screen. Он предлагает более удобное управление, лучшее разделение панелей и богатые возможности настройки.

Установка tmux

# Ubuntu/Debian

sudo apt install tmux

# Fedora

sudo dnf install tmux

# Arch

sudo pacman -S tmux

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

По умолчанию префикс в tmux — Ctrl+B.

Действие Команда
Создать новую сессию tmux new -s имя_сессии
Отсоединиться от сессии Ctrl+B затем d
Показать список сессий tmux ls
Подключиться к сессии tmux attach -t имя_сессии
Создать новое окно Ctrl+B затем c
Переключить окна Ctrl+B затем n (следующее) или p (предыдущее), или 0-9 по номеру
Разделить окно вертикально Ctrl+B затем %
Разделить окно горизонтально Ctrl+B затем «
Переключиться между панелями Ctrl+B затем стрелка (←↑↓→)
Закрыть панель exit или Ctrl+B затем x (подтвердить)
Войти в режим копирования Ctrl+B затем [ (прокрутка, поиск)
Переименовать окно Ctrl+B затем,
Переименовать сессию Ctrl+B затем $

Пример рабочего процесса:

# Создаём сессию

tmux new -s mysession

# Разделяем на три панели

# Ctrl+B » — горизонтальное разделение

# Ctrl+B % — вертикальное разделение

# В первой панели — редактируем конфиг

nano /etc/nginx/nginx.conf

# Во второй — смотрим логи

tail -f /var/log/nginx/access.log

# В третьей — выполняем команды

systemctl status nginx

# Отсоединяемся (Ctrl+B d)

# Позже подключаемся — всё на своих местах

tmux attach -t mysession

Разделённое окно tmux с панелями для разных задач в Linux
Tmux позволяет разделить окно на панели — в одной редактируем код, в другой смотрим логи, в третьей выполняем команды

Сравнение tmux и screen

Критерий GNU Screen tmux
Возраст 1987 (классика) 2007 (современный)
Разделение панелей Только горизонтальное Горизонтальное и вертикальное
Управление Ctrl+A (можно переопределить) Ctrl+B (удобнее по умолчанию)
Скриптинг Слабое Мощные возможности через конфиги
Совместимость Есть везде Требует установки
Поддержка мыши Ограниченная Отличная (в новых версиях)
Цвета и статусная строка Базовые Полностью настраиваемая

Что выбрать?

  • Если вам нужен инструмент, который гарантированно есть на любом сервере, и вы не хотите ничего устанавливать — выбирайте screen.

  • Если вы цените удобство, гибкость и современные возможности (вертикальное разделение, красивая статусная строка) — выбирайте tmux.

Настройка tmux под себя

Tmux очень гибок в настройке. Конфигурационный файл — ~/.tmux.conf. Вот пример базовой настройки:

# Изменяем префикс с Ctrl+B на Ctrl+A (как в screen)

unbind C-b

set -g prefix C-a

bind C-a send-prefix

# Удобное разделение панелей

bind | split-window -h

bind — split-window -v

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

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

# Переключение между окнами Shift+Стрелка

bind -n S-Left previous-window

bind -n S-Right next-window

# Статусная строка

set -g status-bg black

set -g status-fg white

set -g status-left-length 60

set -g status-left «#[fg=green]#S #[fg=white]|»

set -g status-right «#[fg=yellow]%H:%M #[fg=cyan]%d.%m.%Y»

# Поддержка мыши (прокрутка, изменение размера панелей)

set -g mouse on

После создания конфига перезагрузите tmux или выполните tmux source-file ~/.tmux.conf.

Продвинутые возможности

Скриптинг и автоматизация

Можно создавать скрипты, которые запускают готовую конфигурацию tmux с нужными окнами. Например:

#!/bin/bash

SESSION=«work»

tmux new-session -d -s $SESSION -n «code»

tmux send-keys -t $SESSION:code «cd ~/projects/myapp» C-m

tmux send-keys -t $SESSION:code «nvim .» C-m

tmux new-window -t $SESSION -n «logs»

tmux send-keys -t $SESSION:logs «journalctl -f» C-m

tmux new-window -t $SESSION -n «server»

tmux send-keys -t $SESSION:server «npm run dev» C-m

tmux attach -t $SESSION

Совместная работа

Несколько пользователей могут подключаться к одной tmux-сессии:

# Пользователь 1 создаёт сессию

tmux new -s shared

# Пользователь 2 подключается (с теми же правами)

tmux attach -t shared

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

В tmux нажмите Ctrl+B затем [ — войдёте в режим копирования. Стрелками прокручивайте, Space для начала выделения, Enter для копирования. Вставка — Ctrl+B затем ].

FAQ — Часто задаваемые вопросы

Что лучше: screen или tmux?

Для серверов, где нужна минимальная установка, screen надёжнее. Для личного использования на десктопе tmux удобнее благодаря разделению панелей и гибкой настройке.

Можно ли использовать мышь в tmux?

Да, добавьте set -g mouse on в ~/.tmux.conf. Тогда можно переключать панели, изменять их размер и прокручивать мышью.

Как сохранить сессию после перезагрузки?

По умолчанию сессии не сохраняются. Для автоматического восстановления используйте плагины (например, tmux-continuum) или скрипты, которые запускают сессии при старте системы.

Можно ли в screen разделить окно вертикально?

В классическом screen — только горизонтально. Вертикальное разделение есть в некоторых версиях, но оно работает хуже, чем в tmux.

Как сменить префикс (Ctrl+B) на что-то другое?

Добавьте в ~/.tmux.conf строки:

unbind C-b

set -g prefix C-a

bind C-a send-prefix

Что делать, если случайно отсоединился?

Просто подключитесь обратно: tmux attach или screen -r.

Можно ли запускать GUI-приложения в tmux/screen?

Нет, это инструменты для терминала. Для GUI-приложений используйте обычные оконные менеджеры.

Заключение

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

Начните с простого: установите tmux, запомните базовые команды (Ctrl+B c для нового окна, Ctrl+B % для вертикального разделения) — и вы быстро оцените, насколько удобнее станет ваша работа в терминале.