Поиск по сайту:

Как установить и использовать экран на облачном сервере Ubuntu


Введение

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

Есть много ситуаций, когда создание нескольких окон терминала невозможно или нецелесообразно. Вам может понадобиться управлять несколькими сеансами консоли без запущенного X-сервера, вам может потребоваться доступ ко многим удаленным облачным серверам или вам может потребоваться отслеживать выходные данные работающей программы во время работы над какой-либо другой задачей.

Существуют современные комплексные решения этой проблемы, такие как tmux, но screen является наиболее зрелым из них, и у него есть собственный мощный синтаксис и функции.

Шаг 1 – Установка экрана

В этом руководстве мы будем использовать Ubuntu 22.04, но вне процесса установки все должно быть одинаковым во всех современных дистрибутивах Linux.

Экран часто устанавливается по умолчанию в Ubuntu. Вы также можете использовать apt для обновления исходников пакетов и установки screen:

  1. sudo apt update
  2. sudo apt install screen

Убедитесь, что screen установлен, запустив what screen:

  1. which screen
Output
/usr/bin/screen

Вы можете начать использовать screen на следующем шаге.

Шаг 2 – Использование экрана

Чтобы начать новый сеанс экрана, выполните команду screen.

  1. screen
[secondary_label Output
GNU Screen version 4.09.00 (GNU) 30-Jan-22

Copyright (c) 2018-2020 Alexander Naumov, Amadeusz Slawinski
Copyright (c) 2015-2017 Juergen Weigert, Alexander Naumov, Amadeusz Slawinski
Copyright (c) 2010-2014 Juergen Weigert, Sadrul Habib Chowdhury
Copyright (c) 2008-2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib
Chowdhury
Copyright (c) 1993-2007 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2, or (at your option) any later version.
…
                  [Press Space for next page; Return to end.]

При запуске программы вас встретит страница лицензирования. Просто нажмите Enter, чтобы продолжить.

То, что происходит дальше, может быть удивительным. Нам дают обычную командную строку, и похоже, ничего не произошло. screen не работает правильно? Давайте попробуем быстрое сочетание клавиш, чтобы узнать. Нажмите Ctrl+a, а затем v:

Output
screen 4.09.00 (GNU) 30-Jan-22

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

Сейчас самое время представить, как мы будем управлять экраном. Экран в основном управляется с помощью сочетаний клавиш. Каждому сочетанию клавиш для screen предшествует Ctrl-a (удерживайте клавишу управления, нажимая клавишу \a). Эта последовательность нажатий клавиш сообщает screen что он должен обращать внимание на следующие клавиши, которые мы нажимаем.

Вы уже использовали эту парадигму один раз, когда мы запросили информацию о версии screen. Давайте воспользуемся им для получения дополнительной полезной информации, введя Ctrl-a ?:

Output
Screen key bindings, page 1 of 2. Command key: ^A Literal ^A: a break ^B b license , removebuf = clear C lockscreen ^X x reset Z colon : log H screen ^C c copy ^[ [ login L select ' detach ^D d meta a silence _ digraph ^V monitor M split S displays * next ^@ ^N sp n suspend ^Z z dumptermcap . number N time ^T t fit F only Q title A flow ^F f other ^A vbell ^G focus ^I pow_break B version v hardcopy h pow_detach D width W help ? prev ^H ^P p ^? windows ^W w history { } quit \ wrap ^R r info i readbuf < writebuf > kill K k redisplay ^L l xoff ^S s lastmsg ^M m remove X xon ^Q q [Press Space for next page; Return to end.]

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

Ладно, попробуем что-нибудь повеселее. Давайте запустим в этом окне программу с именем top, которая покажет нам некоторую информацию о наших процессах.

  1. top
Output
top - 16:08:07 up 1:44, 1 user, load average: 0.00, 0.01, 0.05 Tasks: 58 total, 1 running, 57 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 507620k total, 262920k used, 244700k free, 8720k buffers Swap: 0k total, 0k used, 0k free, 224584k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 3384 1836 1288 S 0.0 0.4 0:00.70 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0 5 root 20 0 0 0 0 S 0.0 0.0 0:00.12 kworker/u:0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 7 root RT 0 0 0 0 S 0.0 0.0 0:00.07 watchdog/0 8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset 9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 11 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 12 root 20 0 0 0 0 S 0.0 0.0 0:00.03 sync_supers 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default 14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff 17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khubd 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md

Хорошо, мы сейчас наблюдаем за процессами на нашем VPS. Но что, если нам нужно запустить какие-то команды, чтобы узнать больше информации о программах, которые мы видим? Нам не нужно выходить из \top. Мы можем создать новое окно для запуска этих команд.

Последовательность Ctrl-a c создает для нас новое окно. Теперь мы можем запускать любые команды, которые захотим, не прерывая мониторинг, который мы выполняли в другом окне.

Куда пропало то второе окно? Мы можем вернуться к нему с помощью Ctrl-a n.

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

Ctrl-a p изменяет текущее окно в противоположном направлении. Итак, если у вас есть три окна и вы в настоящее время находитесь в третьем, эта команда переключит вас во второе окно.

Полезным сочетанием клавиш при переключении между одними и теми же двумя окнами является Ctrl-a Ctrl-a.

Эта последовательность перемещает вас к последнему посещенному окну. Итак, в предыдущем примере это вернет вас к третьему окну.

На этом этапе вам может быть интересно, как вы можете отслеживать все окна, которые мы создаем. К счастью, screen поставляется с несколькими различными способами управления различными сеансами. Сначала мы создадим три новых окна, всего четыре окна, а затем попробуем Ctrl-a w, один из инструментов управления окнами в Screen. Введите Ctrl-a c Ctrl-a c Ctrl-a c Ctrl-a w:

Output
0$ bash 1$ bash 2-$ bash 3*$ bash

Мы получаем некоторую полезную информацию от этой команды: список наших текущих окон. Здесь у нас четыре окна. Каждое окно имеет номер, и окна нумеруются, начиная с \0. Текущее окно имеет звездочку рядом с номером.

Итак, вы можете видеть, что сейчас мы находимся в окне № 3 (фактически четвертом окне, потому что первое окно равно 0). Вы можете быстро вернуться к окну №1, используя Ctrl-a 1.

Мы можем использовать порядковый номер, чтобы перейти прямо к нужному окну. Давайте снова посмотрим на наш список окон, используя Ctrl-a w:

Output
0$ bash 1*$ bash 2$ bash 3-$ bash

Как видите, звездочка говорит нам, что сейчас мы находимся в окне №1. Давайте попробуем другой способ переключения окон с помощью Ctrl-a “:

Output
Num Name Flags 0 bash $ 1 bash $ 2 bash $ 3 bash $

На этот раз мы получаем настоящее навигационное меню. Вы можете перемещаться с помощью стрелок вверх и вниз. Переключитесь в окно, нажав Enter.

Это довольно полезно, но прямо сейчас все наши окна называются \bash. Это не очень полезно. Давайте назовем некоторые из наших сессий. Переключитесь на окно, которое вы хотите назвать, например, с помощью Ctrl-a 0 , а затем используйте Ctrl-a A:

Output
Set window's title to: bash

Используя последовательность Ctrl-a, мы можем назвать наши сеансы. Теперь вы можете вернуться к \bash и затем переименовать его как хотите. Мы снова запустим top в окне #0, поэтому назовем его мониторинг.

Проверьте результат с помощью Ctrl-a “:

Output
Num Name Flags 0 monitoring $ 1 bash $ 2 bash $ 3 bash $

Теперь у нас есть более полезная метка для окна #0. Итак, мы знаем, как создавать окна и называть их, но как нам избавиться от них, когда они нам больше не нужны? Мы используем последовательность Ctrl-a k, что означает «убить».

Output
Really kill this window [y/n]

Шаг 3 – Управление сеансами экрана

Если вы хотите выйти из screen и закрыть все окна, вы можете использовать Ctrl-a \.

Output
Really quit and kill all your windows [y/n]

Это уничтожит нашу сессию экрана. Мы потеряем все созданные нами окна и любую незавершенную работу.

Но мы хотим изучить одно из огромных преимуществ использования экрана. Мы не хотим уничтожать сеанс, мы хотим его отсоединить. Отключение позволяет нашим программам в экземпляре экрана продолжать работать, но дает нам доступ обратно к нашему сеансу базовой консоли (тому, с которого мы изначально начали \экран). Сеанс экрана все еще существует, он просто будет управляться в фоновом режиме. Используйте Ctrl-a d для отсоединения.

Output
[detached from 1835.pts-0.Blank]

Итак, наша сессия теперь отсоединена. Как нам вернуться в него?

  1. screen –r

Флаг -r означает повторное подключение. Теперь мы вернулись в нашу экранную сессию. Что, если у нас есть сеансы с несколькими экранами? Что, если бы мы начали сеанс экрана и отсоединили его, а затем начали новый сеанс экрана и также отсоединили его?

Попробуйте запустить screen, затем отсоединиться с помощью Ctrl-a d, затем снова запустить screen, а затем отсоединиться с помощью Ctrl-a d еще раз.

Как сообщить screen, какую сессию прикрепить?

  1. screen –ls
Output
There are screens on: 2171.pts-0.Blank (07/01/2013 05:00:39 PM) (Detached) 1835.pts-0.Blank (07/01/2013 03:50:43 PM) (Detached) 2 Sockets in /var/run/screen/S-justin.

Теперь у нас есть список наших сессий. Мы можем повторно подключить второй, введя его идентификационный номер после флага -r.

  1. screen –r 1835

Что делать, если вы хотите прикрепить сеанс на двух разных компьютерах или терминальных окнах? Вы можете использовать флаг -x, который позволяет вам поделиться сеансом.

  1. screen –x

Шаг 4 – Управление терминалами на экране

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

Чтобы скопировать текст, вы можете использовать Ctrl-a [.

Это даст вам курсор, который вы можете перемещать с помощью клавиш со стрелками или с помощью HJKL. Перейдите туда, где вы хотите начать копирование, и нажмите Enter. Перейдите в конец того места, где вы хотите скопировать, и снова нажмите Enter. Затем текст копируется в буфер обмена.

Следует помнить, что это также механизм прокрутки экрана. Если вам нужно увидеть какой-то текст, который находится за пределами экрана, вы можете нажать Ctrl-a [, а затем прокрутить экран вверх.

Мы можем вставить текст, который мы скопировали с помощью Ctrl-a ].

Еще одна вещь, которую вы, возможно, захотите сделать, это отслеживать программы, которые выполняются в другом окне экрана.

Допустим, вы компилируете что-то в одном окне и хотите знать, когда это будет завершено. Вы можете попросить screen отслеживать это окно на наличие тишины с помощью Ctrl-a _, что сообщит вам, если в течение 30 секунд не было создано никакого вывода.

Давайте попробуем это на другом примере. Давайте сделаем так, чтобы screen сообщал нам, когда наше окно закончило пинговать Google 4 раза.

  1. ping –c 4 www.google.com

Затем введите Ctrl-a _:

Output
The window is now being monitored for 30 sec. Silence.

Теперь мы можем выполнять работу в другом окне и получать оповещения о завершении задачи в этом окне, введя Ctrl-a 1:

Output
Window 2: silence for 30 seconds

Мы также можем сделать обратное и получать оповещения, когда в определенном окне происходит какая-либо активность.

  1. sleep 20 && echo “output”

Затем введите Ctrl-a M.

Output
Window 2 (bash) is now being monitored for all activity.

Теперь мы будем предупреждены, когда команда выдаст результат. Чтобы увидеть результаты, используйте Ctrl-a 1:

Output
Activity in window 2

Допустим, мы собираемся внести некоторые важные изменения и хотим вести журнал всех выполненных нами команд. Мы можем зарегистрировать сеанс с помощью Ctrl-a H.

Output
Creating logfile "screenlog.1".

Области экрана

Если нам нужно увидеть несколько окон одновременно, мы можем использовать что-то, что экран называет «регионами». Мы создаем больше регионов, разделяя текущую область. Чтобы разделить текущую область по горизонтали, мы можем использовать Ctrl-a S.

Это переместит наше текущее окно в верхнюю половину экрана и откроет новую пустую область под ним. Мы можем попасть на нижний экран с помощью Ctrl-a [tab].

Затем мы можем либо создать новое окно в нижней области, либо изменить вид на другое окно обычным способом.

Если мы хотим уничтожить текущий регион, мы можем использовать Ctrl-a X.

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

Если мы хотим сделать вертикальное разделение, мы можем вместо этого использовать Ctrl-a |.

Элементы управления для вертикального разделения такие же, как и для горизонтального разделения. Если мы добавили несколько разных регионов и хотим вернуться к одному региону, мы можем использовать Ctrl-a Q, что уничтожит все регионы, кроме текущего.

Шаг 5 – Использование Byobu с экраном

Отличным улучшением для screen является программа под названием byobu. Он действует как оболочка для screen и обеспечивает улучшенный пользовательский интерфейс. В Ubuntu вы можете установить его с помощью:

  1. sudo apt install byobu

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

  1. byobu-select-backend
Output
Select the byobu backend: 1. tmux 2. screen Choose 1-2 [1]:

Здесь мы можем выбрать screen, чтобы установить его в качестве диспетчера терминалов по умолчанию.

Теперь вместо ввода screen для запуска сеанса вы можете ввести byobu.

  1. byobu

Когда вы набираете Ctrl-a в первый раз, вам нужно сказать byobu, чтобы он распознал это как экранную команду.

Output
Configure Byobu's ctrl-a behavior... When you press ctrl-a in Byobu, do you want it to operate in: (1) Screen mode (GNU Screen's default escape sequence) (2) Emacs mode (go to beginning of line) Note that: - F12 also operates as an escape in Byobu - You can press F9 and choose your escape character - You can run 'byobu-ctrl-a' at any time to change your selection Select [1 or 2]:

Выберите 1, чтобы использовать byobu как обычно.

Интерфейс дает вам много полезной информации, такой как список окон и системная информация. В Ubuntu он даже сообщает вам, сколько пакетов имеет обновления безопасности, с числом, за которым следует восклицательный знак на красном фоне.

Одна вещь, которая отличается между использованием byobu и screen, заключается в том, как byobu фактически управляет сеансами. Если вы снова запустите byobu после отсоединения, он повторно подключит ваш предыдущий сеанс, а не создаст новый.

Чтобы создать новый сеанс, используйте byobu –S:

  1. byobu –S sessionname

Измените sessionname на то, что вы хотите назвать своим новым сеансом. Вы можете увидеть список текущих сессий с помощью:

  1. byobu –ls
Output
There are screens on: 22961.new (07/01/2013 06:42:52 PM) (Detached) 22281.byobu (07/01/2013 06:37:18 PM) (Detached) 2 Sockets in /var/run/screen/S-root.

А если сеансов несколько, при запуске byobu вам будет представлено меню для выбора сеанса, к которому вы хотите подключиться.

  1. byobu
Output
Byobu sessions... 1. screen: 22961.new (07/01/2013 06:42:52 PM) (Detached) 2. screen: 22281.byobu (07/01/2013 06:37:18 PM) (Detached) 3. Create a new Byobu session (screen) 4. Run a shell without Byobu (/bin/bash) Choose 1-4 [1]:

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

Один из вариантов, который может быть полезен на облачном сервере, которым вы управляете удаленно, — это автоматический запуск byobu всякий раз, когда вы входите в свою сессию. Это означает, что если вы когда-нибудь отключитесь от своего сеанса, ваша работа не будет потеряна, и вы сможете снова подключиться, чтобы вернуться к тому, где вы были раньше.

Чтобы byobu автоматически запускался при каждом входе в систему, введите это в терминал:

  1. byobu-enable
Output
The Byobu window manager will be launched automatically at each text login. To disable this behavior later, just run: byobu-disable Press <enter> to continue…

Как говорится, если вы когда-нибудь захотите снова отключить эту функцию, введите:

  1. byobu-disable

Он больше не будет запускаться автоматически.

Заключение

В этом руководстве вы установили и использовали screen, а затем byobu для управления сеансами терминала. Вы узнали несколько различных способов быстрого отсоединения и переключения между несколькими работающими средами на лету. Как и многие зрелые терминальные интерфейсы Unix, Screen может быть своеобразным, но он также мощный и вездесущий — никогда не знаешь, когда он может пригодиться.