Screen — это полноэкранный оконный менеджер, который мультиплексирует физический терминал между несколькими процессами, обычно интерактивными оболочками.

Screen позволяет переключаться между терминалами, в которых выполняются процессы, не прерывая их. Это особенно эффективно, когда необходимо производить сборку/установку ПО и мониторить дисковое пространство или использовать аппаратные ресурсы.

Screen может разделять текущий терминал на несколько окон с возможностью запуска в них того же или других терминалов. Это ещё больше упрощает вышеописанную задачу, особенно при использовании больших мониторов.

Установка Screen

Чтобы установить screen на ubuntu, используйте эту команду:
apt-get install screen
Чтобы установить screen на centos, используйте эту команду:
yum install screen

Начало работы с Screen

Чтобы запустить Screen, просто введите команду, как показано ниже, и нажмите Enter:

screen

screen

Вы остались в командной строке, и, похоже, ничего особенного не произошло. Однако теперь вы запускаете оболочку внутри мультиплексного эмулятора терминала. Почему это хорошо? Что ж, давайте начнем процесс, который займет много времени. Мы загрузим исходный код последней версии ядра Linux и перенаправим его в файл с именем latest_kernel.zip.

curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.13.4.tar.xz > latest_kernel.zip
Наша загрузка начинается, и вывод curl показывает нам прогресс.

curl

Чтобы отключиться от текущего экрана, используйте комбинацию клавиш «Ctrl + a», а затем нажмите клавишу «d».

screen

Процесс загрузки все еще продолжается, но окно, показывающее загрузку, скрыто. Вы вернетесь в окно терминала, из которого вы запустили сеанс экрана. Появится сообщение о том, что экранное окно с меткой 48079.pts-0.TechSupport было отключено.

Вам понадобится номер от начала имени окна, чтобы прикрепить его заново. Если вы его забудете, вы всегда можете использовать параметр -ls (список), как показано ниже, чтобы получить список отсоединенных окон:

screen -ls
Когда вы будете готовы, вы можете использовать параметр -r (повторное подключение) и номер сеанса, чтобы повторно подключить его, например:
screen -r 48079
Окно, которое работало в фоновом режиме, теперь возвращается в окно вашего терминала, как будто оно никогда не покидало его.

screen

Если это процесс, который дойдет до своего завершения, он в конечном итоге будет завершен. Если это непрерывный процесс, вы в конечном итоге захотите его прекратить. В любом случае, когда процесс завершится, вы можете ввести exit для выхода с экрана. Кроме того, вы можете нажать «Ctrl + a», а затем «k», чтобы принудительно закрыть окно.

screen

Вы вернетесь в предыдущее окно терминала, в котором по-прежнему будет отображаться команда, которую вы использовали для повторного присоединения окна. Поскольку мы закрыли наше единственное отдельное окно, мы получаем сообщение о завершении работы Screen.

Использование имен сеансов Screen

Вы можете использовать параметр -S (имя сеанса) для присвоения имени сеансу Screen. Если вы используете запоминающееся имя, а не числовое обозначение сеанса, будет удобнее повторно подключиться к сеансу. Мы вводим следующее, чтобы назвать нашу сессию «bigfile»:

screen -S bigfile

Когда Screen запускает нашу сессию, мы видим пустое окно с командной строкой. Мы собираемся загрузить большой файл, поэтому мы можем использовать в качестве примера длительный процесс.

Набираем следующее:
curl https://speed.hetzner.de/10GB.bin > bigfile.zip
Когда начинается загрузка, мы нажимаем Ctrl + a, а затем нажимаем d, чтобы отключить сеанс. Мы вводим  команду screen с параметром -ls (список), чтобы увидеть детали отключенного сеанса:
screen -ls

screen -ls

За числовым идентификатором (48804) мы видим имя нашей сессии (bigfile). Мы вводим следующее, включая имя сеанса, чтобы повторно присоединить его:

screen -r bigfile

Мы повторно подключаемся к нашему окну загрузки и видим, что длительная загрузка все еще выполняется.

screen

Использование Screen с несколькими окнами

До сих пор мы использовали Screen для помещения одного процесса в фоновый режим в отдельном окне. Однако Screen способен на гораздо большее. Теперь мы запустим несколько процессов, которые позволят нам отслеживать некоторые аспекты работы нашего компьютера.

Мы вводим следующую команду, чтобы начать сеанс Screen под названием “monitor”:

screen -S monitor
В командной строке в нашем сеансе нового окна мы запустим dmesg и воспользуемся параметрами -H (удобочитаемы) и -w (ждать новых сообщений). Это отобразит сообщения буфера ядра. Новые сообщения будут появляться по мере их появления.
Набираем следующее:
dmesg -H -w

Появятся существующие сообщения. Мы не возвращаемся в командную строку, потому что dmseg ожидает новых сообщений и будет отображать их по мере их поступления.

