Используем screen в Linux. Screen — несколько экранов в одной SSH сессии Ubuntu screen разные пользователи

Есть такая замечательная утилита screen , о которой я раньше вообще не знал! Теперь же стараюсь постоянно использовать. И, надеюсь, после прочтения этой статьи, будете использовать её и вы.

Итак, для чего она нужна?

Уж сколько раз была ситуация, когда, работая в терминале по SSH получал дисконнект и все наработки (открытый конфиг или процесс копирования) терялись. Screen позволяет запускать в своём окружении сеансы пользователя и получать к ним доступ, имея как бы разные виртуальные консоли. Можно оставить открытым конфиг какого-либо сервиса, отключиться под конец рабочего дня, приехать домой и подключиться к этому же сеансу из дома и всё, что было в терминале будет вам доступно, включая историю, открытый редактор и т.д. Разрывы связи теперь не помеха. Можно иметь несколько разных сеансов и подключаться к ним произвольно!

Посмотрим, как это работает:

Утилита у меня была уже установлена, о чём радостно сообщила мне команда:

# dpkg info | grep screen

Ну вот и всё! Теперь можно начинать работу.

Работа с сессиями Screen

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

Посмотреть все сессии screen-а можно так:

Если сессии открыты, то подключиться к ним можно так:

# screen -x Имя

либо без имени, если сессия одна.

Создать сессию с определенным именем можно так:

# screen -S "name"

Кроме того, можно сразу запускать программы в Screen-сессию, набирая их:

# screen <команда>

Поработали мы со скрином, теперь можем либо убить сессию (выйдя из оболочки), либо отключиться от неё (Ctrl+D). При этом всё, что было в сессии продолжит выполняться и дальше.

Кроме того в одном окне screen можно использовать несколько консолей.

Убить сессию можно командой и затем k .

Управление Screen-ом

У screen-а весьма специфичное управление. Программе, запущенной внутри него передаются все нажатия клавиш, кроме тех, что предваряются сочетанием Ctrl+a (по умолчанию). Т.е. чтобы управлять screen-ом – нужно сперва нажать эту комбинацию, а затем набрать управляющую клавишу.

Итак, создаём новое окно внутри сессии screen:

# c

Можем переименовать это окно, для того, чтобы иметь возможность быстро его найти:

# A

Набрали текст, жмём Enter.

Просмотреть все окна можно так:

#

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

Есть варианты выбрать не интерактивный список w , а так же переключаться на следующее n или на предыдущее окно p . Либо сразу на заранее известный номер окна 2 . Обратите внимание, что нумерация ведется с нуля.

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

# tail -f /path/to/log

которая будет в реальном времени забирать 10 последних записей и выводить их на экран. Создадим новую консоль screen так:

# screen -d -m -S tail-log tail -f /var/log/nginx/error.log

– это создаст новую сессию screen-а, т.е. когда скрины пока не запущены вообще. При наборе этой команды, на первый взгляд, ничего не происходит. На самом деле так и есть. Создаётся (-m) новый сеанс по имени “ tail-log “, в котором выполняется команда “ tail -f /var/log/nginx/error.log ” (выводящая 10 последних записей лог-файла в реальном времени), и этот сеанс запускается уже свёрнутым (-d).

Если же скрин у вас уже запущен, то можно создать новое окно:

# c

Переименовать его в tail-log

# A

И запустить там нужную нам команду:

# tail -f /var/log/nginx/error.log

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

Мониторинг изменений окна

Но и это ещё не всё. Удобства ещё только начинаются. Есть ситуации, когда вывод какого-либо окна долго остается неизменным. Например ждать, пока в логи попадёт какая-либо информация может быть очень долго. И screen кое-что имеет на этот счёт!

Запустили мы два окна LOG в котором прослушивается лог-файл, и USER в котором наша консоль. Ждём пока в консоли. Реагировать будем тогда, когда в прослушиваемый LOG что-то придёт. Но не переключаться же постоянно туда-сюда, с целью уловить изменения?

Нажимаем сочетание:

# M

и включаем мониторинг активности окна. Теперь если текст окна изменится, то в списке окон возле его имени будет отображен символ “@”, а внизу окна на несколько секунд появится надпись “Активность в окне №…”!

Так же есть обратная возможность мониторить “тишину”, для этого используется команда: _ .

Два окна сразу

А можно ли открыть два консольных окна сразу? Конечно можно! Screen позволяет разделить окно. Вот как мы это сделаем.

Разделяем окно на части:

# S

При этом текущее окно пойдёт в верхнюю часть.

Переключение на нижестоящий регион (на первый, если уже на самом нижнем) осуществляется так:

# Tab

Открываем там другую консоль:

#

и выбираем её по имени. Имена окон подсвечиваются (0 LOG, 1 USER) чтобы мы не заплутали между ними.
2 окна сразу? Легко

Перемещая фокус ввода по Tab-у, как описано выше, мы, наконец, наигрались. Закрываем окна.

# X – закрывает текущий регион, Q закрывает все другие, кроме текущего. Смотря что вам нужно.

Копирование текста между окнами

Есть ещё одна интересная возможность – копирование текста между окнами через особый буфер.

Для этого есть команда

# [ , при этом можно перемещаться по окну курсорными клавишами, для определения начала текстового фрагмента жмём пробел. Двигая стрелочками курсор, отмечаем конец выделения и снова жмём пробел. Всё, фрагмент скопирован. Вставляется он в это же или другое окно нажатием ] . Всё просто!

Ведение лога и принт-скрин

Так же можно вести трассировку всего текста, выдаваемого в окно в особый файл screenlog. где N – номер окна.

# H

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

Так же команда для снятия текущего окна

# h

передает в файл hardcopy. только содержимое текущего окна, а не мониторит ввод-вывод постоянно. Аналог принт-скрина.

Конфигурирование

Для себя можно сконфигурировать Screen весьма гибко. После запуска выполняются команды в конфигах /etc/screenrc и персональные.screenrc в каталоге пользователя.

У каждой клавиатурной команды есть и текстовый вариант для конфига, который можно посмотреть в справке.

Но для примера вот такой конфиг, в котором отключаем приветствие, создаем заголовок и строку статуса, создаем два окна USER и LOG, в которых открываем соответствующие каталоги, делаем активным первое окно USER.
startup_message off
caption always "%{= 45}%{+b w}Screen: %n | %h %=%t %c"
hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"
chdir /root/
screen -t USER
chdir /var/log/nginx/
screen -t LOG
select 0

Теперь при простом запуске скрина у нас будет следующее:

Справка

Есть и другие возможности, которые можно посмотреть так.

Вы залогинились на ваш удаленный сервер через ssh, радостно стучите по клавиатуре, делая свои какие-то админские дела и опа! Символы перестали печатться и вывалилось то самое сообщение, которое, порой, вызывает непреодолимое желание разбить клавиатуру. Connection closed. Знакомая ситуация? Да-да, ваша сессия только что аварийно оборвалась и все придется делать заново… Этого можно избежать, если использовать screen. Он не только позволит сохранить вашу сессию в целости и сохранности, но еще и позволит держать открытыми несколько сессий в одном окошке терминала

Что такое screen?
Сначала посмотрим man-страницу: “Screen - это полноэкранный оконный менеджер, который позволяет разделить физический терминал между несколькими независимыми процессами (обычно интерактивными облочками)”.
У screen есть несколько отличительных особенностей, которые могут сильно помочь при выполнении задач на удаленных серверах через ssh. Я расскажу о трех, самых часто используемых мной фичах: многооконность, логирование и сессии. За более подробными деталями придется обратиться к man-странице.

Установка screen
Скорее всего, screen уже есть в вашей системе. Проверить это можно командой

