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 ;) .