Screen — несколько экранов в одной SSH сессии

Опубликовано:

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

Установка screen

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

$ sudo apt-get install screen

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

$ screen

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

Если нужно слушать log-файл постоянно и выводить их на экран. Создадим новую консоль screen так:

screen -d -m -S tail-log tail -f /var/log/nginx/error.log

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

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

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

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

  1. если сессия одна, достаточно просто команды: Ctrl+A потом 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 потом ? — вывести все доступные команды и параметры, для выхода пробел или Enter
Ctrl+A потом c — create создать окно screen
Ctrl+A потом p — strongvios переключиться к предыдущему окну screen
Ctrl+A потом n — next переключиться к следующему окну screen
Ctrl+A потом d — deatached отключиться от screen оставив сеанс работающим
Ctrl+A потом K — kill убить сеанс screen
Ctrl+A потом x — блокировка экрана, для разблокировки необходимо ввести пароль Linux.
Ctrl+A потом w — список запущенных в скрине окон
Ctrl+A потом A — подписать название разным окнам в скрине
Ctrl+A потом | — разделить окна по вертикали, после Ctrl+A вертикальная черта (не L маленькая) или введите split -v
Ctrl+A потом S — разделить окна по горизонтали
Ctrl+A потом Tab — переход между половинами
Ctrl+A Q — скрыть все окна и оставить только текущее
Ctrl+D — выйти из сеанса screen

Копирование текста между окнами и прокрутка экрана

Ctrl+A потом [ — переключит screen в Copy mode, при этом можно перемещаться по окну курсорными клавишами, для определения начала текстового фрагмента жмём пробел. Двигая стрелочками курсор, отмечаем конец выделения и снова жмём пробел. Всё, фрагмент скопирован. Вставляется он в это же или другое окно нажатием [Ctrl+a] ].

Для выхода из этого режима просто нажмите Esc.

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

Если открыто несколько окон, полезной может быть возможность следить за активностью в каком-то из них. Например, если вы запустили команду и интересно узнать, когда она завершится. Переходим в окно с этой командой , жмем

Ctrl+A потом m — и включаем мониторинг активности окна. Теперь если текст окна изменится, то screen подаст звуковой сигнал, в списке окон возле его имени будет отображен символ “@”, а внизу окна на несколько секунд появится надпись “Активность в окне №…”!

Ведение лога и принт-скрин

Так же можно вести трассировку всего текста, выдаваемого в окно в особый файл screenlog. где N – номер окна.

Ctrl+A потом H

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

Так же команда для снятия текущего окна

Ctrl+A потом h

передает в файл hardcopy. только содержимое текущего окна, а не мониторит ввод-вывод постоянно. Аналог принт-скрина.

Конфигурация 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» .

Понравилась статья, расскажи о ней друзьям, нажми кнопку!