Если which не дал результатов, то установите screen при помощи пакетного менеджера вашей системы. На моих серверах, в основном, CentOS и Debian, поэтому я ставлю screen так:

# yum install screen (для CentOS)
# apt-get install screen (для Debian)

Попадается и FreeBSD, в этом случае я использую порты:

# cd /usr/ports/sysutils/screen
make install clean

Использование screen
Screen запускается из командной строки также, как и любое приложение:)

Вы можете получить сообщение о том, что screen запущен, а можете и не получить… Зависит от вашей системы. Если вы не получили сообщения, то вы можете подумать, что ничего не произошло. Однако это не так. Вы уже внутри терминала, запущенного в screen. Это нормальный полнофункциональный шелл, за исключением нескольких специальных команд. Screen использует клавиатурную комбинацию Ctrl+A для подачи команд терминалам внутри себя. Попробуйте нажать Ctrl+A, а затем?
Вы увидите примерно следующее:

Screen key bindings, page 1 of 2.

Command key: ^A Literal ^A: a

break ^B b lockscreen ^X x reset Z
clear C log H screen ^C c
colon: login L select ” ‘
copy ^[ [ meta a silence _
detach ^D d monitor M split S
digraph ^V next ^@ ^N sp n suspend ^Z z
displays * 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
help ? pow_detach D width W
history { } prev ^P p ^? windows ^W w
info i readbuf < wrap ^R r
kill K redisplay ^L l writebuf >
lastmsg ^M m remove X xoff ^S s
license , removebuf = xon ^Q q

Screen воспринимает командные клавиатурные комбинации после нажатия Ctrl+A. Вы можете изменить это поведение при помощи конфиг-файла $HOME/.screenrc

Многооконность
Screen, как и большинство оконных менеджеров, поддерживает работу с несколькими окнами. Это очень удобно для выполнения параллельных задач без открытия новых ssh-сессий. Например, у меня постоянно открыто четыре или пять сессий с несколькими задачами в каждой. Раньше мне бы пришлось открыть порядка 15 терминалов, логинов, сессий.. Утомительно, не так ли? Эти неудобства полностью решает screen. Теперь я вполне могу обойтись одним терминалом.

Новое окно открывается комбинацией клавиш “Ctrl+a c”. После нажатия вы увидите новый терминал с вашим приглашением в том же окне. При этом предыдущие окна также продолжают работать. Давайте попробуем: запустите screen и в нем top

Mem: 506028K av, 500596K used, 5432K free,
0K shrd, 11752K buff
393660K cached


6538 root 25 0 1892 1892 596 R 49.1 0.3
6614 root 16 0 1544 1544 668 S 28.3 0.3
7198 admin 15 0 1108 1104 828 R 5.6 0.2

Теперь откройте новое окно, нажав “Ctrl+a c”

Вернитесь обратно, нажав Ctrl+a n

Mem: 506028K av, 500588K used, 5440K free,
0K shrd, 11960K buff
Swap: 1020116K av, 53320K used, 966796K free
392220K cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %ME
6538 root 25 0 1892 1892 596 R 48.3 0.3
6614 root 15 0 1544 1544 668 S 30.7 0.3

top остался в прежнем состоянии. Вы можете создать несколько окон и переключаться между ними используя Ctrl+a n для переключения на следующеее окно и Ctrl+a p для переключения на предыдущее. При этом каждый запущенный процесс останется в рабочем состоянии.

Отключаемся от screen
Есть два способа отключиться от screen: первый - это просто разлогиниться. Вы можете использовать клавиатурную комбинацию Ctrl+a K или просто набрать exit. Этот способ “убьет” текущее окно, если у вас их несколько или совсем остановит screen.
Второй способ заключается в отсоединении . Этот способ оставляет текущий процесс запущенным и просто отключает вас от терминала. Например, если вы через ssh-сессию запускаете какой-то очень длительный процесс, не требующий вашего внимания, то вы можете просто отключиться от screen при помощи Ctrl+a d. Это вернет вас обратно в исходную оболочку. Все процессы, запучшенные в screen, при этом остаются работающими и вы можете подключиться к ним позже.

Подключение к сессии
Вы компилируете большую программу на удаленном сервере, используя screen. И конечно же, по законам Мэрфи, соединение обрывается по независящим от вас причинам. Не стоит впадать в панику, screen все сохранил:) Просто соединитесь с сервером еще раз и посмотрите запущеные под screen процессы при помощи

# screen -ls
There are screens on:
31619.ttyp2.server (Detached)
4731.ttyp2.server (Detached)
2 Sockets in /tmp/screens/S-root.

В этом примере запущено две screen-сессии. Для подключения к нужной из них используйте команду

#screen -r 31619.ttyp2.server

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

Логирование
Мне кажется очень важным порой сохранять полный лог своих действий. К счастью, screen легко с этим справляется. Просто активируйте логирование нажатием Ctrl+a H. Screen будет продолжать логирование на протяжении всего процесса работы. Бывает очень полезно вернуться назад и посмотреть порядок необходимых действий.

И еще немного…
Screen может вести мониторинг активности окна. Если вы качаете что-то большое, компилируете программу или просто выполняете длительный процесс, вы можете долгое время наблюдать пустой терминал без признаков активности. А процесс, тем временем, продолжает выполняться. Или, наоборот, смотреть на поток отладочной информации, ожидая окончания процесса. Для начала слежения перейдите в терминал, который вы хотите наблюдать и нажмите Ctrl+a M для слежения за активностью (сработает при появлении новой информации) или Ctrl+a _ для слежения за бездействием (сработает при прекращении поступления информации в терминал). Затем вы можете спокойно переключиться в другое окно или создать новое. При наступлении события, screen предупредит вас об этом сообщением с номером окна в заголовке терминала. Для быстрого переключения в это окно используйте Ctrl+a ” (это символ кавычки). Вы увидите список всех активных окон на данный момент. Для перехода в нужное можно использовать стрелки или просто набрать номер нужного окна. Для прекращения наблюдения перейдите в нужное окно и отмените мониторинг той же командой. Например, для прекращения наблюдения за активностью нажмите Ctrl+a M

Больше года одноклассник подбивал меня начать использовать screen во время работы. Шло время, у меня всё никак не доходили до этого руки. А зря…

Screen — это полноэкранный оконный менеджер, позволяющий из одного терминального сеанса работать сразу с несколькими окнами. Иными словами, подключившись к удалённой машине по ssh вы сможите работать сразу с несколькими его окнами внутри одной сессии подобно нажатию ctrl+alt+f1, ctrl+alt+f2… У программы есть одна важная особенность: при обрыве связи или отключении от «скрина» процессы, в нём запущенные не останавливаются и к ним можно вернуться в любой момент. Этому можно найти массу применений. Например, работая с удалённым сервером можно быть уверенным в том, что запущенное компилирование программы дойдёт до конца, даже если вдруг оборвётся связь.

Установка

Устанавливается программа как обычно, например, в Ubuntu так:

apt-get install screen

Стоит так же заметить, что в моей Ubuntu 10.04 Desktop этот пакет уже был в системе.

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

Запуск программы:

После запуска программы будет показана краткая информация о ней. Для того, чтобы убрать её нажимаем enter или пробел. Вы можете подумать, что ничего не произошло, однако, это не так: вы внутри терминала, запущенного в screen. После этого мы видим привычную нам консоль.

Для подачи команд screen используется сочетание клавишь ctrl+a. Ниже приведён список основных команд, служащих для управления оболочкой:

  • c — создание нового окна
  • n — переключение к следующему окну
  • p — переключение к предыдущему окну
  • k — закрытие окна
  • d — отключение от скрина
  • » — список запущенных в скрине окон

Например, для создания нового окна нужно нажать ctrl+a и нажать клавишу c.

При отключении от скрина все окна и процессы, запущенные в них продолжают выполняться. Для просмотра запущенных скринов используется команда:

Вывод команды будет примерно таким:

There are screens on:
18388.pts-4.asid-ubuntu-vm (23.09.2010 05:05:30) (Detached)
18272.pts-0.asid-ubuntu-vm (23.09.2010 04:54:23) (Detached)
2 Sockets in /var/run/screen/S-root.

Для того, чтобы подключиться к запущенному скрину выполняем команду screen -r . Например, так:

screen -r 18388.pts-4.asid-ubuntu-vm

или короче:

Если вы забыли отключиться от скрина с другой машины (в выводе screen -ls рядом с ним будет надпись atached), перехватить его можно с помощью параметра -rd:

screen -rd 18388

Для подключения к последнему скрину можно просто:

Ну вот, вроде бы, и всё. Подробнее об этих и других командах, как обычно, в мане.

  • Создавать множественные окна в терминале SSH;
  • Сохранять сессию активной даже при сетевых отключениях;
  • Отключаться и переподключаться к сессии из разных мест;
  • Выполнять длительный процесс, не поддерживая активную сессию.

Установка Screen с Yum

Наверняка, у вас уже есть Linux Screen в вашей системе. В большинстве дистрибутивов Red Hat и CentOS вы можете найти Screen Linux в /usr/bin/ screen . Чтобы увидеть, находится ли там Screen , вы можете использовать следующую команду:

# which screen
/usr/bin/screen

Если у вас нет Screen, то можете установить его из RPM или файла пакета для вашей системы. Например, на CentOS можно установить Screen с yum:

# yum install screen
...
Complete!

Поскольку вы, скорее всего, уже имеете Screen или можете использовать RPM, я не буду описывать установку Screen из ресурса. А расскажу, как использовать screen.

Запуск Screen Linux

Screen запускается с командной строки точно так же, как любая другая команда:

root@office ~]# screen

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

