Многим часто приходится иметь дело с работой на удаленных серверах по ssh. При этом, могут возникать самые разные проблемы с соединением, и есть вероятность того что результат долгой и напряженной работы будет потерян из-за банального дисконнекта. Хорошо иметь возможность подключаться и отключаться от удаленных хостов, сохраняя терминальные сессии. В этом, а так же во многом другом, может помочь почти "классическая" утилита screen. Скорее всего, screen уже установлен на вашей linux-машине (если нет - самое время установить) и на серверах, с которыми вы собираетесь работать.
Итак, начинаем работу. Запустить новый screen можно, как ни странно, просто командой screen без параметров:
diesel@debian:~$ screen
При этом, в зависимости от настроек screen в вашей системе, либо просто появится приглашение шелла, либо "экран приветствия", нажав SPACE или ENTER в котором, вы так же попадете в shell. Вроде бы ничего необычного, кроме того, что этот shell будет уже запущен "внутри" screen'а.
Для того, чтобы выйти из screen'а (выйти, а не отсоединиться) достаточно выйти из всех открытых в нем оболочек, либо же, нажать комбинацию клавиш Ctl-a \, и ответить "y" на вопрос "действительно ли вы хотите выйти".
Отсоединиться от текущего скрина, не закрывая и не завершая сессии, можно комбинацией Ctrl-a d.
Если на машине уже есть запущенная screen-сессия, и вы хотите подсоединиться к ней, то
- если сессия одна, достаточно просто команды:
diesel@debian:~$ screen –x
- если сессий несколько, то:
посмотреть список запущенных screen'ов можно командой screen -ls:
diesel@debian:~$ screen -ls
There are screens on:
2762.pts-0.debian (Detached)
2743.pts-0.debian (Detached)
2 Sockets in /var/run/screen/S-diesel.
diesel@debian:~$
Выбираем нужный нам screen, и присоединяемся к нему:
screen -x 2762.pts-0.debian
Названия сессий по-умолчанию малоинформативны - просто номера процессов, если есть желание запустить и использовать несколько screen-сессий для разных задач, можно придумать более вменяемые названия. Придумываем название, затем запускаем новый screen вот таким образом:
diesel@debian:~$ screen -S "job1"
где job1 - это название нашей "именнованной" сессии. Теперь в -ls мы увидим гораздо более понятное:
diesel@debian:~$ 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, просто указав ее имя:
diesel@debian:~$ screen -x job1
Как вы уже поняли, сессии сохраняются даже в то время, когда вы отключны от сервера, и все что в них запущено, продолжает выполняться. Впрочем, на этом возможности 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 с помощью файла ~/.screenrc, в вашем домашнем каталоге. Например, можно написать туда вот такую абракадабру:
caption always "%{= 45}%{+b w}Screen: %n | %h %=%t %c"
hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"
Для того, чтобы получить все время видимый список открытых окон, и другую полезную информацию внизу экрана.
Вот примерно так маленький и незаметный screen может существенно облегчить жизнь.