Є така чудова утиліта screen. про яку я раніше взагалі не знав! Тепер же намагаюся постійно використовувати. І, сподіваюся, після прочитання цієї статті, будете використовувати її і ви.
Отже, для чого вона потрібна?
Подивимося, як це працює:
Утиліта у мене була вже встановлена, про що радісно повідомила мені команда:
# Dpkg info | grep screen
Ну от і все! Тепер можна починати роботу.
Робота з сесіями Screen
Запускати screen можна набравши в консолі назва цієї програми. Ви відразу потрапите або в термінал, або на вікно запрошення, звідки після натискання пробілу або введення знову ж в термінал.
Подивитися всі сесії screen-а можна так:
Якщо сесії відкриті, то підключитися до них можна так:
або без імені, якщо сесія одна.
Створити сесію з певним ім'ям можна так:
Крім того, можна відразу запускати програми в Screen-сесію, набираючи їх:
Попрацювали ми зі скрін, тепер можемо або вбити сесію (вийшовши з оболонки), або відключитися від неї (Ctrl + D). При цьому все, що було в сесії продовжить виконуватися і далі.
Крім того в одному вікні screen можна використовувати кілька консолей.
Вбити сесію можна командою [Ctrl + a] і потім k.
Управління Screen-му
У screen-а вельми специфічне управління. Програмі, запущеної всередині нього передаються всі натискання клавіш, крім тих, що передує поєднанням Ctrl + a (за замовчуванням). Тобто щоб управляти screen-му - потрібно спершу натиснути цю комбінацію, а потім набрати керуючу клавішу.
Отже, створюємо нове вікно всередині сесії screen:
Чи можемо перейменувати це вікно, для того, щоб мати можливість швидко його знайти:
Набрали текст, тиснемо Enter.
Виведе нам інтерактивний список вікон з номерами та іменами, можна переключитися на будь-який.
Є варіанти вибрати не інтерактивний список [Ctrl + a] w. а так же перемикатися на наступне [Ctrl + a] n або на попереднє вікно [Ctrl + a] p. Або відразу на заздалегідь відомий номер вікна [Ctrl + a] 2. Зверніть увагу, що нумерація ведеться з нуля.
Це може бути дуже зручно ось для чого: припустимо, нам потрібно в реально часу моніторити будь-який процес. Припустимо, потрібно слухати log-файл постійно. Для цього нам потрібна команда
# Tail -f / path / to / log
яка буде в реальному часі забирати 10 останніх записів і виводити їх на екран. Створимо нову консоль screen так:
# Screen -d -m -S tail-log tail -f /var/log/nginx/error.log
- це створить нову сесію screen-а, тобто коли скріни поки не запущені взагалі. При наборі цієї команди, на перший погляд, нічого не відбувається. Насправді так і є. Створюється (-m) новий сеанс по імені "tail-log", в якому виконується команда "tail -f /var/log/nginx/error.log" (виводить 10 останніх записів лог-файлу в реальному часі), і цей сеанс запускається вже згорнутим (-d).
Якщо ж скрін у вас вже запущений, то можна створити нове вікно:
Перейменувати його в tail-log
І запустити там потрібну нам команду:
# Tail -f /var/log/nginx/error.log
Моніторинг змін вікна
Але і це ще не все. Зручності ще тільки починаються. Є ситуації, коли висновок будь-якого вікна довго залишається незмінним. Наприклад чекати, поки в логи потрапить будь-яка інформація може бути дуже довго. І screen дещо має на цей рахунок!
Запустили ми два вікна LOG в якому прослуховується лог-файл, і USER в якому наша консоль. Чекаємо поки в консолі. Реагувати будемо тоді, коли в прослуховується LOG щось прийде. Але не перемикатися ж постійно туди-сюди, з метою вловити зміни?
і включаємо моніторинг активності вікна. Тепер якщо текст вікна зміниться, то в списку вікон біля його імені буде відображено символ "@", а внизу вікна на декілька секунд з'явиться напис "Активність у вікні № ..."!
Так само є зворотна можливість моніторити "тишу", для цього використовується команда: [Ctrl + a] _.
Два вікна відразу
А чи можна відкрити два консольних вікна відразу? Звичайно можна! Screen дозволяє розділити вікно. Ось як ми це зробимо.
Поділяємо вікно на частини:
При цьому поточне вікно піде в верхню частину.
Перемикання на нижчий регіон (на перший, якщо вже на самому нижньому) здійснюється так:
Відкриваємо там іншу консоль:
і вибираємо її по імені. Імена вікон підсвічуються (0 LOG, 1 USER) щоб ми не заплутали між ними.
2 вікна відразу? легко
Переміщаючи фокус введення по Tab-у, як описано вище, ми, нарешті, награлися. Закриваємо вікна.
# [Ctrl + a] X - закриває поточний регіон, [Ctrl + a] Q закриває всі інші, крім поточного. Дивлячись що вам потрібно.
Для цього є команда
# [Ctrl + a] [. при цьому можна переміщатися по вікну курсорними клавішами, для визначення початку текстового фрагмента тиснемо пробіл. Рухаючи стрілочками курсор, відзначаємо кінець виділення і знову тиснемо пробіл. Все, фрагмент скопійовано. Вставляється він в цей же або інше вікно натисканням [Ctrl + a]]. Все просто!
Ведення логу і принт-скрін
Так само можна вести трасування всього тексту, що видається в вікно в особливий файл screenlog.
Тепер все результати вашої роботи будуть Залогуватися і можна подивитися історію не тільки введення, а й виведення.
Так само команда для зняття поточного вікна
конфігурація
Для себе можна конфігурувати Screen дуже гнучко. Після запуску виконуються команди в конфігах / etc / screenrc і персональні .screenrc в каталозі користувача.
У кожної клавіатурній команди є і текстовий варіант для конфіга, який можна подивитися в довідці.
Але для прикладу ось такий конфіг, в якому відключаємо вітання, створюємо заголовок і рядок статусу, створюємо два вікна USER і LOG, в яких відкриваємо відповідні каталоги, робимо активним перше вікно USER.
startup_message off
caption always "%% Screen:% n |% h% =% t% c"
hardstatus alwayslastline "% -Lw %% 50>% n% f *% t %% + Lw%<"
chdir / root /
screen -t USER
chdir / var / log / nginx /
screen -t LOG
select 0
Тепер при простому запуску скрін у нас буде наступне:
Зручний робочий стіл