Команда управления

Команда: "Ctrl-a"
Screen использует команду "Ctrl-a" , это - клавиша "CTRL" и нижний регистр "a" работает как сигнал отправить команды Screen’у вместо оболочки. Например, "Ctrl-a" потом "?". У Вас должна появится страница справки Screen.

Привязка клавиш - это команды, которые принимает Screen после того, как нажаты “Ctrl-a”. Вы можете переназначить эти ключи по своему усмотрению, используя.screenrc файл, но я использую значения по умолчанию.

Создание окон

Команда: "Ctrl-a" "c" . Чтобы создать новое окно используйте "Ctrl-a" "c".

Такая комбинация, с настройками по умолчанию создаст новое окно. Ваше старое окно будет все еще активно.
Например, я могу выполнить top и затем открыть новое окно, чтобы заняться чем-то другим. Top остается рабочей! Чтобы попробовать, запустите screen, а затем выполните top. (Примечание: некоторые скрины у меня урезаны, чтобы оставить свободное место.)

Запустите...

top - 09:10:33 up 35 days, 17:26, 1 user, load averag
Tasks: 131 total, 1 running, 130 sleeping, 0 stoppe
Cpu(s): 0.4%us, 0.2%sy, 0.0%ni, 99.4%id, 0.0%wa, 0
Mem: 12302040k total, 6363652k used, 5938388k free,
Swap: 1052248k total, 12k used, 1052236k free,

Теперь откройте новое окно с: "Ctrl-a" "c"

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

Переключение между окнами

Команда: "Ctrl-a" "n"

Screen позволяет перемещаться вперед и назад. Вы можете использовать "Ctrl-a" "n", чтобы вернуться обратно. Эта команда переключает на следующее окно.

Работает как карусель - циклично выполнится назад по кругу к Вашему первому окну. Вы можете создать несколько окон и переключателя по ним "Ctrl-a" "n" для следующего окна или "Ctrl-a" "p" для предыдущего окна. Каждый процесс продолжит работать, пока вы не закроете окно.

Отсоединение от Screen

Команда: "Ctrl-a" "d"

Экран позволяет отсоединяться от окна и вернуться к нему позже. Если сетевая связь прервется, то Screen автоматически отсоединит сеанс!

Можете отсоединиться, используя "Ctrl-a" "d".

Все окна Screen все еще там, и вы можете повторно присоединиться к ним. Это удобно при использовании rsync для миграции сервера.

Повторное присоединение к Screen

Если Ваше соединение оборвалось или Вы отсоединились от Screen’а, Вы можете повторно подключиться, просто запуская:

$ screen -r

Произойдёт повторное подключение к Вашему Screen. Однако, если у Вас есть несколько Screen’ов,то может получится это:

