Краткое содержание
Если вы работаете с удалёнными Linux-сессиями, вам, возможно, знакома неприятная ситуация, когда соединение обрывается посреди важного процесса. Или вы столкнулись с необходимостью работать с несколькими сессиями через одно SSH-соединение. В таких случаях терминальный мультиплексор может стать настоящим спасением.
Что такое терминальный мультиплексор?
Терминальный мультиплексор — это утилита, позволяющая "мультиплексировать" терминал, то есть использовать его так, будто это несколько терминалов одновременно. Это похоже на работу с несколькими окнами терминала или вкладками, но в рамках одного интерфейса. В современных компьютерах это обычно реализовано в эмуляторе терминала Linux, но сама идея берёт начало с тех времён, когда компьютеры использовались через специализированные текстовые терминалы.
Терминальный мультиплексор позволяет запускать команды в одной виртуальной секции терминала, а затем переключаться на другую, чтобы выполнять новые команды.
Зачем использовать терминальный мультиплексор?
С появлением современных машин, позволяющих открывать несколько окон терминала или вкладок одновременно, возникает вопрос: а зачем же заморачиваться с терминальным мультиплексором?
Если вы когда-либо работали на удалённой машине, например, на веб-сервере или домашнем сервере, и испытывали проблемы с сетью, вам будет знакомо, как это может быть неприятно. В обычной SSH-сессии, даже если связь восстанавливается, SSH может не реагировать на ваши нажатия клавиш, и вам придётся завершать и перезапускать соединение. Если вы находились в процессе сложной операции, такой как обновление пакетов или установка программ, вам придётся начинать всё заново. SSH изначально разрабатывался для проводных соединений.
Хотя такие инструменты, как Mosh, решают часть этих проблем, именно терминальные мультиплексоры отлично подходят для работы с удалёнными соединениями. Вы можете начать сессию, и если соединение прерывается, вы сможете снова подключиться и продолжить как ни в чем не бывало. Вы можете запустить длительный процесс, отсоединиться, заняться чем-то другим, а затем вернуться и продолжить с того места, на котором остановились. Вы можете поддерживать активную сессию на удалённой машине и отсоединяться и подключаться сколько угодно. Пока сервер не перезагрузился и ваша сессия остаётся активной, вы можете заходить и выходить так часто, как хотите.
Если вы когда-либо сидели в IRC и задавались вопросом, почему некоторые пользователи никогда не выходят из сети, это не потому, что они не спят или не идут на работу, учёбу или заняты чем-то ещё. Возможно, они действительно не идут на работу, но основной способ их "идлинга" (продолжительного нахождения в онлайне) заключается в использовании терминального мультиплексора на shell-сервере. Это называется "идлинг" — оставаться в сети без общения.
Можете использовать интернет по старинке, в стиле Unix, с shell-аккаунтами
Вспомните текстовый интернет начала 90-х.
Другой очевидной причиной является возможность иметь несколько окон терминала. Эта фишка особенно полезна при работе с удалёнными соединениями, поскольку большинство пользователей Linux на настольных компьютерах привыкли к оконным системам, таким как X11 или Wayland, которые уже позволяют работать с несколькими окнами терминалов. При необходимости они могут использовать виртуальные консоли для запуска полноэкранных командных сессий.
Если на удалённой машине не установлен терминальный мультиплексор, единственными способами многозадачности через SSH остаются управление процессами или открытие нескольких соединений. Первое может быть довольно обременительным, а второе требует больше ресурсов. Гораздо удобнее использовать одно соединение, если это возможно. Если вам нужно запустить команду и одновременно обратиться к справочной странице, вы можете открыть оболочку в одном окне и справочную страницу в другом. Многие терминальные мультиплексоры позволяют отображать несколько окон на одном экране. Это похоже на использование менеджера окон с разделением экрана.
Терминальные мультиплексоры особенно полезны, если вы часто работаете с удалёнными машинами, такими как веб-серверы, shell-аккаунты или домашние серверы. Если вы в основном используете настольный компьютер, вам будет удобнее воспользоваться несколькими окнами терминалов или вкладками. Если вам необходимо, чтобы ваши терминальные окна выглядели аккуратно, рассмотрите возможность использования менеджера окон с разделением экрана.
Какие популярные терминальные мультиплексоры существуют?
Существует несколько терминальных мультиплексоров, которые можно использовать на вашей Linux-системе.
GNU Screen: Один из самых старых терминальных мультиплексоров, появившийся ещё до Linux. GNU Screen существует с 1987 года. Даже в 80-х, когда работа с рабочими станциями только начинала набирать популярность, многие пользователи оставались привязанными к терминалам с текстовым интерфейсом. Screen значительно упростил жизнь многим из них, предложив возможность разделять экран на несколько окон терминалов. Кроме того, он ввёл концепцию отсоединения и повторного подключения к сессиям.
Это было настоящим спасением для людей, подключающихся к удалённым системам через модемы. Хотя я не пользовался shell-аккаунтами в их расцвет, я помню времена телефонных соединений, и это было довольно раздражающе, когда мой модем находился на общей линии и кто-то снимал трубку.
GNU Screen долгое время пользовался популярностью, пока в 21-м веке не появились конкуренты.
tmux: первоначально разработанный в рамках проекта OpenBSD, он, кажется, затмил GNU Screen как самый популярный терминальный мультиплексор, оказавшись на почти всех Unix-подобных системах.
Byobu: изначально созданный как форк GNU Screen для Ubuntu, название происходит от японского слова, означающего складной декоративный экран. Со временем он стал больше ориентироваться на расширение функций tmux, чем на GNU Screen.
Как использовать терминальный мультиплексор?
Прежде чем начать работу с терминальным мультиплексором, его нужно установить. Я продемонстрирую это на примере tmux, так как он является моим любимым мультиплексором.
Как использовать tmux в Linux (и почему он лучше, чем Screen)
Действительно ли команда tmux в Linux лучше, чем screen? Давайте выясним.
tmux доступен в большинстве менеджеров пакетов основных дистрибутивов Linux. Я возьму Debian/Ubuntu в качестве примера:
Теперь, когда 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. Чтобы повторно подключиться после отсоединения, достаточно просто ввести команду в командной строке:
Я могу копировать и вставлять между сессиями, используя "режим копирования", но чаще всего предпочитаю функции копирования и вставки, встроенные в свою оконную систему.
Хотя терминальные мультиплексоры могут показаться сложными, они невероятно полезны, если вы активно используете удаленные Linux-устройства. Они позволяют разделить одну терминальную сессию на несколько и оставаться подключённым к вашему серверу, даже если ваше соединение прерывается. Использование терминального мультиплексора, такого как tmux, может сделать ваши онлайн-сессии более продуктивными и даже интересными.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Вы также можете найти наши материалы в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru