- Tmux vs Screen
- Tmux
- Create Named Sessions with Tmux
- Split Tmux Horizontally
- Split Tmux Vertically
- Screen
- Create a Named Window
- Detach the Session
- Reattach the Session
- Switch Between Windows
- List the Opened Windows
- Splitting Horizontally
- Splitting Vertically
- Conclusion
- About the author
- Karim Buzdar
- Консоль в массы. Переход на светлую сторону. Часть вторая
- Установка
- Базовые сочетания клавиш
- Настройки
- tmux в деле
- Полезные ссылки
- screen vs. tmux
Tmux vs Screen
A Terminal multiplexer is a program that multiplexes the login sessions inside the Terminal. A multiplexer makes life easy for a user by allowing him to have multiple sessions inside a single Terminal window. Users can attach and detach these sessions.
Today, we will discuss the two popular multiplexer tools: Tmux and Screen. The tutorial is supported by examples that include snapshots of commands and their output so that the users can easily grasp the concept of multiplexers.
Without any further ado, let’s get started!
Tmux
We will discuss about Tmux first. Using Tmux (Terminal Multiplexer), you can manage the multiple Terminal sessions simultaneously instead of one. You can easily switch between multiple programs.
Let’s begin by installing Tmux on our machine using the following command:
To launch Tmux, execute this command:
This is how the terminal appears when launched using tmux:
Now that we have seen how to launch tmux, let’s explore how to use it.
Create Named Sessions with Tmux
To launch a named session with Tmux, run the following command:
You can see the name of the session on the bottom left of the Terminal as shown in the following:
Split Tmux Horizontally
It is possible to split the terminal horizontally with Tmux. This can be achieved by pressing the keys on the keyboard like this:
(Ctrl-b) + “You need to press Ctrl and B at a time. Then, lift your finger from ctrl, press shift, and then press “.
If executed properly, your terminal splits like this:
Split Tmux Vertically
Similarly, you can split the terminal vertically as well. To do that, press the following keys on the keyboard:
Press Ctrl and B. Then, lift your finger from Ctrl. Press Shift and then press %.
You can also create more screens using the methods that we followed for Horizontal and Vertical splitting.
Screen
It is now time to explore the Screen. GNU Screen is also a Terminal multiplexer that allows you to manage several Terminal sessions from a single window. Like Tmux, you can also attach/detach your sessions. The best thing about this multiplexer is that it allows you to share your session with other users.
Let’s begin by installing Screen on our system using the following command:
Now, launch the Screen by issuing the following command:
When screen is launched, this is the window that appears:
Press the spacebar to move to the blank screen.
Create a Named Window
To create a named window with Screen, execute this command:
To list down all the opened screens, use this command:
The commands that are listed down both attach and detach the screens:
Detach the Session
To detach the current screen session, use this command:
Reattach the Session
To reattach a screen session that was previously detached, issue the following command:
Switch Between Windows
To switch between windows, use the following key pattern on your keyboard:
List the Opened Windows
All the opened screens can be listed down using the following key pattern:
Ctrl+a ”
Splitting Horizontally
Like Tmux, we can split the terminal with Screen using the following keys:
Splitting Vertically
To split vertically, press the following keys:
Conclusion
In today’s guide, we learned in detail with examples the difference between Tmux and Screen. Both Tools have almost similar usage. We can split the terminal vertically and horizontally using both tools. But which tool is better? It all comes down to the user’s experience. Some users like Tmux better and some are more comfortable with Screen. Tmux, however, is deemed more user friendly than the other. On the other hand, Screen allows a user to share a session with the other users but this feature is missing in Tmux. Which tool do you like the most?
We hope you liked the tutorial.
About the author
Karim Buzdar
Karim Buzdar holds a degree in telecommunication engineering and holds several sysadmin certifications. As an IT engineer and technical author, he writes for various web sites. He blogs at LinuxWays.
Консоль в массы. Переход на светлую сторону. Часть вторая
Довольно долгое время я использовал в своей работе screen. Но со временем он меня перестал устраивать. Я начал искать альтернативы. Такой альтернативой является tmux. На многих порталах его описывают так: «Это тот-же screen, только на стероидах». Сначала я не мог понять почему такое сравнение пока не попробовал. Скажу честно, я на него не с первого раза перешел. Раза три-четыре пробовал, возвращался к screen’у. Но tmux все же победил.
Важный момент. К предыдущей статье я получил немало комментариев с альтернативами screen и tmux. Тут, как говорится, на вкус и цвет карандаши разные. Второй момент, на который хотел обратить внимание, предполагается, что у читателя нет доступа к графической оболочке. Все что есть в его арсенале — терминал (CLI) и набор команд, которыми он может воспользоваться.
Установка
Ну что ж, перейдем к установке tmux. Достаточно выполнить первую команду, чтобы его установить. После этого можно будет его запустить, набрав команду tmux в терминале.
Для более опытных пользователей есть возможность собрать tmux из репозитория или скачать архив себе на компьютер. Как это сделать, описано тут.
Базовые сочетания клавиш
Тут как и в случае со screen’ом, добавлю только ссылку. Дальше берем и начинаем использовать. Заучивать, запоминать не нужно. Единственный нюанс, комбинации клавиш отличаются, но это легко можно поправить через файл настроек.
Настройки
По умолчанию tmux, что называется, «с коробки», настроен довольно качественно. Вам не нужно настраивать положение панели с вкладками, каким цветом их подсвечивать, и другие настройки, как это было в screen. Но если вдруг вам понадобится конфигурационный файл, то возьмите себе на заметку: называться он должен .tmux.conf ; поместить его нужно в домашнюю директорию пользователя.
Хочу поделиться полезной настройкой, без которой мне приходилось создавать заново сессию tmux. Опишу ее более подробно. Рабочая машина у меня под управлением ОС Windows. Для подключения к удаленному серверу используется putty и pagent (для добавления ключей). Когда добавляешь ключ в pagent, нужно вводить пароль (passphrase — вы его указываете при создании ключей ssh). В putty для каждого соединения установлена вот эта галочка:
Такие особенности работы windows + putty + удаленное соединение по ssh. Эта галочка нужна, чтобы работал SSH-agent forwarding.
Так вот, вернемся к проблеме. Если вы вдруг потеряли связь с сетью или в офисе внезапно отключили электричество, то tmux, конечно же, сохранит сессию. И при повторном подключении к этой сессии вежливо попросит ввести пароль для ключа. Так будет каждый раз. Т.е. перестанет работать SSH-agent forwarding. Это можно поправить, если завершить текущую сессию tmux и переподключиться к удаленному серверу. С одной стороны это не так критично.
Но со временем эта проблема доставляет довольно много неудобств и хочется ее решить раз и навсегда. Чтобы решить эту проблему нужно добавить настройки в файл .bashrc , который находится в домашней директории пользователя:
Попробую описать, что происходит, когда вы подключаетесь к удаленному серверу с включенным SSH-agent forwarding. Когда ssh-клиент (в данном случае putty), с включенным SSH-agent forwarding, подсоединяется к серверу, то он создаёт сокет, через который можно получить этот самый ключ. Также он создаёт переменную $SSH_AUTH_SOCK , которая ссылается на этот сокет. Эту переменную наследует запущенный shell (оболочка, которая обрабатывает команды пользователя) в рамках текущей сессии. Кроме этой переменной, создаются еще несколько переменных: $SSH_CLIENT, $SSH_CONNECTION, $SSH_TTY , в которых хранится информация о текущем ssh-подключении. Когда произойдет обрыв связи, то менеджер терминалов, в данном случае tmux, сохранит сессию со старыми значениями этих переменных. И когда мы заново будем подключаться к удаленному серверу, то будет создан новый сокет с новыми значениями. Но они не попадут в старую сессию менеджера терминалов. Поэтому нам нужно дать понять shell, что мы хотим, чтобы он сохранял эти значения и использовал их при повторном подключении, если они есть.
tmux в деле
Пришло время проверить tmux в работе. Мы уже знаем как его запустить. Достаточно набрать tmux .
- Рабочая область. Панель (pane — из документации к tmux).
- Строка состояния. На ней размещаются вкладки и другие элементы.
- Вкладка с именем по умолчанию.
Для этого нам понадобиться репозиторий. Если вы его себе не клонировали на компьютер, то выполните следующую команду:
git clone https://github.com/var-bin/terminalForCoder__WSD.git
Далее запустите tmux. Для начала поработаем с вкладками. Нам понадобится 2-3 вкладки. Чтобы создать новую вкладку, нужно нажать следующие сочетания клавиш:
Ctrl + b, c - создать новую вкладку
Следующим шагом будет переименование вкладок. Для этого используйте:
Ctrl + b, , - переименовать вкладку
Для того, чтобы переключаться между вкладками, воспользуйтесь этими клавишами:
Ctrl + b, int - переключиться на нужную вкладку (int - номер вкладки 0 - 9)
Ctrl + b, w - интерактивное переключение вкладок
С вкладками немного попрактиковались. Теперь давайте разобьем нашу текущую панель на две независимые панели. Обратите внимание на то, что данный layout не будет сохранятся для всех остальных вкладок. Для каждой вкладки tmux создаёт свой независимый layout. Делается это с помощью сочетания клавиш:
Ctrl + b, % - разбить текущую панель на две новых по вертикали
Теперь давайте запустим в той панели, что слева, какую-то утилиту. К примеру, midnight commander (любую другую утилиту) с помощью команды:
Для перемещения между панелями, используйте эти сочетания клавиш:
Ctrl + b, ← ↑ → ↓ - перемещение между панелями
А в той панели, что справа, запустим наше тестовое приложение. Это простой чат, написанный на node.js и socket.io. Этот пример взят с официального сайта socket.io. Единственное, что я добавил — это немного логирования, чтобы мы видели, что оно работает. Для этого нужно перейти в директорию %repoName%/tmux/chat-example . И выполнить команды:
%repoName% — имя директории, в которую был склонирован репозитой.
Если все хорошо, то вы должны увидеть на экране строку:
listening on localhost:3000
После этого запустите браузер и в новой вкладке перейдите по адресу localhost:3000 . Наберите любое сообщение в строке ввода и нажмите Enter . Как видите, все работает и вы можете прочитать это сообщение также и в терминале. В том регионе, где выполняли команду node index.js .
А теперь пришло время сделать то, что мы делали и в предыдущей статье. Сымитируем обрыв связи. Нужно закрыть терминал через крестик. Но при этом не закрывайте браузер. И попробуйте отправить еще несколько сообщений. Все продолжает работать. Это при том, что мы только что закрыли терминал.
Сессию и все процессы, которые были запущены tmux сохранил. Как мы знаем из предыдущей статьи, screen тоже умеет так делать. Давайте подключимся обратно к сессии tmux. Запустите терминал и выполните команду:
Как вы могли заметить, тот layout, который мы создавали раньше (разбивку панелей по вертикали), tmux сохранил. Это огромный плюс по сравнению с тем же screen’ом.
Полезные ссылки
screen vs. tmux
Пришло время сравнить screen и tmux. За время работы и со screen’ом, и c tmux’ом (примерно 2,5 года) я пришел к выводу, что screen’ом если и стоит пользоваться, то только в том случае, если вам недоступен tmux. Т.е. если вы не можете установить себе tmux или собрать его из исходников. Во всех остальных случаях лучше сразу начинать с tmux’а.
screen | tmux |
— Не умеет создавать layout для каждой вкладки — Не умеет сохранять layout, если оборвалась связь или еще что-то там — До версии 4.1 не умел делать разбивку по вертикали — Когда вы создали новый регион, то в нем отдельно нужно создать новое окно (Ctrl+a, c) , выполнить переход в нужную директорию и т.д. — Чтобы удалить регион тоже нужно помучатся Ctrl+a, :remove | + «с коробки» настроен довольно качественно + Не нужно настраивать положение панели с вкладками, как их подсвечивать + Умеет делить экран на панели, как по вертикали, так и по горизонтали + Чтобы закрыть панель, достаточно набрать exit + Умеет держать удаленное соединение * |
Давайте подытожим. Мы рассмотрели еще один из менеджеров терминалов, а именно tmux. Попрактиковались в установке, настройке. Использовали некоторые горячие клавиши. Попробовали tmux на примере. Увидели его преимущества по сравнению с тем же screen’ом.
Кроме screen и tmux есть довольно широкий выбор менеджеров терминалов для разных ОС, ваши личные предпочтения и пожелания.
На этом все. Спасибо за внимание. Кто дочитал до конца, отдельное спасибо. До встречи в следующей статье.