$ screen -r
There are several suitable screens on:
31917.pts-5.office (Detached)
31844.pts-0.office (Detached)
Type "screen [-d] -r tty.host" to resume one of them.

Если так, просто определите Screen, который хотите.

$ screen -r 31844.pts-0.office

Регистрация действий Screen

Я считаю важным фиксировать то, что я делаю на чьем-либо сервере. К счастью, Screen это упрощает.
Используя "Ctrl-a" "H" , запускается регистрация сеанса. Screen продолжит добавлять данные к файлу через многократные сеансы. Использовать функцию регистрации очень полезно для отслеживания того, что вы делали, особенно если требуется вносить много изменений. Если что-то пойдёт не так, всегда будет возможность найти ошибку.

Получение уведомлений

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

Если Вы ожидаете ответа от «долгой» программы, можете использовать "Ctrl-a" "M", чтобы отследить активность. Screen высветит предупреждение внизу страницы, когда отклик будет зарегистрирован на том экране.
Я использую это при выполнении команды, которая занимает много времени. Могу просто запустить команду, переключиться на другое окно и не возвращаться обратно каждый раз, чтобы проверить состояние.

Если загружаете большой файл или компилируете программу, по завершению придёт уведомление. Это - будет сигналом того, что задание выполнено. Чтобы контролировать такие моменты без вывода экрана я используют "Ctrl-A" "_" .

Блокировка сеанса Screen

Если Вам необходимо отойти от Вашего компьютера на несколько минут, Вы можете заблокировать свой сеанс, используя "Ctrl-a" "x" . Для доступа к сеансу снова потребуется пароль.

Screen used by root .
Password:

Остановка Screen

Когда вы закончили работу, я бы порекомендовал закончить сеанс вместо того, чтобы оставить его на потом. Чтобы остановить Screen, можете, как обычно, просто ввести «Exit» из своей оболочки. Это закроет Screen. Чтобы завершить сеанс вы должны закрыть все окна.

Как только вы закрываете все окна выводится сообщение о том, что Screen начал завершение.

Альтернативно, Вы можете использовать "Ctrl-a" "k" .

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

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

Установка

Данное руководство использует Ubuntu 12.04; на каждом современном дистрибутиве все команды, кроме установки, будут такими же.

Чтобы установить консоль на Ubuntu, используйте команду «apt-get»:

sudo apt-get update
sudo apt-get install screen

Основы использования

Чтобы начать сессию screen, просто вызовите команду «screen»:

screen
Screen version 4.00.03jw4 (FAU) 2-May-06
Copyright (c) 1993-2002 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.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program (see the file COPYING); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to
[email protected]

При запуске появится страница лицензирования. Для продолжения нажмите «Return» или «Enter».

Дальнейшие действия программы могут быть неожиданными. Предоставляется обычная командная строка и, кажется, ничего не происходит. Может, произошла ошибка работы screen? Чтобы узнать это, используйте быстрое сочетание клавиш. Нажмите и удерживайте клавишу управления (Ctrl), нажмите «а», затем клавишу «v»:

Данное действие запрашивает у Screen информацию о версии; выведенный результат свидетельствует о том, что консоль работает.

Теперь нужно ознакомиться с управлением консолью. Screen управляется преимущественно с помощью клавишных комбинаций быстрого вызова. Каждой такой комбинации должна предшествовать «Ctrl-a» (зажмите клавишу «Ctrl» перед нажатием «а»). Такая последовательность нажатия клавиш говорит Screen обратить внимание на следующие нажатые клавиши.

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

Ctrl-a ?
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

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

Теперь вызовите команду «top», которая предоставляет информацию о процессах.

top
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» создает новое окно. Теперь можно запустить любую команду, не нарушая запущенных в другом окне команд (в данном случае это мониторинг процессов).

Куда пропало это другое окно? К нему можно вернуться при помощи команды:

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

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

При постоянном переключении между двумя окнами полезно использовать следующее сочетание клавиш:

Данная последовательность переводит пользователя в наиболее часто посещаемое окно. В предыдущем примере она бы снова вывела третье окно.

Сейчас отслеживание всех созданных окон может показаться невозможным. К счастью, консоль Screen предоставляет несколько способов управления разными сессиями. Для начала создайте три новых окна (итого получится 4 окна), а затем используйте один из самых простых инструментов управления окнами – «Ctrl-a w».

Ctrl-a c
Ctrl-a c
Ctrl-a c
Ctrl-a w
0$ bash 1$ bash 2-$ bash 3*$ bash

Данная команда предоставляет полезную информацию – список открытых окон. В данном случае открыто 4 окна. Каждое окно имеет свой номер, начиная с 0. Звездочка рядом с номером указывает на текущее окно.

Как можно видеть, на данный момент окно №3 является текущим (по сути, оно четвертое, так как нумерация начинается с 0). Как быстро переключиться на окно №1?

Порядковый номер можно использовать для прямого перехода в необходимое окно. Снова откройте список окон:

Ctrl-a w
0$ bash 1*$ bash 2$ bash 3-$ bash

Как можно видеть, теперь текущим является окно №1. Попробуйте другой способ переключения между окнами.

Ctrl-a “
Num Name Flags
0 bash $
1 bash $
2 bash $
3 bash $

На этот раз выведено навигационное меню. Теперь можно перемещаться при помощи стрелок вверх и вниз или же клавиш «j» и «k», как это делается в текстовом редакторе vi. Переключиться на выбранное окно можно, нажав кнопку «Return» или «Enter».

Это достаточно полезно, но на данный момент все окна называются «bash». Это не очень удобно. Теперь нужно дать название сессии. Переключитесь на окно, которое нужно назвать, и используйте последовательность «Ctrl-a A».

Ctrl-a 0
Ctrl-a A
Set window"s title to: bash

При помощи данной последовательности можно дать сессии название. С помощью клавиши «backspace» сотрите «bash» и введите любое новое имя. Для примера назовите окно №0 «monitoring» и запустите в нем команду «top».

Set window"s title to: monitoring
Ctrl-a “
Num Name Flags
0 monitoring $
1 bash $
2 bash $
3 bash $

Окно №0 имеет более удобное имя.

Теперь можно создавать и переименовывать окна; но как избавиться от ненужного окна?

Используйте последовательность «Ctrl-a k», что значит «kill»:

Ctrl-a k
Really kill this window

Управление сессиями Screen

Чтобы выйти из Screen и закрыть все окна, используйте следующую последовательность команд:

Ctrl-a \
Really quit and kill all your windows

Это завершит сессию Screen. Все созданные окна, а также вся незавершенная работа будут потеряны.

Использование Screen имеет одно огромное преимущество. Сессию можно не удалять, а просто снять. Снятие сессии позволяет программам, запущенным в Screen, продолжать работу, а также дает доступ к сессии основной консоли (той, с которой начинается работа со Screen). Данная сессия Screen все еще существует, просто она управляется в фоновом режиме.

Ctrl-a d

Итак, сессия снята. Как вернуться в данную сессию?

Флаг «-r» значит «reattach», или «восстановить». Но что если существует несколько сессий Screen? Что если сессия Screen была создана и снята, а затем создана новая сессия, которая также была снята?

