
Резюме
- Терминальные мультиплексоры позволяют запускать несколько команд в разных виртуальных терминалах внутри одного терминала.
- Мультиплексоры, такие как tmux, позволяют запускать команды через удаленные соединения, не теряя прогресс из-за сбоев в работе сети.
- Популярные варианты включают GNU Screen, tmux и Byobu.
Если вы работаете в удаленных сеансах Linux, вы, вероятно, чувствовали боль от разрыва соединения в середине длительной операции. Или вы можете захотеть запустить более одного сеанса через одно SSH-подключение. Терминальный мультиплексор может быть тем, что вы ищете.
Что такое терминальный мультиплексор?
Терминальный мультиплексор — это утилита, которая позволяет вам «мультиплексировать» терминал или использовать терминал так, как будто это несколько терминалов. Это похоже на несколько окон терминала или терминалов с вкладками, но в пределах одного терминала. На современных компьютерах это обычно эмулятор терминала Linux, но концепция восходит к временам, когда основным способом использования компьютеров были выделенные текстовые терминалы.
Терминальный мультиплексор позволяет запускать команды в одном виртуальном терминале, одновременно переключаясь на другой терминал для выполнения других команд.
Зачем использовать терминальный мультиплексор?
Если современные машины способны одновременно запускать несколько окон терминала или использовать терминалы с вкладками, зачем вам тогда нужен терминальный мультиплексор?
Если вы когда-либо входили в удаленную машину, например, веб-сервер или, возможно, даже сервер вашей домашней лаборатории, и сталкивались с сетевым сбоем, вы можете увидеть преимущество терминального мультиплексора. В обычном сеансе SSH вы обнаружите, что даже после восстановления сети SSH будет игнорировать ваши нажатия клавиш. Вам придется завершить и перезапустить ваше SSH-подключение. Если вы были в середине сложной операции, например, обновления пакетов или установки программного обеспечения, вам придется начинать с нуля. SSH был разработан для проводных подключений.
Такие инструменты, как Mosh, могут устранить большую часть этой проблемы, но терминальные мультиплексоры сияют над удаленными соединениями. Вы можете начать сеанс, и если соединение разорвется, вы можете переподключиться и вернуться к нему, как будто ничего не произошло. Вы можете начать длительный процесс, отсоединить его, заняться чем-то другим, снова подключиться и продолжить с того места, на котором остановились. Вы можете поддерживать сеанс на удаленной машине, отсоединяться и подключаться снова столько, сколько захотите. Пока сервер не был перезагружен, а ваш сеанс остается активным, вы можете входить и выходить из него столько, сколько захотите.

Если вы когда-либо были в IRC и удивлялись, почему некоторые пользователи никогда не выходят из системы, это не потому, что они как-то не спят, не ходят на работу, в школу или что-то еще. Ладно, может они и не ходят на работу или в школу, но основной способ, которым они остаются в системе, — это запуск терминального мультиплексора на сервере оболочки где-нибудь. Это называется «бездействием», просто оставаться в системе IRC, не говоря ни слова.

Другая очевидная причина — иметь несколько окон терминала. Опять же, эта возможность становится полезной при удаленных соединениях, поскольку большинство людей, использующих Linux на рабочем столе, обычно используют оконную систему, например X11 или Wayland, которая уже позволяет им запускать несколько окон терминала. В крайнем случае, они могут использовать виртуальные консоли для запуска полноэкранных сеансов командной строки.
Без установленного на удаленной машине терминального мультиплексора единственными способами многозадачности через SSH являются использование управления заданиями или открытие нескольких подключений. Первое может быть громоздким, а второе требует больше ресурсов. Имеет смысл использовать одно и то же подключение, когда это возможно. Если вам нужно запустить команду и обратиться к странице руководства, вы можете иметь оболочку в одном окне, а страницу руководства — в другом. Многие терминальные мультиплексоры позволяют отображать несколько окон на одном экране. Это похоже на использование тайлового оконного менеджера.
Терминальные мультиплексоры лучше всего подходят, если вы много работаете на удаленных машинах, таких как веб-сервер, учетная запись оболочки или сервер домашней лаборатории. Если вы в основном используете настольный компьютер, вам лучше использовать несколько окон терминала или терминалы с вкладками. Если вы хотите, чтобы ваши окна терминала были аккуратно расположены, рассмотрите возможность использования менеджера окон плитки.
Какие терминальные мультиплексоры популярны?
Существует несколько терминальных мультиплексоров, которые вы можете использовать в своей системе Linux.

GNU Screen: Это один из старейших терминальных мультиплексоров, предшествовавший Linux. GNU Screen существует с 1987 года. Даже в 80-х, с ростом рабочих станций, многие люди все еще застряли на символьных терминалах. Screen облегчил жизнь многим из этих пользователей, предоставив возможность разделить тесный экран на несколько окон терминала. Он также представил идею отсоединения и повторного присоединения сеансов.
Это было благом для людей, которые подключались к удаленным системам через модемы. Хотя я никогда не пользовался учетными записями shell в их лучшие времена, я помню дни коммутируемых сетей, и это раздражало, когда мой модем был на общей линии, и кто-то снимал трубку.
GNU Screen практически не встречал конкуренции, пока в 21 веке у него не появились конкуренты.

tmux: изначально разработанный как часть проекта OpenBSD, он, похоже, украл славу GNU Screen как ведущего терминального мультиплексора, будучи портированным практически на все существующие Unix-подобные системы.

Byobu: Byobu изначально был ответвлением GNU Screen, созданным для Ubuntu. Название происходит от японского слова, обозначающего складной декоративный экран. Верный современному использованию терминальных мультиплексоров для удаленных систем, он был в первую очередь разработан для использования на серверах Ubuntu. Со временем Byobu переключился на улучшение tmux вместо GNU Screen.
Как использовать терминальный мультиплексор?
Прежде чем использовать терминальный мультиплексор, его нужно установить. Я покажу, как использовать tmux, так как это мой любимый терминальный мультиплексор.

tmux широко доступен для большинства основных менеджеров пакетов дистрибутивов Linux. Я буду использовать Debian/Ubuntu в качестве примера:
sudo apt установить tmux
Теперь, когда у меня установлен tmux, я могу запустить его из командной строки:
tmux

В tmux у меня запущен другой сеанс оболочки. Я могу вводить в него команды так же, как если бы я был в обычном сеансе оболочки. Я могу давать команды tmux с префиксом Ctrl+b. Чтобы создать еще одно окно терминала, я использую Ctrl+b, затем нажимаю c. Это откроет еще одно окно терминала в tmux и переключит на него. Текущие окна перечислены в левом нижнем углу окна терминала в строке состояния. Чтобы переключиться между окнами, я могу снова нажать Ctrl+b, а затем номер окна, в которое я хочу перейти.

Я также могу разделить текущее окно, чтобы иметь больше сеансов терминала. Чтобы разделить окно по горизонтали, я могу нажать Ctrl+b, а затем » (двойные кавычки), а чтобы разделить его по вертикали, я нажму Ctrl+b, а затем клавишу % (процент). Сеансы в каждом окне называются «панелями» в tmux. Я могу переключаться между панелями с помощью Ctrl+b, а затем o, и менять местами панели с помощью Ctrl+b, а затем O (заглавная O).

Чтобы отсоединить сеанс, я могу нажать Ctrl+b, а затем d. Чтобы снова присоединить его после отсоединения, я введу это в командной строке

tmux прикрепить
Я могу копировать и вставлять данные между сеансами, перейдя в «режим копирования», но большую часть времени я буду использовать собственные функции копирования и вставки в моей оконной системе.
Терминальные мультиплексоры могут быть неясными, но если вы активно используете удаленные машины Linux, они могут быть полезны для разделения одного терминального сеанса на несколько терминалов и поддержания соединения с вашим сервером, даже если ваше соединение ослабевает. Выбор терминального мультиплексора, такого как tmux, может сделать ваши онлайн-сеансы более полезными и даже более увлекательными.