Screen — несколько экранов в одной SSH сессии
Screen — очень удобная программа, если вы часто работаете в консоли, подключившись к серверу по SSH. В таком случае screen позволяет держать в одной консоли несколько разных экранов, удобно переключаясь между ними.
- Установка screen
- Подключение к screen
- Переключение между окнами screen
- Копирование текста между окнами и прокрутка экрана
- Мониторинг выполнения команды
- Ведение лога и принт-скрин
- Конфигурация screen
- Завершение 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-сессия, и вы хотите подсоединиться к ней, то
- если сессия одна, достаточно просто команды: Ctrl+A потом x
- если сессий несколько, то: посмотреть список запущенных 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.
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» .