Команды screen. Установка и использование Screen на облачном сервере Ubuntu. Термины и определения

Больше года одноклассник подбивал меня начать использовать 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

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

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

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

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

Для установки на Ubuntu нужно выполнить команду

$ sudo apt-get install screen

После этого нужно запустить screen:

$ screen

После запуска вы увидите либо приглашение командной строки, либо «экран приветствия», нажав SPACE или ENTER в котором, вы так же попадете в shell. При этом все команды будут запущены уже «внутри» screen’а.

Для того, чтобы выйти из screen’а (выйти, а не отсоединиться) достаточно выйти из всех открытых в нем оболочек, либо же, нажать комбинацию клавиш Ctl-a \, и ответить «y» на вопрос «действительно ли вы хотите выйти».

Отсоединиться от текущего скрина, не закрывая и не завершая сессии, можно комбинацией Ctrl-a d.

Подключение к screen

Если на машине уже есть запущенная screen-сессия, и вы хотите подсоединиться к ней, то

  1. если сессия одна, достаточно просто команды: $ screen –x
  2. если сессий несколько, то: посмотреть список запущенных screen’ов можно командой screen -ls: $ screen -ls There are screens on: 2762.pts-0.debian (Detached) 2743.pts-0.debian (Detached) 2 Sockets in /var/run/screen/S-diesel.

    Выбираем нужный нам screen, и присоединяемся к нему:

    Screen -x 2762.pts-0.debian

    Названия сессий по-умолчанию малоинформативны — просто номера процессов, если есть желание запустить и использовать несколько screen-сессий для разных задач, можно придумать более вменяемые названия. Придумываем название, затем запускаем новый screen вот таким образом:

    $ screen -S "job1"

    где job1 — это название нашей «именнованной» сессии. Теперь в -ls мы увидим гораздо более понятное:

    $ screen -ls There are screens on: 2762.pts-0.debian (Detached) 2795.job1 (Detached) 2743.pts-0.debian (Detached) 3 Sockets in /var/run/screen/S-diesel.

    и сможем подсоединиться к сессии job1, просто указав ее имя:

    $ screen -x job1

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

Как вы уже поняли, сессии сохраняются даже в то время, когда вы отключны от сервера, и все что в них запущено, продолжает выполняться. Впрочем, на этом возможности screen’а не исчерпываются. Иногда, при работе по ssh, очень хочется, чтобы было открыто сразу несколько терминалов, при этом коннектиться несколько раз облом — особенно если коннектиться нужно через несколько серверов. В этом тоже может помочь screen. Просто нажмите Ctrl — a c, и откроется еще один шелл. Перемещаться между открытыми шеллами можно либо через Ctrl — a <Цифра>, где <Цифра> — номер открытого шелла, начиная с нуля, либо Ctrl — a n/Ctrl — a p — вперед назад. Получить список открытых «окон» – консолей (и переключиться на нужную), можно комбинацией клавиш Ctrl — a «; чтобы задать нормальное имя (а не просто скучный «bash») для какого-нить окна, перейдите в него и нажмите Ctrl — a A (регистр имеет значение), затем в появившемся приглашении введите имя.

Мониторинг выполнения команды

Если открыто несколько окон, полезной может быть возможность следить за активностью в каком-то из них. Например, если вы запустили «долгоиграющую» команду и интересно узнать, когда она завершится. Переходим в окно с этой командой, жмем Ctrl — a m, видим надпись типа такой: «Window 0 (bash) is now being monitored for all activity». Когда что-то в окне изменится, screen подаст звуковой сигнал, а в списке окон после номера появится символ «@».

Прокрутка экрана в screen

