Найти в Дзене
Merion Academy

Как пользоваться утилитой screen в Linux?

Сейчас вы точно прочувствуете важное команды screen. Бывало ли у вас такое, что вы выполняете (очень долго) команду в консоли - CLI на удаленной машине, будучи подключенным через SSH? Команда долго выполняется и близится к завершению как вдруг пропадает подключение, рвется SSH подключение и все, что вы делали - пропало? Прости, что напомнили. Знаем, это болезненно. Что же, вытрем слезы. Для этих ситуаций есть команда screen о которой мы и поговорим. НЕМНОЖКО ТЕОРИИ Так называемый screen это терминальный мультиплексор (нас тоже пугает это слово). Другими словами, оно дает нам возможность внутри действующей сессии открыть сколько угодно много виртуальных окон/терминалов. Что важно - процесс, запущенный внутри сессии через screen, будет продолжаться даже тогда, когда вы отключитесь от самой первой сессии. УСТАНОВКА SCREEN В LINUX Вообще, пакет screen предустановлен на большинстве современных Linux - дистров. Проверить можно командой: screen --version
Screen version 4.00.03 (FAU) 23-Oct-06
Оглавление

Сейчас вы точно прочувствуете важное команды screen. Бывало ли у вас такое, что вы выполняете (очень долго) команду в консоли - CLI на удаленной машине, будучи подключенным через SSH? Команда долго выполняется и близится к завершению как вдруг пропадает подключение, рвется SSH подключение и все, что вы делали - пропало?

Прости, что напомнили. Знаем, это болезненно. Что же, вытрем слезы. Для этих ситуаций есть команда screen о которой мы и поговорим.

НЕМНОЖКО ТЕОРИИ

Так называемый screen это терминальный мультиплексор (нас тоже пугает это слово). Другими словами, оно дает нам возможность внутри действующей сессии открыть сколько угодно много виртуальных окон/терминалов. Что важно - процесс, запущенный внутри сессии через screen, будет продолжаться даже тогда, когда вы отключитесь от самой первой сессии.

УСТАНОВКА SCREEN В LINUX

Вообще, пакет screen предустановлен на большинстве современных Linux - дистров. Проверить можно командой:

screen --version
Screen version 4.00.03 (FAU) 23-Oct-06
screen --version
screen --version

Если случилось так, что у вас его нет - это можно быстро исправить простой установкой.

УСТАНОВКА SCREEN В UBUNTU И DEBIAN

apt install screen

УСТАНОВКА SCREEN В CENTOS И FEDORA

yum install screen

ЗАПУСК SCREEN В LINUX

Чтобы запустить screen в консоли, просто наберите screen. Что может быть проще, не правда ли?

screen

У вас откроется новая сессия в новом окне. Уже здесь вы можете вводить все нужные shell команды. Находясь в режиме скрина (screen) вы можете посмотреть список доступных вам команд управления этим режимом. Вот так:

Ctrl+a и ?
screen список доступных вам команд
screen список доступных вам команд
Если не получается нажать указанную выше комбинацию, можно поступить проще: нажмите отдельно Ctrl+a, отпустите, а затем в консоль наберите ? и нажмите Enter

СЕССИЯ SCREEN С ИМЕНЕМ

Ну очень удобная фича. Если вы делаете несколько процессов параллельно, просто обзовите их так, чтобы потом понять, что и где выполняется. Синтаксис такой:

screen -S имя_сессия_скрин

Например, вы можете запустить ping - замер хоста с 1С и назвать сессию так:

screen -S pings_towards_1C

Всегда используйте скрин именно так. Будет значительно удобнее.

КАК ПРАВИЛЬНО РАБОТАТЬ С ОКНАМИ В WINDOWS

Как мы уже сказали, когда вы создаете новую screen - сессию, вы создадите новое окно с shell оболочкой внутри. И что интересно - внутри скрин сессии вы можете создать множество дополнительных окон. Чтобы это сделать, воспользуйтесь командой (внутри скрина) Ctrl+a и c. Новому окну будет назначен номер от 0 до 9 (первый свободный).

Ниже мы собрали все команды, которые понадобятся вам для управления скринами:

  • Ctrl+a и c - создать дополнительное окно ;
  • Ctrl+a и " - показать список всех имеющихся окон;
  • Ctrl+a и 0 - переключиться на окно с номером 0 (номер может быть иной);
  • Ctrl+a и A - переименовать текущее окно;
  • Ctrl+a и S - разделить окно по горизонтали на две области;
  • Ctrl+a и | - разделить окно по вертикали на две области;
  • Ctrl+a и tab - переключить рабочий фокус на следующую область разделенного окна;
  • Ctrl+a и Ctrl+a - переключить рабочий фокус на предыдущую область разделенного окна;
  • Ctrl+a и Q - закрыть все разделенные области кроме;
  • Ctrl+a и X - закрыть текущую область;

ВЫХОД ИЗ SCREEN СЕССИИ

Вы можете легко выйти из screen - сессии набрав:

Ctrl+a и d

Самое важное: запущенная вами в этот момент команда не остановится и будет продолжать свое выполнение.

ВОЗВРАТ К SCREEN СЕССИИ

Чтобы вернуть к screen - сессии используйте команду:

screen -r

Если у вас запущено больше чем одна screen - сессия, то после ключа r нужно указать ее ID. Узнать его просто с помощью команды:

screen -ls

Вывод этой команды будет выглядеть вот так:

screen -ls
There are screens on:
32328.pings_towards_1C (Detached)
32482.wiki.merionet.ru_is_one_love (Detached)
2 Sockets in /var/run/screen/S-root.

В выводе выше мы выделили ID - сессий. Например, чтобы вернуться к сессии 32328 (pings_towards_1C), дайте команду:

screen -r 32328

НЕМНОЖКО КАСТОМИЗАЦИИ SCREEN ПОД ВАС

Когда screen запускается, он считывает свои конфигурационные параметры из /etc/screenrc и ~/.screenrc, если файл присутствует. Так вот - мы можем легко перенастроить предпочтения использования screen и сделать это в файле .screenrc.

Посмотрите пример с комментариями, как мы закастомили screen для себя:

# Выключаем приветствие
startup_message off

# включаем визуальный звонок
vbell off

# буфер для сохраненных строк делаем 10000
defscrollback 10000

# кастомим строку состояния
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

ТИПОВОЙ СЦЕНАРИЙ ИСПОЛЬЗОВАНИЯ SCREEN

Общий случай, так сказать. Обычно он состоит из следующих шагов:

  • После SSH подключения к серверу, набираем screen;
  • Запускаем интересующую нас команду в режиме screen - сессии;
  • Выполняем команду Ctrl + a и d, чтобы выйти из режима работы с экран-сессией
  • Через какое-то время возвращаемся к запущенному ранее экрану командой screen -r

ВЫВОДЫ

Мы разобрались, как создавать screen сессии, управлять ими внутри, открывая новые окна, выходить из их режима управления (без прекращения выполнения команды), делить горизонтально и вертикально экраны.

Ах да, ещё мы научились кастомизировать screen под себя. Профит!