Однією з самих перших утиліт, котрі я ставлю на щойно піднятий сервер є screen.
Ця маленька утиліта є незамінною в багатьох випадках, особливо, якщо це стосується роботи з віддаленими хостами. Основною задачою screen, як видно з її назви, є створення та керування багатьма віртуальними терміналами в рамках однієї login-сесії. Однак, най більш чудовою є можливість відключення від поточної сесії та підключення до неї через будь-який час. Ця особливість добре зарекомендувала себе при роботі з серверами по низько швидкісним і малонадійним каналам зв'язку, таких як GPRS чи PPP.
Що ж такого корисного в цій особливості? Я думаю, що ті, хто хочаб раз намагався виконати тривалий за часом процес компіляції, наприклад перезібрати "світ" на віддаленому сервері з FreeBSD, мене зрозуміють. Розірвався канал — починай все з початку :) . Після запуску screen одразу створює 0-е вікно, запускає в ньому shell і поміщає туди користувача. Всі наступні операції виконуються за допомогою клавіатурних комбінацій, котрі починаються з «Ctrl-a»
.
Як вже було сказано вище, для мене самою затребуваною можливістю є відключення від поточної сесії. Виконується ця процедура за допомогою комбінації «Ctrl-a d»
. Після цього можна сміливо закривати ssh-сесію та займатися іншими справами. Причепитися знову до запущеної сесії можна за допомогою ключа -r. Якщо у нас запущено декілька сесії screen на одному хосту, то додатково потрібно вказати PID запущеного screen-у, в який ми хочемо потрапити.
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 space
Відкрити наступне вікно
Ctrl-a backspace
чи Ctrl-a 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-у не обмежуються. Подробиці — в man 1 screen ;)