Сейчас вы точно прочувствуете важное команды screen. Бывало ли у вас такое, что вы выполняете (очень долго) команду в консоли - CLI на удаленной машине, будучи подключенным через SSH? Команда долго выполняется и близится к завершению как вдруг пропадает подключение, рвется SSH подключение и все, что вы делали - пропало?
Как пользоваться утилитой screen в Linux?
Прости, что напомнили. Знаем, это болезненно. Что же, вытрем слезы. Для этих ситуаций есть команда screen о которой мы и поговорим.
Немножко теории
Так называемый screen это терминальный мультиплексор (нас тоже пугает это слово). Другими словами, оно дает нам возможность внутри действующей сессии открыть сколько угодно много виртуальных окон/терминалов. Что важно - процесс, запущенный внутри сессии через screen, будет продолжаться даже тогда, когда вы отключитесь от самой первой сессии.
Установка screen в Linux
Вообще, пакет screen предустановлен на большинстве современных Linux - дистров. Проверить можно командой:
screen --version Screen version 4.00.03 (FAU) 23-Oct-06
Если случилось так, что у вас его нет - это можно быстро исправить простой установкой.
Установка screen в Ubuntu и Debian
apt install screen
Установка screen в CentOS и Fedora
yum install screen
Запуск screen в Linux
Чтобы запустить screen в консоли, просто наберите screen. Что может быть проще, не правда ли?
screen
У вас откроется новая сессия в новом окне. Уже здесь вы можете вводить все нужные shell команды. Находясь в режиме скрина (screen) вы можете посмотреть список доступных вам команд управления этим режимом. Вот так:
Ctrl+a и ?
Если не получается нажать указанную выше комбинацию, можно поступить проще: нажмите отдельно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 под себя. Профит!
Получите бесплатные уроки на наших курсах
- 1С-разработчик с нуля
- Фронтенд с нуля
- iOS-разработчик с нуля
- RabbitMQ для разработчиков и DevOps
- Этичный хакинг