screen
Ctrl-a d
screen
Ctrl-a d

Как сказать Screen, какую сессию нужно восстановить?

screen –ls
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».

screen –r 1835

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

Управление терминалами в Screen

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

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

Эта последовательность предоставляет курсор, который можно передвигать при помощи клавиш со стрелками или же клавиш «h», «j», «k», «l» (как в vi). Переведите курсор в начало фрагмента текста, который нужно скопировать, и нажмите «Return» или «Enter». Затем переведите курсор в конец фрагмента и снова нажмите «Return» или «Enter». Текст будет скопирован в буфер обмена.

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

Можно вставить скопированный текст с помощью закрывающей квадратной скобки

Также может понадобиться просмотреть программы, запущенные в другом screen-окне.

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

Приведем более простой пример. Скажите консоли Screen сообщить, когда окно завершит пинг Google 4 раза.

ping –c 4 www.google.com
Ctrl-a _
The window is now being monitored for 30 sec. silence.

Теперь можно работать в другом окне и ждать извещения о завершении задачи в предыдущем окне.

Ctrl-a 1
Window 2: silence for 30 seconds

Можно также, наоборот, запрашивать извещение об активности определенного окна. Это делается при помощи последовательности «Ctrl-a M».

sleep 20 && echo “output”
Ctrl-a M
Window 2 (bash) is now being monitored for all activity.

Теперь появится извещение при выводе данных в этом окне.

Ctrl-a 1
Activity in window 2

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

Ctrl-a H
Creating logfile "screenlog.1".

Области Screen

При необходимости видеть несколько окон сразу, можно использовать так называемые «области». Новые области создаются при разделении текущей области. Чтобы разделить текущую область по горизонтали, можно ввести:

Это передвинет текущее окно в верхнюю часть экрана и откроет новую пустую область под ним. Чтобы перейти в нижнюю область, используйте «tab»:

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

При необходимости уничтожить текущую область используйте следующую последовательность:

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

При необходимости сделать вертикальный раздел, можно использовать последовательность:

Примечание: это не символ 1 (единицы) или L. Это символ вертикальной черты, который на большинстве клавиатур находится на одной клавише с символом «\». Средства управления вертикальными областями совпадают с управлением горизонтальными. При необходимости удалить несколько различных областей и вернуться к одной области, можно использовать данную последовательность, которая разрушает все области, кроме текущей:

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

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

sudo apt-get install byobu

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

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

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

Теперь можно ввести «byobu» вместо «screen», чтобы начать сессию.

byobu
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-24-virtual i686)
* Documentation: https://help.ubuntu.com/
Welcome to the light, powerful, text window manager, Byobu.
You can toggle the launch of Byobu at login with:
"byobu-disable" and "byobu-enable"
For tips, tricks, and more information, see:
* http://bit.ly/byobu-help
justin@Blank:~$
u? 12.04 0:* 118! 3h55m 2.00 2.0GHz 496M6% 2013-07-01 18:19:21

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

Впервые набрав «Ctrl-a», нужно сказать byobu распознавать эту команду как команду screen, а не Emacs.

Ctrl-a
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, чтобы использовать byobu в обычном режиме.

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

Единственное отличие между byobu и screen в том, что byobu управляет сессиями. Если после отключения просто снова набрать «byobu», она восстановит предыдущую сессию вместо того, чтобы создавать новую.

Чтобы создать новую сессию, нужно набрать:

byobu –S sessionname

Измените «sessionname» (имя сессии) по своему усмотрению, чтобы вызвать новую сессию. Список текущих сессий можно просмотреть с помощью:

byobu –ls
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» появится меню, в котором можно выбрать, к какой из сессий нужно подключиться.

byobu
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 :

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

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

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

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

Как указано выше, чтобы отключить данную функцию, просто введите:

Тогда она не будет запускаться автоматически.

Tags: ,