Мы хотим запустить другое приложение, поэтому нам нужно новое экранное окно. Нажимаем «Ctrl + а», а затем «с», чтобы создать новое окно. Мы собираемся использовать команду watch для многократного запуска vmstat, чтобы получать часто обновляемое отображение использования виртуальной памяти на нашем компьютере.

В новой командной строке мы вводим следующее:

watch vmstat
Вывод vmstat появляется и обновляется каждые две секунды.

Теперь два наших процесса работают. Чтобы переключаться между окнами Screen, вы нажимаете «Ctrl + a» и номер окна. Первое, что мы создали, — это нулевое окно (0), следующее — окно 1 и так далее. Чтобы перейти к первому окну (dmesg), мы нажимаем «Ctrl + a» и «0».

Если мы нажмем Ctrl + a и 1, это вернет нас в окно vmstat.

Мы можем нажать Ctrl + a, а затем d, чтобы отключиться от этого сеанса, затем мы можем подключиться позже. Обе сессии по-прежнему будут работать. Чтобы переключаться между окнами, мы нажимаем «Ctrl + a» и номер (0 или 1) окна, в которое хотим переключиться.

Перейдем к следующему шагу и просмотрим обе сессии Screen в одном окне.
Для этого нажимаем «Ctrl + a», а затем «Shift + S» (требуется заглавная буква «S»).
Окно делится на две «области».
screen
В верхней области по-прежнему отображается vmstat, а в нижней — пусто. Курсор выделен на скриншоте выше. Чтобы переместить его в нижнюю область, нажимаем «Ctrl + a», а затем Tab.

Курсор переместится в нижнюю область, которая на самом деле представляет собой просто пустое место. Это не оболочка, поэтому мы не можем в ней ничего вводить. Чтобы получить удобное отображение, мы нажимаем «Ctrl + a», а затем нажимаем «0», чтобы отобразить окно dmesg в этой области.

screen

Это дает нам оба вывода запущенных ранее команд в одном разделенном окне. Если мы нажмем «Ctrl + a» и «d», чтобы отсоединить окно, а затем снова присоединить его, мы потеряем представление с разделенной панелью. Однако мы можем восстановить его с помощью следующих сочетаний клавиш:

Ctrl+A, S: Разделить окно по горизонтали.
Ctrl+A, Tab: Перейти в нижнюю область.
Ctrl+A, 0: Отображение нулевого окна в нижней части.

Мы можем пойти еще дальше. Теперь разделим нижнюю панель по вертикали и добавим на экран третий процесс. Когда курсор находится в нижней части, мы нажимаем «Ctrl + a» и «c», чтобы создать новое окно с оболочкой в нем. Нижняя область отображает новое окно и дает нам командную строку.

Затем мы запускаем команду df, чтобы проверить использование файловой системы:

df

Когда мы видим, что df запущен, мы нажимаем «Ctrl + a» и вертикальную черту (|). Это разделит нижнюю часть по вертикали. Нажимаем «Ctrl + a» и «Tab», чтобы перейти в новую область. Затем мы нажимаем «Ctrl + a» и «0», чтобы отобразить окно dmesg.

screen

Также вы можете перемещаться из области в область и добавлять вертикальные или горизонтальные разделения. Вот еще несколько полезных комбинаций клавиш:

Ctrl+A: Переходите назад и вперед между текущей и предыдущим областями.
Ctrl+A, Q: Закрыть все области, кроме текущей.
Ctrl+A, X: Закрыть текущую область.

Совместное использование сеанса Screen

Вы также можете использовать сеанс screen, чтобы два человека могли видеть одно и то же окно и взаимодействовать с ним. Допустим, кто-то хочет подключиться к нашему серверу Ubuntu.

Он напечатал следующее:

ssh [email protected]

После подключения он запускает сеанс Screen под названием «ssh-share», используя параметр -S (имя сеанса). Он также использует параметры -d (отсоединение) и -m (принудительное создание) для создания нового сеанса экрана, который уже отсоединен.

Он набирает следующие:

screen -d -m -S ssh-share

Он набирает следующее, используя параметр -x (многоэкранный режим) для подключения сеанса:

screen -x ssh-share

На другом компьютере другой человек подключается к компьютеру Ubuntu с теми же учетными данными, как показано ниже:

ssh [email protected]

После подключения он набирает команду Screen и использует параметр -X (многоэкранный режим), чтобы присоединиться к одному и тому же оконному сеансу, например:

screen -X ssh-share

Теперь все, что напечатает один из них, увидит другой. Например, когда один человек запускает команду nslookup, они оба видят ее как напечатанную, так и ее вывод.

Оба человека теперь совместно используют сеанс экрана, который выполняется на удаленном компьютере с Ubuntu.

Для программного обеспечения, впервые увидевшего свет в 1987 году, Screen по-прежнему обеспечивает хорошую производительность. Время на ознакомление с ним будет потраченным не зря!

Теги: