Как установить и использовать экран на облачном сервере Ubuntu
Введение
Screen — это консольное приложение, позволяющее использовать несколько сеансов терминала в одном окне. Программа работает в сеансе оболочки и выступает в качестве контейнера и менеджера для других сеансов терминала, подобно тому, как оконный менеджер управляет окнами.
Есть много ситуаций, когда создание нескольких окон терминала невозможно или нецелесообразно. Вам может понадобиться управлять несколькими сеансами консоли без запущенного X-сервера, вам может потребоваться доступ ко многим удаленным облачным серверам или вам может потребоваться отслеживать выходные данные работающей программы во время работы над какой-либо другой задачей.
Существуют современные комплексные решения этой проблемы, такие как tmux, но screen
является наиболее зрелым из них, и у него есть собственный мощный синтаксис и функции.
Шаг 1 – Установка экрана
В этом руководстве мы будем использовать Ubuntu 22.04, но вне процесса установки все должно быть одинаковым во всех современных дистрибутивах Linux.
Экран часто устанавливается по умолчанию в Ubuntu. Вы также можете использовать apt
для обновления исходников пакетов и установки screen
:
- sudo apt update
- sudo apt install screen
Убедитесь, что screen
установлен, запустив what screen
:
- which screen
Output/usr/bin/screen
Вы можете начать использовать screen
на следующем шаге.
Шаг 2 – Использование экрана
Чтобы начать новый сеанс экрана, выполните команду screen
.
- 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
:
Outputscreen 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
, которая покажет нам некоторую информацию о наших процессах.
- top
Outputtop - 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
:
Output0$ bash 1$ bash 2-$ bash 3*$ bash
Мы получаем некоторую полезную информацию от этой команды: список наших текущих окон. Здесь у нас четыре окна. Каждое окно имеет номер, и окна нумеруются, начиная с \0. Текущее окно имеет звездочку рядом с номером.
Итак, вы можете видеть, что сейчас мы находимся в окне № 3 (фактически четвертом окне, потому что первое окно равно 0). Вы можете быстро вернуться к окну №1, используя Ctrl-a 1
.
Мы можем использовать порядковый номер, чтобы перейти прямо к нужному окну. Давайте снова посмотрим на наш список окон, используя Ctrl-a w
:
Output0$ bash 1*$ bash 2$ bash 3-$ bash
Как видите, звездочка говорит нам, что сейчас мы находимся в окне №1. Давайте попробуем другой способ переключения окон с помощью Ctrl-a “
:
OutputNum Name Flags
0 bash $
1 bash $
2 bash $
3 bash $
На этот раз мы получаем настоящее навигационное меню. Вы можете перемещаться с помощью стрелок вверх и вниз. Переключитесь в окно, нажав Enter.
Это довольно полезно, но прямо сейчас все наши окна называются \bash. Это не очень полезно. Давайте назовем некоторые из наших сессий. Переключитесь на окно, которое вы хотите назвать, например, с помощью Ctrl-a 0
, а затем используйте Ctrl-a A
:
OutputSet window's title to: bash
Используя последовательность Ctrl-a
, мы можем назвать наши сеансы. Теперь вы можете вернуться к \bash и затем переименовать его как хотите. Мы снова запустим top
в окне #0, поэтому назовем его мониторинг
.
Проверьте результат с помощью Ctrl-a “
:
OutputNum Name Flags
0 monitoring $
1 bash $
2 bash $
3 bash $
Теперь у нас есть более полезная метка для окна #0. Итак, мы знаем, как создавать окна и называть их, но как нам избавиться от них, когда они нам больше не нужны? Мы используем последовательность Ctrl-a k
, что означает «убить».
OutputReally kill this window [y/n]
Шаг 3 – Управление сеансами экрана
Если вы хотите выйти из screen
и закрыть все окна, вы можете использовать Ctrl-a \
.
OutputReally quit and kill all your windows [y/n]
Это уничтожит нашу сессию экрана. Мы потеряем все созданные нами окна и любую незавершенную работу.
Но мы хотим изучить одно из огромных преимуществ использования экрана. Мы не хотим уничтожать сеанс, мы хотим его отсоединить. Отключение позволяет нашим программам в экземпляре экрана продолжать работать, но дает нам доступ обратно к нашему сеансу базовой консоли (тому, с которого мы изначально начали \экран). Сеанс экрана все еще существует, он просто будет управляться в фоновом режиме. Используйте Ctrl-a d
для отсоединения.
Output[detached from 1835.pts-0.Blank]
Итак, наша сессия теперь отсоединена. Как нам вернуться в него?
- screen –r
Флаг -r
означает повторное подключение. Теперь мы вернулись в нашу экранную сессию. Что, если у нас есть сеансы с несколькими экранами? Что, если бы мы начали сеанс экрана и отсоединили его, а затем начали новый сеанс экрана и также отсоединили его?
Попробуйте запустить screen
, затем отсоединиться с помощью Ctrl-a d
, затем снова запустить screen
, а затем отсоединиться с помощью Ctrl-a d
еще раз.
Как сообщить screen
, какую сессию прикрепить?
- screen –ls
OutputThere 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
.
- screen –r 1835
Что делать, если вы хотите прикрепить сеанс на двух разных компьютерах или терминальных окнах? Вы можете использовать флаг -x
, который позволяет вам поделиться сеансом.
- screen –x
Шаг 4 – Управление терминалами на экране
Существует ряд команд, которые помогают управлять сеансами терминала, которые вы запускаете в screen
.
Чтобы скопировать текст, вы можете использовать Ctrl-a [
.
Это даст вам курсор, который вы можете перемещать с помощью клавиш со стрелками или с помощью HJKL. Перейдите туда, где вы хотите начать копирование, и нажмите Enter. Перейдите в конец того места, где вы хотите скопировать, и снова нажмите Enter. Затем текст копируется в буфер обмена.
Следует помнить, что это также механизм прокрутки экрана. Если вам нужно увидеть какой-то текст, который находится за пределами экрана, вы можете нажать Ctrl-a [
, а затем прокрутить экран вверх.
Мы можем вставить текст, который мы скопировали с помощью Ctrl-a ]
.
Еще одна вещь, которую вы, возможно, захотите сделать, это отслеживать программы, которые выполняются в другом окне экрана.
Допустим, вы компилируете что-то в одном окне и хотите знать, когда это будет завершено. Вы можете попросить screen
отслеживать это окно на наличие тишины с помощью Ctrl-a _
, что сообщит вам, если в течение 30 секунд не было создано никакого вывода.
Давайте попробуем это на другом примере. Давайте сделаем так, чтобы screen
сообщал нам, когда наше окно закончило пинговать Google 4 раза.
- ping –c 4 www.google.com
Затем введите Ctrl-a _
:
OutputThe window is now being monitored for 30 sec. Silence.
Теперь мы можем выполнять работу в другом окне и получать оповещения о завершении задачи в этом окне, введя Ctrl-a 1
:
OutputWindow 2: silence for 30 seconds
Мы также можем сделать обратное и получать оповещения, когда в определенном окне происходит какая-либо активность.
- sleep 20 && echo “output”
Затем введите Ctrl-a M
.
OutputWindow 2 (bash) is now being monitored for all activity.
Теперь мы будем предупреждены, когда команда выдаст результат. Чтобы увидеть результаты, используйте Ctrl-a 1
:
OutputActivity in window 2
Допустим, мы собираемся внести некоторые важные изменения и хотим вести журнал всех выполненных нами команд. Мы можем зарегистрировать сеанс с помощью Ctrl-a H
.
OutputCreating logfile "screenlog.1".
Области экрана
Если нам нужно увидеть несколько окон одновременно, мы можем использовать что-то, что экран называет «регионами». Мы создаем больше регионов, разделяя текущую область. Чтобы разделить текущую область по горизонтали, мы можем использовать Ctrl-a S
.
Это переместит наше текущее окно в верхнюю половину экрана и откроет новую пустую область под ним. Мы можем попасть на нижний экран с помощью Ctrl-a [tab]
.
Затем мы можем либо создать новое окно в нижней области, либо изменить вид на другое окно обычным способом.
Если мы хотим уничтожить текущий регион, мы можем использовать Ctrl-a X
.
Это уничтожает область, не разрушая фактическое окно. Это означает, что если вы запускали программу в этом регионе, вы все равно можете получить к ней доступ как к обычному окну, представление в этом окне было уничтожено.
Если мы хотим сделать вертикальное разделение, мы можем вместо этого использовать Ctrl-a |
.
Элементы управления для вертикального разделения такие же, как и для горизонтального разделения. Если мы добавили несколько разных регионов и хотим вернуться к одному региону, мы можем использовать Ctrl-a Q
, что уничтожит все регионы, кроме текущего.
Шаг 5 – Использование Byobu с экраном
Отличным улучшением для screen
является программа под названием byobu
. Он действует как оболочка для screen
и обеспечивает улучшенный пользовательский интерфейс. В Ubuntu вы можете установить его с помощью:
- sudo apt install byobu
Прежде чем мы начнем, нам нужно указать byobu
использовать screen
в качестве бэкенда. Мы можем сделать это с помощью следующей команды:
- byobu-select-backend
OutputSelect the byobu backend:
1. tmux
2. screen
Choose 1-2 [1]:
Здесь мы можем выбрать screen
, чтобы установить его в качестве диспетчера терминалов по умолчанию.
Теперь вместо ввода screen
для запуска сеанса вы можете ввести byobu
.
- byobu
Когда вы набираете Ctrl-a
в первый раз, вам нужно сказать byobu, чтобы он распознал это как экранную команду.
OutputConfigure 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
:
- byobu –S sessionname
Измените sessionname
на то, что вы хотите назвать своим новым сеансом. Вы можете увидеть список текущих сессий с помощью:
- byobu –ls
OutputThere 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
вам будет представлено меню для выбора сеанса, к которому вы хотите подключиться.
- byobu
OutputByobu 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 автоматически запускался при каждом входе в систему, введите это в терминал:
- byobu-enable
OutputThe Byobu window manager will be launched automatically at each text login.
To disable this behavior later, just run:
byobu-disable
Press <enter> to continue…
Как говорится, если вы когда-нибудь захотите снова отключить эту функцию, введите:
- byobu-disable
Он больше не будет запускаться автоматически.
Заключение
В этом руководстве вы установили и использовали screen
, а затем byobu
для управления сеансами терминала. Вы узнали несколько различных способов быстрого отсоединения и переключения между несколькими работающими средами на лету. Как и многие зрелые терминальные интерфейсы Unix, Screen может быть своеобразным, но он также мощный и вездесущий — никогда не знаешь, когда он может пригодиться.