Для просмотра вывода команды, который ушел выше границ окна, нужно нажать Ctrl-a [

Это переключит screen в Copy mode. Для выхода из этого режима просто нажмите Esc.

Конфигурация screen

Конфигурируется screen с помощью файла ~/.screenrc, в вашем домашнем каталоге. Например, можно написать туда:

Caption always "%{= 45}%{+b w}Screen: %n | %h %=%t %c" hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"

Это даст вам все время видимый список открытых окон, и другую полезную информацию внизу экрана.

Также при запуске Screen по-умолчанию выполняются команды из файла /etc/screenrc и файла.screenrc из домашнего каталога пользователя. Многие команды которые можно использовать в файлах конфигурации были рассмотрены в таблицах выше в поле «Текстовая команда». Ниже представлен пример конфигурации Screen из файла.screenrc:

# Отключить вывод лицензионной информации при старте Screen startup_message off # Открыть оболочку для работы chdir screen -t Work # Открыть оболочку для управления конфигурацией chdir /etc screen -t Configuration # Открыть оболочку для просмотра логов chdir /var/log screen -t Logs # Выбрать первое окошко после старта select 0

Этот достаточно простой файл конфигурации открывает три окна с именами Work, Configuration, Logs, соответственно в личном каталоге пользователя, в каталоге /etc и каталоге /var/log . После запуска на экране будет находиться первое окно с именем Work. На рисунке 1 представлен пример работы Screen с этим файлом конфигурации.

Завершение Screen

Если по какой-то причине сессия screen перестает отвечать, можно завершить ее. Для этого нужно подключиться к нужной сессии, затем нажать Ctrl — a и ввести команду «:quit».

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

Работа со Screen

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

На рисунке изображен Screen с тремя именованными окнами (Work, Configuration, Logs) и открытый в нем текстовым редактором Vim, с примером файла конфигурации Screen.

Первый запуск

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

$ which screen /usr/bin/screen

Если команда вернула путь как в примере выше, можно сразу начинать пользоваться, в противном случае Screen может быть установлен стандартными средствами поддержки пакетов вашей операционной системы, или скачан с официального сайта http://www.gnu.org/software/screen/ .

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

$ screen

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

$ screen top

Хорошо, теперь Screen запущен, но, на первый взгляд, нет никаких внешних изменений — мы можем работать в запущенной оболочке, или использовать top.Хитрость в том, что во время работы Screen передает все нажатия клавиш непосредственно приложению, но (по умолчанию) оставляет для себя управляющие команды, начинающиеся с комбинации клавиш Ctrl + a .

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

В данном случае мы должны выполнить две клавиатурные комбинации сначала нажав Ctrl + a и затем клавишу двоеточия. При этом Screen выведет в нижней части экрана приглашение для ввода команды в виде двоеточия. Ту же самую команду, которую мы только что выполнили с помощью клавишной комбинации, можно выполнить через конфигурационный файл с помощью текстовой команды colon , что может, например, понадобиться для вывода приглашения о вводе команд при старте, или переназначении комбинации клавиш, вызывающих это приглашение. Ниже, как и в примере выше, для каждой клавишной комбинации я буду писать соответствующие им ключевые слова, которые можно использовать в файлах конфигурации, или вводить с помощью Ctrl + a и:.

Здесь может возникнуть закономерный вопрос - а что, если приложению нужно непосредственно передать комбинацию клавиш Ctrl + a , которая уже используется в Screen как служебная? Например, такая же комбинация используется библиотекой редактирования командной строки readline для выполнения перехода в начало строки. Для этого случая в Screen предусмотрена следующая команда:

Управление окнами

В предыдущем разделе мы научились запускать Screen и выучили основной шаблон для всех клавишных команд. Пришло время разобраться с командами для управления окнами. При запуске Screen создает одно окно (если только в конфигурации не указано создание сразу нескольких окон) и присваивает ему номер 0. Новое окно с командной оболочкой можно создать с помощью команды ниже:

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a c screen Создать новое окно

При этом Screen создаст новое окно и присвоит ему следующий по порядку номер.В нашем случае новым окном будет окно с номером 1.

Теперь у нас есть уже два текстовых окна, из которых текущим является только что созданное окно с номером 1, а окно с номером 0 находится в фоновом режиме. Но, надо заметить, что даже если окно находится в фоновом режиме, оно может воспринимать вывод запущенного в нем приложения, как если бы оно было текущим. Например, мы могли бы запустить в окне 0 процесс, который выводит дополнительную информацию через определенные промежутки времени (для примера это может быть команда tail -f) и затем переключиться в окно 1 для работы в текстовом редакторе. Через какое-то время, если мы захотим посмотреть, что происходит в окне 0, мы можем переключиться в это окно и увидеть весь вывод работающего там процесса. Затем можно переключиться обратно в окно редактирования.

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

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a w windows Выводит список номеров и заголовков всех окон в нижней строчке экрана
Ctrl + a « windowlist Выводит интерактивный список номеров и заголовков всех окон из которого можно выбрать окошко для переключения
Ctrl + a Номер окна select Выбор окна по номеру. Например, команда Ctrl + a и 0 делает текущим окно с номером 0
Ctlr + a n next Переключиться на следующее по порядку окно, или на первое окно если мы находились в последнем окне
Ctrl + a p prev Переключиться на предыдущее по порядку окно, или на последнее окно если мы находились в первом окне
Ctrl + a select Вывести приглашение ввода номера окна для переключения
Ctrl + a Ctrl + a other Переключиться на последнее использованное окно
Ctrl + a N number Показать номер и заголовок текущего окна
Ctrl + a A title Установить заголовок текущего окна
Ctrl + a k kill Принудительное закрытие окна, например, в случае если приложение не удается закрыть обычным способом

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

Работа с текстом

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

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a M monitor Включить/выключить мониторинг активности для текущего окна. Когда мониторинг включен и в окне находящемся в фоновом режиме производится вывод текста, в служебной строке выводится информация об активности.
silence Включить/выключить мониторинг отсутствия активности для текущего окна. Когда мониторинг включен и в окне находящемся в фоновом режиме некоторый период времени не производится вывод текста в служебной строке выводится информация об отсутствии активности.
Ctrl + a h hardcopy Записать текстовое изображение текущего окна в файл hardcopy.номер_окна в каталоге Screen по умолчанию.
Ctrl + a H log Включить/выключить трассировку текста текущего окна в файл screenlog.номер_окна в каталоге Sccreen по умолчанию.
Ctrl + a [ copy Войти в режим копирования. Дополнительные команды этого режима описаны ниже.
Ctrl + a ] paste Вставить в окно текст из регистра по умолчанию (куда он предварительно был скопирован с помощью команды выше).

В режиме копирования Screen запускает текстовый редактор похожий на редактор Vi. Наиболее часто используемые команды редактора:

  • Клавиши управления курсором перемещают курсор по экранному буферу;
  • Клавиша «Пробел» отмечает начало и конец региона для копирования. При втором нажатии «Пробел» , отмеченный текст копируется в регистр по умолчанию, и Screen выходит их режима копирования;

Несколько окон на экране

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

На рисунке 2 изображен Screen с тремя именованными окнами (Work, Configuration, Logs) и разделенным на два региона экраном. В верхнем регионе открыто окно Work с текстовым редактором Vim и примером файла конфигурации Screen. В нижнем регионе окно Configuration с частью общего файла конфигурации /etc/screenrc.

Консольные сессии

И в завершение, мы рассмотрим одну из самых популярных возможностей Screen.Представим следующую ситуацию: системный администратор, находясь дома, заходит на удаленный сервер, открывает несколько окон, запускает необходимые задачи, затем закрывает соединение и едет на работу. На работе он опять заходит на тот же сервер и восстанавливает открытые дома окна с результатами выполненных задач. Звучит немного фантастично? Ни в коем случае! Консольные сессии Screen как раз и предназначены для осуществления этой задачи. Они позволяют отсоединить от терминала текущую сессию Screen со всеми окнами и выполняемыми приложениями и, затем в любой момент времени присоединиться к ней опять. При этом все выполняемые под Screen приложения будут продолжать работать и использовать свои окна для вывода информации. Плюс ко всему консольных сессий может быть несколько, но в этой статье мы не будем на этом подробно останавливаться.

Рассмотрим команды отсоединения консольной сессии от терминала:

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a d detach Отсоединить консольную сессию и оставить ее запущенной в фоновом режиме. При этом Screen пишет:
Ctrl + a D D pow_detach Отсоединить консольную сессию, оставить ее запущенной в фоновом режиме и послать родительскому процессу Screen сигнал HANGUP. При запуске Screen из удаленного терминала это означает отсоединение Screen и затем закрытие соединения. При этом Screen пишет:
Ctrl + a z suspend Отсоединить консольную сессию и оставить ее запущенной как фоновый процесс родительской командной оболочки. В этом случае для восстановления сессии кроме команд описанных ниже могут быть использованы стандартные команды управления фоновыми процессами командной оболочки
Ctrl + a Ctrl + quit Закрыть все окна сессии и выйти из Screen.Надо заметить, что многие дистрибутивы переопределяют клавишную комбинацию для этой команды, но текстовую команду можно использовать в любом случае

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

Что дальше?

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

  • Команды настройки эмуляции терминала;
  • Многопользовательские консольные сессии;
  • Назначение, или переназначение командам клавишных комбинации;
  • Вспомогательные опции текстовых команд. Например, опция -t команды screen, которая используется в примера файла конфигурации;
  • Редко используемые команды, например, команды, которые можно использовать при настройке запуска Screen - echo и sleep;
  • Переменные среды, которые могут быть полезны при настройке Screen;
  • Дополнительные ключи запуска Screen;

Альтернативы screen

Screen - это программа с большой историей, надо заметить, что первая версия появилась в 1987-м году. На данный момент, к Screen, практически, не добавляется новых возможностей (одной из причин может быть наличие уже большого их количества на данный момент) и производится, в основном, только исправление ошибок. Если кому-то не нравится относительная «старость» Screen, или не нужно такое большое количество возможностей, то можно обратиться к одной из следующих программ:

  • dtach () — основной акцент при разработке этой программы сделан на компактность. По аналогии со Screen она поддерживает возможность работы с консольными сессиями, но не имеет других возможностей Screen.
  • SplitVT (http://www.devolution.com/~slouken/projects/splitvt/) — позволяет разделать экран терминала на две половинки и работать сразу с двумя программными оболочками.
  • Tmux () — для работы с консольными сессиями Tmux использует модель клиент-сервер.
  • Twin (http://linuz.sns.it/~max/twin/) — попытка создать текстовый оконный интерфейс аналогичный графическим собратьям.

Сегодня столкнулся с проблемой – запустил команду, время выполнения которой занимало больше суток, а ее работа прервалась после обрыва соединения. Обидно конечно, но не смертельно.

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

Утилита Screen позволяет создавать при SSH соединении несколько экранов и переключаться между ними. Screen полностью решает проблему выполнения операций при разрывах соединения . Запустил команду в отдельном экране и можешь смело отключаться. Потом просто подключаешься и переходишь на нужный экран . Сессия при этом не теряется.

Пользоваться утилитой screen очень просто. Вводим в окне терминала команду screen и жмем Enter.


Если вылезет такое окно, то жмем пробел.


И еще разок на пробел.


Все – новый экран запущен.


Затем запускаем в созданном экране свою команду. Для примера введу htop.



Чтобы отключиться от экрана – жмем на клавиатуре Ctrl+A, а потом клавишу d.


После этого можно смело закрывать терминал. Ваша команда продолжит выполняться в отдельном экране.

Чтобы подключиться к нужному нам экрану, вводим команду screen -ls , которая выведет список всех запущенных экранов.



В моем случае их два:

root@raspberrypi:~# screen -ls
There are screens on:
4181.pts-0.raspberrypi (27.11.2013 11:53:14) (Detached)
3821.pts-0.raspberrypi (27.11.2013 11:03:55) (Detached)
2 Sockets in /var/run/screen/S-root.

Чтобы подключиться к нужному экрану, вводим команду:

screen -r 4181.pts-0.raspberrypi

(4181.pts-0.raspberrypi – название экрана, которое вывелось после команды screen –ls )



Вуаля. Мы видим запущенный ранее процесс.

Для выхода из сеанса screen нажмите Ctrl+D.

Всем успехов в изучении Linux.

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

На моей Ubuntu 10.04 Server Edition, Screen был установлен по умолчанию. Но, в Linux Mint нет Screen по умолчанию, мне нужно сначала установить его, при помощи команды apt-get. Пожалуйста, следите за процессом установки screen вашего дистрибутива.

# apt-get install screen (On Debian based Systems) # yum install screen (On RedHat based Systems)

На самом деле, Screen - очень хорошая команда в Linux, которая скрыта внутри сотни Linux команд. Давайте стартанем, чтобы увидеть функции Screen.

Запускаем Screen первый раз

Просто введите screen в командной строке. Затем появится screen с таким же интерфейсом, как в командной строке.

Pungki@mint ~ $ screen

Показать параметры screen

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

Наберите Ctrl-A и ? . Теперь вы увидите все команды или параметры на экране.

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

Чтобы выйти из этого экрана, нужно нажать на кнопку "пробела " или "Enter ". (Обратите внимание, что все шоткаты, которые используют "Ctrl-A ", используются без кавычек).

Отключить screen

Одним из преимуществ screen есть то, что его можно отключить. Затем вы можете восстановить его, не теряя информации, которую выполняли перед тем. Вот пример скрипта:

Вы находитесь в середине SSH-on на вашем сервере. Давайте предположим, что вы скачиваете 400MB патча для вашей системы с помощью команды wget .

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

Взгляните на эту команду. Во-первых, вы должны войти в screen.

Pungki@mint ~ $ screen

Затем вы можете создать процесс загрузки. Для примера, на моем Linux Mint я апгрейднул мой dpkg пакет с помощью команды apt-get .

Pungki@mint ~ $ sudo apt-get install dpkg

Пример выходных данных

Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be upgraded: dpkg 1 upgraded, 0 newly installed, 0 to remove and 1146 not upgraded. Need to get 2,583 kB of archives. After this operation, 127 kB of additional disk space will be used. Get:1 http://debian.linuxmint.com/latest/ testing/main dpkg i386 1.16.10 47% 14,7 kB/s

" и "d ". Вы ничего не увидите при нажатии этих клавиш. Результат будет выглядеть так:

Pungki@mint ~ $

Снова включить screen

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

Pungki@mint ~ $ screen -r

И вы увидите, что процесс возобновился с того места, где вы его оборвали.

Если у вас есть более чем 1 screen сессии, вам нужно ввести ID screen сессии. Используйте screen -ls, чтобы увидеть, сколько screen имеются.

Pungki@mint ~ $ screen -ls

Пример выходных данных

Pungki@mint ~ $ screen -ls There are screens on: 7849.pts-0.mint (10/06/2013 01:50:45 PM) (Detached) 5561.pts-0.mint (10/06/2013 11:12:05 AM) (Detached) 2 Sockets in /var/run/screen/S-pungki

Если вы хотите, то восстановите screen 7849.pts-0 .mint, затем введите эту команду.

Pungki@mint ~ $ screen -r 7849

Использование нескольких screen

Возможно ли запустить больше, чем 1 screen , чтобы выполнить работу? Да. Вы можете работать с несколькими окнами экрана одновременно. Есть 2 (два) способа сделать это.

Во-первых, вы можете отсоединить первый screen и запустить другой screen на терминале. Во-вторых, вы делаете вложения screen.

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

Когда у вас вложенные экраны, вы можете переключаться между ними с помощью команды "Ctrl-A " и "n ". Это будет переход к следующему экрану. Когда вам нужно вернуться к предыдущему экрану, нажмите "Ctrl-A " и "p ".

Чтобы создать новое окно экрана, просто нажмите "Ctrl-A " и "с ".

Залогинивание, которое вы делаете

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

С залогиниванием экрана вам не нужно записывать каждую команду, которую вы сделали. Для активации Функция регистрации экрана просто нажмите "strong>Ctrl-А" и "H ". (Пожалуйста, будьте осторожны, мы используем большую букву H . Использование маленькой буквы h только создаст скриншот экрана в отдельном файле).

В нижней левой части экрана появится уведомление, которое сообщает: Creating logfile “screenlog.0 “. Вы найдете screenlog.0 файл в вашем домашнем каталоге.

Эта функция будет добавлять все, что вы делаете, когда находитесь в окне экрана. Закройте экран, чтобы залогиниться, нажмите "Ctrl-А " и "Н " еще раз.

Pungki@mint ~ $ screen -L

Еще один способ, чтобы активировать функцию ведения журнала - вы можете добавить параметр "-L ", когда screen запускается первый раз. Команда будет выглядеть следующим образом.

Pungki@mint ~ $ screen -L

Screen блокировки

Screen также шоткат для блокировки экрана. Вы можете нажать "Ctrl-А " и "х " для блокировки экрана. Это удобно, если вы хотите быстро заблокировать экран. Вот пример вывода блокировки экрана после нажатия на шоткаты.

Screen used by Pungki Arianto on mint. Password:

Вы можете использовать свой Linux пароль, чтобы разблокировать его.

Добавить пароль для блокировки screen

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

Чтобы защитить ваш экран паролем, вы можете редактировать файл “$HOME/.screenrc ”. Если файла не существует, его можно создать вручную. Синтаксис будет таким.

Password crypt_password

Чтобы создать "crypt_password ", вы можете использовать команду "mkpasswd " на Linux. Вот команда с паролем "pungki123 ".

Pungki@mint ~ $ mkpasswd pungki123 l2BIBzvIeQNOs

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

Password l2BIBzvIeQNOs

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

Pungki@mint ~ $ screen -r 5741 Screen password:

Введите пароль "pungki123 " и экран подключится снова.

Как только вы запустите запрос пароля экрана и нажмете "Ctrl-А " и "х ", то на выходе будет это.

Screen used by Pungki Arianto on mint. Password: Screen password:

Вам нужно будет ввести пароль два раза . Первый раз - ваш пароль Linux , второй - пароль, который вы положили в файл .screenrc .

Выход из screen

Есть 2 (два) способа выхода из экрана. Первый - мы используем "Ctrl-А " и "d ", чтобы отключить его. Второй - мы можем использовать команду погашения экрана. Вы также можете использовать "Ctrl-А " и "К " чтобы прибить экрана.

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