From: Roman Shramko <http://dormestmass.blogspot.com>
Date: Mon, 3 Jan 2008 14:31:37 +0000 (UTC)
Subject: Пример использования консольного оконного менеджера screen
Одной из самых первых утилит, которые я ставлю на свежеустановленный
сервер является screen. Эта маленькая программка является воистину
незаменимой во многих случаях, особенно, если дело касается работы с
удаленными хостами.
Основной задачей screen, как видно из её названия, является создание и
управление множеством виртуальных терминалов в рамках одной
login-сессии. Однако, воистину волшебной является возможность
отключения от текущей сессии и последующее подключение к ней. Эта
особенность хорошо зарекомендовала себя при работе с серверами по
низкоскоростным и малонадежным каналам связи, таких как GPRS или PPP.
Что такого полезного в этой особенности? Я думаю, что те, кто хотя бы
раз пытался произвести длительный по времени процесс компиляции,
напримем пересобрать мир на удаленном сервере с FreeBSD, меня поймут.
Разорвался канал -- наша песня хороша, начинай сначала :).
После запуска screen сразу создает 0-е окно, запускает в нем shell и
помещает туда пользователя. Все последующие операции выполняются при
помощи клавиатурных комбинаций, которые начинаются с "Ctrl-a".
Как уже было сказано выше, для меня самой востребованной возможностью
является отключение от текущей сессии.
Выполняется эта процедура при помощи комбинации "Ctrl-a d". После
этого можно смело закрывать ssh-сессию и заниматься другими делами.
Прицепится обратно к запущенной сессии можно при помощи ключа -r. Если
у нас запущено несколько сессий screen на одном хосте, то
дополнительно придется указать PID запущенного screen-a, в который мы
хотим попасть.
server ~ # screen -r
There are several suitable screens on:
31624.pts-0.server (Detached)
31047.pts-13.server (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
Иногда, если отключение от сессии произошло не вручную, а из-за
разрыва канала связи, возникает следующая ситуация:
server ~ # screen -r
There is a screen on:
31047.pts-13.server (Attached)
There is no screen to be resumed.
Эту проблему легко побороть, использовав при запуске два ключа -d -r.
Значительно реже я использую возможности работы с виртуальными
экранами. Вот набор команд для проведения операций над ними:
Ctrl-a c Создать новое окно
Ctrl-a пробел Открыть следующее окно
Ctrl-a backspace или del Открыть предыдущее окно
Ctrl-a 0-9 Выбор окна 0-9
Ctrl-a Ctrl-a Переключение между текущим и предыдущим окнами
Ctrl-a w Вывести список окон. Текущее окно будет отмечено звездочкой (*)
Закрыть текущее окно можно либо комбинацией "Ctrl-a k", либо просто
выйдя из шелла, запущенного в этом окне.
Ещё одной фичей screen-a является возможность выполнения операций
копирования/вставки между окнами. Для включения режима копирования
служит команда "Ctrl-a [" В режиме копирования курсор передвигается
при помощи стрелок, либо при помощи буквенных клавиш h,j,k,l. Начало
копируемого блока и его конец отмечается при помощи пробела. Вставка
скопированного блока выполняется при помощи команды "Ctrl-a ]".
Ну и напоследок стоит упомянуть о краткой встроенной справке, которая
вызывается при помощи комбинации "Ctrl-a ?" Кроме того,
вышеописанными командами возможности screen-a не ограничиваются.
Подробности -- в man 1 screen ;).