Оглавление
Screen — это программа для «уплотнения» (мультиплекса) физических консолей. Суть в том, что несколько процессов (как правило интерактивных шеллов) могут работать в одном окне консоли. То есть эта программа позволяет пользователю иметь несколько экземпляров терминалов внутри одного терминала этого менеджера окон. Речь идёт не о вкладках, а о перемещении терминалов в фон. Одним из эффектов работы screen является то, что при закрытии окна терминала, процесс продолжает работу.
Приложение screen очень полезно если вы имеете дело с несколькими программами из интерфейса командной строки, а также для отделения программ от оболочки терминала. Она также позволяет вам делиться вашими сессиями с другими пользователями и отсоединять/подсоединять сессии терминала.
О Linux Screen
Поначалу это может показаться пугающим, но освоив Linux Screen, предоставляются безграничные возможности. Эффективное использование системных ресурсов делает его незаменимым инструментом.
Linux Screen — это терминальное приложение, разработанное проектом GNU. Часто официальная документация называет это GNU Screen. Linux Screen имеет четкую цель — терминальное мультиплексирование.
Другими словами, Screen делит физический терминал на несколько виртуальных сессий. Таким образом, останавливает и суммирует активность в них.
Screen работает следующим образом — если вы работаете в терминальной сессии во время использования Screen, при выключении компьютера, он сохранится в этот момент. Когда к терминалу будет произведен повторный доступ, терминал вернется к экрану, на котором он находился прямо перед выключением.
Использование экрана является фундаментальным навыком. Возможно, он не наполнен сложными технологиями, но каждый пользователь Linux должен знать, как его использовать.
Установка Linux Screen
Screen обычно устанавливается по умолчанию во всех основных дистрибутивах Linux. Если ваша система не имеет предустановленной системы, то это не проблема. Установка проста.
Во-первых, нам нужно подключиться к нашему серверу, используя SSH. Для этого запустите:
ssh your-user @ server
Во-втрых, если вы используете Linux на своем компьютере, просто откройте терминал из главного меню.
В случае Debian, Ubuntu, Linux Mint и его производных вы можете выполнить следующую команду:
sudo apt install screen
В конце установки мы можем проверить текущую версию, используя следующую командную строку:
screen —version
Запуск screen в первый раз
Просто наберите screen в приглашении командной строки:
screen
Будет выведена информация о программе — нажмите ENTER, чтобы её скрыть. Затем приглашение командной строки вернётся в точно такое же, как было и ранее.
Справка по параметрам screen
Когда вы вошли в screen, вы можете делать вашу обычную работу как будто бы вы в обычном окружении командной строки. Программа screen расширяет функциольность за счёт своих команд (параметров).
Нажмите Ctrl-A, а затем ? (то есть Shift+/). Затем вы увидите все команды (параметры) screen.
Command key: ^A Literal ^A: a break ^B b dumptermcap . info i meta a pow_detach D reset Z title A xoff ^S s clear C fit F kill K k monitor M prev ^H ^P p ^? screen ^C c vbell ^G xon ^Q q colon : flow ^F f lastmsg ^M m next ^@ ^N sp n quit select ‘ version v copy ^[ [ focus ^I license , number N readbuf < silence _ width W detach ^D d hardcopy h lockscreen ^X x only Q redisplay ^L l split S windows ^W w digraph ^V help ? log H other ^A remove X suspend ^Z z wrap ^R r displays * history { } login L pow_break B removebuf = time ^T t writebuf > ^] paste . ” windowlist -b – select – 0 select 0 1 select 1 2 select 2 3 select 3 4 select 4 5 select 5 6 select 6 7 select 7 8 select 8 9 select 9 I login on O login off ] paste . | split -v :kB: focus prev
Чтобы выйти из экрана справки, нажмите Пробел или Enter.
Отсоединение процесса от консоли в screen
Одним из преимуществ screen является возможность отсоединить от консоли процесс, который запущен внутри screen. Далее вы можете даже закрыть консоль (или отключиться от SSH) — процесс всё равно продолжит свою работу. Затем вы можете восстановить окно консоли — вы увидите, что программа всё это время работала и её данные не потеряны.
Пример сценария: вы работаете по SSH на вашем сервере. Вам нужно запустить программу, выполнение которой требует много времени. Это может быть скачивание большого патча для системы с помощью wget или любая длительная команда. В качестве примера я возьму обычный ping. Предположим мне нужно проверить качество связи с помощью ping на протяжении двух часов. Если я отключусь от SSH или связь будет потеряна случайно, то тогда процесс выполнения команды в консоли будет остановлен и нужно будет вновь начинать сначала. Чтобы этого избежать, мы можем использовать screen для отсоединения процесса от консоли.
Рассмотрим на примере конкретных команд.
Вначале входим в screen:
screen
Затем я запускаю пинг:
ping ya.ru
В процессе работы программы, мы можем нажать Ctrl-a и d. Вывод от программы прекратиться, мы увидим примерно следующую информацию:
[detached from 13677.pts-2.HackWare]Повторное подсоединение консоли с запущенным процессом к screen
После отсоединения процесса и закрытия screens, вы можете отключиться от сервера, то есть закрыть SSH сессию и заняться другими делами. Затем вы можете подключиться к SSH снова — причём, возможно даже с другого компьютера. После этого вы можете увидеть прогресс выполнения вашего процесса (пинг, загрузка, что угодно). Чтобы это сделать, нужно восстановить screen. Для этого запустите следующую команду:
screen -r
И вы увидите, что процесс, который вы здесь оставили, всё ещё запущен.
Когда у вас больше чем одна сессия screen, то вам нужно будет ввести ID (идентификатор) сессии screen. Используйте screen -ls чтобы показать, как много сессий доступно:
Пример вывода:
There are screens on: 13786.pts-2.HackWare (Detached) 13677.pts-2.HackWare (Detached) 2 Sockets in /run/screens/S-mial.
Если вы хотите восстановить сессию screen 13786.pts-2.HackWare, тогда наберите следующую команду:
screen -r 13786
Использование нескольких screen
Когда нужен больше чем один screen для выполнения работы, это возможно? Да, можно одновременно работать с несколькими screen. Вы можете запустить несколько окон screen одновременно — есть два способа сделать это.
Во-первых, вы можете отсоединить первый экран screen для запуска другого screen в реальном терминале.
Во-вторых, вы можете делать вложенные экраны screen.
Как установить экран
Экран поставляется с предустановленной на некоторых из популярных дистрибутивов. Вы можете проверить установлен он или нет на сервере с помощью следующей команды
screen -v Screen version 4.00.03 (FAU)
Если у вас нет экрана к VPS, вы можете легко установить его с помощью менеджера пакетов, предоставляемой с операционной системой.
Как начать сеанс экрана
Вы можете начать экран, набрав слово “screen” в командной строке и новый сеанс экран будет запущен, который выглядит так же, как в командной строке
screen
Это хорошая практика, чтобы начать занятия экрана с описательными именами, так что вы можете легко вспомнить, какой процесс выполняется в сеансе. Чтобы создать новый сеанс с именем сеанса выполните следующую команду
screen -S name
и заменить ‘name‘ с понятным названием для вашей сессии.
Отсоединить экран от сессии
Для того, чтобы отключиться от текущего сеанса экрана вы можете нажать клавишу ‘Ctrl-A‘ и ‘ D‘ на клавиатуре. Все сеансы экрана будут по- прежнему активны, и вы можете повторно подсоединиться к ним в любое время позже.
Заново на экран сессии
Если вы оторваны от сеанса или ваше соединение прерывается по какой-то причине, вы можете легко повторно подсоединиться, выполнив следующую команду:
screen -r
Если у вас есть несколько сеансов экрана вы можете перечислить их с ‘ ls ‘
screen -ls There are screens on: 7880.session (Detached) 7934.session2 (Detached) 7907.session1 (Detached) 3 Sockets in /var/run/screen/S-root.
В нашем примере, у нас есть три активных сеансов экрана. Итак, если вы хотите восстановить сеанс “session2”, вы можете выполнить
screen -r 7934
или вы можете использовать имя экрана
screen -r -S session2
Завершить сеанс экрана
Есть несколько способов, чтобы завершить сеанс экрана. Вы можете сделать это, нажав ‘Ctrl‘ + ‘ D‘ на клавиатуре или с помощью команды командной строки ‘exit‘.
Для того чтобы увидеть все полезные свойства экрана команды вы можете проверить man page screen.
man screen NAME screen – screen manager with VT100/ANSI terminal emulation SYNOPSIS screen [ -options ] [ cmd [ args ] ] screen -r [[pid.]tty[.host]] screen -r sessionowner/[[pid.]tty[.host]]
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Установка утилиты screen
Разница в инсталляции программы на разных дистрибутивах заключается в программах управления пакетами и их командами.
Чтобы установить screen в Ubuntu, Linux Mint, Deepin и других систем семейства Debian, используйте команду apt:
sudo apt install screen
В Manjaro, Antergos и других Arch-подобных ОС screen располагается в AUR, поэтому используйте соответствующую программу управления пакетами, например aurman:
aurman -S screen
Для инсталляции screen в системах на основе Red Hat (например Fedora и CentOS) используйте утилиту dnf:
dnf install screen
Основы работы команды screen
Принцип работы GNU/Linux в целом заключается в использовании небольших утилит, которые делают что-то одно, но хорошо. И эта программа — не исключение.
Команда screen Linux является консольной программой и имеет однозначное определение, соответствующее названию, — это оконный менеджер, разделяющий один физический терминал между несколькими процессами. Подходит для прямого либо удалённого администрирования.
Возможности программы
Screen позволяет переключаться между терминалами, в которых выполняются процессы, не прерывая их. Это особенно эффективно, когда необходимо производить сборку/установку ПО и мониторить дисковое пространство или использовать аппаратные ресурсы.
Screen может разделять текущий терминал на меньшее количество окон с возможностью запуска в них того же или других терминалов. Это ещё больше упрощает вышеописанную задачу, особенно при использовании больших мониторов.
Также к одной сессии screen может подключаться несколько пользователей. Это эффективно при обучении персонала.
Основные команды screen
Откройте терминал. Для запуска первого окна наберите:–
screen
Создастся новая сессия программы и появится приветственное сообщение. Для его закрытия нужно нажать Space или Enter.
Все управляющие команды начинаются с комбинации клавиш Ctrl + a, затем следует буква или сочетание клавиш. Буквы разных регистров выполняют разные команды. Также сочетания можно заменять текстом. Для его ввода нажмите Ctrl + a и :, после чего вводите текст.
Например, чтобы создать новое окно, нажмите по очереди сочетание Ctrl + a и затем c. Для просмотра списка созданных окон нажмите Ctrl + a и w.
Для перехода в любое из созданных окон сессии используется комбинация Ctrl + a и номер, который за ним закреплён, или Ctrl + a и “, после чего нужно выбрать стрелками необходимое. Для последовательного перехода используйте Ctrl + a и n (следующее окно) или p (предыдущее окно).
Чтобы разделить экран по горизонтали, нажмите Ctrl + a и S. Например, для разделения окна по горизонтали напишите split.
Будет создано новое окно снизу от текущего, и оно не становится активным. Чтобы разделить по вертикали, нажмите Ctrl + a и | (или введите split -v).
Были созданы новые пустые окна. Для переключения между ними используйте Ctrl + a и Tab (или напишите focus). Положение курсора указывает, какое окно является активным в данный момент. Для скрытия окна используйте Ctrl + a и X (или введите remove).
Чтобы запустить в новом окне терминал, нажмите Ctr + a и c (или наберите screen).
Чтобы скрыть все окна и оставить только текущее, используйте Ctrl + a и Q (или напишите only).
Переименовать окно можно с помощью Ctrl + a и A. Внизу появится строка с возможностью заменить старое название.
Чтобы скрыть все окна сессии, нажмите Ctrl + a и . Подтвердите решение нажатием y. Для выхода из менеджера окон нажмите Ctrl + a и d.
Команда screen обладает большим набором горячих клавиш. Полный их список можно посмотреть с помощью Ctrl + a и ?.
При создании новой сессии screen можно задать ей имя. Таким образом можно создать несколько сессий. Чтобы сделать это, используйте параметр -S, после которого укажите название.
screen -S name-of-screen
Посмотреть список запущенных сессий можно командой
screen -ls
Строка, идентифицирующая сессию, состоит из нескольких полей: id, название и статус.
Значение id отображается в списке всех запущенных процессов. Это означает, что его можно завершить с помощью команды kill. Завершить работу текущего окна можно с помощью комбинации Ctrl+a и ky.
Статус может иметь два состояния: Attached (задействован) и Detached (незадействован). Второе состояние у сессий, в которых ещё не происходили никакие процессы.
Чтобы перейти в нужную сессию, следует указать параметру -r её id или название.
screen -r 23505
Это всё основные команды screen Linux.
Как пользоваться screen Linux
Теперь давайте рассмотрим, как пользоваться screen Linux более подробно.
Пример 1. Необходимо отслеживать изменения файла в реальном времени. Для этого в одном окне будем вносить изменения в новый файл, а в другом — отображать файл командой tail с опцией -f:
При стирании содержимого показывается сообщение, что файл усечён, при этом этот текст в него, конечно, не записывается.
Пример 2. Необходимо отслеживать размер каталога в реальном времени. В одном окне записываем данные, в другом — отображаем, как изменяется размер домашнего каталога командой watch с задержкой в две секунды.
Завершение
Очень важно научиться устанавливать и использовать Linux Screen, особенно если вы работаете с администрацией сервера. Мы описали как начать интегрировать его в свой рабочий процесс.
[spoiler title=”Источники”]- https://ZaLinux.ru/?p=3089
- https://linuxvsem.ru/programs/screen-linux
- https://andreyex.ru/operacionnaya-sistema-linux/osnovy-ispolzovaniya-komandy-screen-i-primery-v-linux/
- https://losst.ru/komanda-screen-linux