Сталкивались ли вы когда-нибудь с ситуацией, когда вы выполняете длительное задание на удаленной машине, и вдруг ваше соединение обрывается, сеанс SSH завершается, и ваша работа теряется. Ну, это случалось с каждым из нас в какой-то момент, не так ли? К счастью, существует утилита под названием screen, которая позволяет возобновить сеанс.
Введение
Screen или GNU Screen - это терминальный мультиплексор. Другими словами, это означает, что вы можете начать сеанс экрана и затем открыть любое количество окон (виртуальных терминалов) внутри этого сеанса. Процессы, запущенные в Screen, будут продолжать работать, когда их окно не видно, даже если вы отключитесь от сети.
Установка Linux GNU Screen
Пакет screen предустановлен в большинстве дистрибутивов Linux. Вы можете проверить, установлен ли он в вашей системе, набрав:
1 | screen --version |
Если screen не установлен в вашей системе, вы можете легко установить его с помощью менеджера пакетов вашего дистрибутива.
Установка Linux Screen в Ubuntu и Debian
1 2 | sudo apt update sudo apt install screen |
Установка Linux Screen в CentOS и Fedora
1 | sudo yum install screen |
Запуск Linux Screen
Чтобы запустить сеанс экрана, просто введите screen в консоли:
1 | screen |
Это откроет сеанс экрана, создаст новое окно и запустит оболочку в этом окне.
Теперь, когда вы открыли сеанс screen, вы можете получить список команд, набрав:
Ctrl+a ?
Запуск именованного сеанса
Именованные сеансы полезны, когда вы запускаете несколько экранных сеансов. Чтобы создать именованный сеанс, выполните команду screen со следующими аргументами:
1 | screen -S <имя_сеанса> |
Всегда полезно выбирать описательное имя сеанса.
Работа с экранными окнами Linux
Когда вы запускаете новый сеанс экрана, создается одно окно с оболочкой.
Вы можете иметь несколько окон внутри сеанса Screen.
Чтобы создать новое окно с оболочкой, наберите Ctrl+a c, ему будет присвоен первый доступный номер из диапазона 0...9.
Ниже приведены некоторые наиболее распространенные команды для управления окнами Linux Screen:
- 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 Закрыть текущий регион.
Выход из экранной сессии Linux
Вы можете выйти из экранной сессии в любое время, набрав:
Ctrl+a d
Программа, запущенная в экранной сессии, будет продолжать работать после того, как вы отсоединитесь от сессии.
Повторное подключение к экрану Linux
Чтобы возобновить сеанс работы с экраном, выполните следующую команду:
1 | screen -r |
Если на вашей машине запущено несколько экранных сессий, вам нужно добавить идентификатор экранной сессии после переключателя r.
Чтобы найти идентификатор сеанса, перечислите текущие запущенные сеансы экрана с помощью:
1 | screen -ls |
Есть экраны на:
1 2 3 4 | There are screens on: 2117388.pts-0.v-stand (07/07/2022 10:04:14 AM) (Attached) 2116714.pts-0.v-stand (07/07/2022 10:02:42 AM) (Detached) 2 Sockets in /run/screen/S-root |
Если вы хотите восстановить экран 2116714.pts-0, введите следующую команду:
1 | screen -r 2116714 |
Настройка экрана Linux
Когда запускается screen, он считывает свои параметры конфигурации из /etc/screenrc и ~/.screenrc, если файл присутствует. Мы можем изменить параметры Screen по умолчанию в соответствии с нашими предпочтениями, используя файл .screenrc.
Вот пример конфигурации ~/.screenrc с настроенной строкой состояния и несколькими дополнительными опциями:
1 | nano ~/.screenrc |
1 2 3 4 5 6 7 8 9 10 11 12 | # Отключить приветственное сообщение 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}]' |