В следующей статье объясняется, почему вам может понадобиться такой инструмент, как Screen, и многие общие команды, используемые с популярным мультиплексором терминалов. Если вам нужны только команды, пропустите введение.
Недавно я пытался разместить серверную часть Node.js моего веб-приложения Spotlist (которое вы можете найти на https://www.spotlist.net/). Раньше я работал с AWS, поэтому решил разместить его на экземпляре AWS EC2. Я создал, настроил и запустил экземпляр на базе Linux, и с небольшими трудностями я смог получить доступ к своему серверному API из моего клиента.
«Это было легко», — подумал я.
Пару часов спустя я выключил свой MacBook и закрыл все запущенные программы, включая все открытые терминалы. Один из этих терминалов был подключен к моему экземпляру AWS EC2, так как я использовал его для установки и запуска моего бэкэнда Spotlist.
Когда я в следующий раз попытался продолжить тестирование Spotlist, серверная часть больше не отвечала на мои вызовы API. Закрыв свой терминал, подключенный к экземпляру EC2, я также прекратил все, что на нем работало, в частности, мой бэкенд. Сначала я думал, что мне придется оставить свой терминал открытым и подключиться к экземпляру навсегда, но почти сразу понял, что это практически невозможно. Вместо этого я отправился на поиски инструментов, которые позволили бы экземпляру EC2 сохраняться, несмотря на отключение сеанса SSH.
Именно тогда я нашел Screen.
Screen (или GNU Screen) — это полноэкранный оконный менеджер, который объединяет физический терминал между несколькими процессами, обычно интерактивными оболочками.
Мои собственные, надеюсь, более понятные слова: screen позволяет создавать и запускать неограниченное количество консольных приложений или консолей в одном терминале. Причина, по которой это работает для нашей конкретной проблемы, заключается в том, что программы в сеансе экрана будут продолжать работать, даже если окно не видно, а также когда весь сеанс экрана отсоединен от пользовательского терминала.
Это позволит мне создать экран на моем экземпляре EC2, запустить мой сервер и закрыть мой терминал, подключенный к экземпляру, зная, что мой сервер (или любые другие программы, которые я выбрал для запуска) продолжит работу.
Установка
Screen по умолчанию установлен во всех основных дистрибутивах Linux. Вы можете убедиться в этом, выполнив следующую команду.
screen -version
Для полного раскрытия, мой экземпляр AWS работает под управлением версии 4.01.
Если экран не установлен на вашем устройстве, вы можете выполнить следующую команду, чтобы установить его.
sudo apt install screen
Создание экрана
Запустить новый сеанс экрана так же просто, как ввести следующую команду:
screen
Теперь мы можем начать использовать этот виртуальный терминал или экран, и в моем случае я просто запустил здесь свой бэкенд.
Поиск экранов
Теоретически мы можем создавать бесконечные экраны и поэтому для просмотра списка всех сеансов открытых экранов мы можем использовать следующую команду:
screen -ls
Я создал несколько экранов и запустил указанную выше команду, вот результат:

Вывод говорит нам, что есть 6 сеансов экрана. Он дает нам имя каждого сеанса экрана и указывает, является ли он присоединенным или отсоединенным.
Как следует из названия, присоединение означает, что какой-то процесс (например, ваш терминал) использует этот сеанс экрана. С другой стороны, отсоединение означает, что кто-то оставил сеанс screen запущенным (и, следовательно, не прервал или не убил его), но отключился от него. Отключение сеанса экрана не означает, что он завершен или что любые программы, работающие на нем, завершены, программы все еще будут работать, и к экрану можно будет снова подключиться.
Присоединение и отсоединение
Если вы откроете окно терминала, скажем, в экземпляре AWS, и наберете screen, чтобы создать новый экран, как указано выше, вы будете автоматически подключены к этому экрану. Затем вы можете запустить нужную программу на экране, и когда вы хотите отключиться от экрана (чтобы закрыть терминал или открыть другой сеанс экрана), вы выполните следующее:
screen -d
Опять же, это не убивает сеанс экрана или любые запущенные на нем программы.
Чтобы повторно подключиться к сеансу экрана, у вас есть несколько вариантов.
Если у вас запущен только один сеанс экрана (но отсоединен), вы можете подключиться к нему с помощью:
screen -r
У вас может быть запущено несколько сеансов экрана, как показано ниже:

Чтобы подключиться к конкретному, вам нужно будет выполнить следующую команду (где «9929.pts-0.ip-172–31–88–159» — имя экрана):
screen -r 9929.pts-0.ip-172–31–88–159
На самом деле вам не нужно быть таким точным, и вы можете просто использовать первый символ имени экрана, если ни один другой экран не использует тот же самый первый символ (в этом случае вы можете использовать первые два…). Поэтому приведенная ниже команда будет иметь тот же эффект:
screen -r 9
Но что, если вы хотите использовать сеанс экрана как можно быстрее? Следующая команда подключится к первому доступному сеансу экрана или создаст новый, если таковой не существует:
screen -x -R
Название экрана
Теперь вам может понравиться имя вроде «9929.pts-0.ip-172–31–88–159», но я предпочитаю более разговорное имя. К счастью, Screen GNU позволяет нам называть наши экраны. Ниже создается экран с пользовательским именем, в данном случае «MyNickName»:
screen -S MyNickName
Оконечные экраны
Если вам когда-нибудь понадобится завершить (или убить) все сеансы экрана, используйте:
killall screen
Хочу больше?
В этой статье рассматриваются только основы экрана и наиболее часто используемые экранные команды. Для получения дополнительных команд посетите https://www.gnu.org/software/screen/