Screen – керування вікнами з консолі. Основи використання команди screen та приклади в Linux Screen debian команди

Screen – це повно-екранна програма, яка може бути використана для мультиплексів фізичної консолі між кількома процесами (звичайно інтерактивними оболонками). Вона пропонує користувачеві відкривати кілька окремих терміналів в одному віконному менеджері терміналу.

На моїй Ubuntu 10.04 Server Edition, Screen був встановлений за замовчуванням. Але в Linux Mint немає Screen за замовчуванням, мені потрібно спочатку встановити його за допомогою команди apt-get. Будь ласка, стежте за процесом встановлення screen вашого дистрибутива.

# apt-get install screen (On Debian based Systems) # yum install screen (On RedHat based Systems)

Насправді Screen - дуже хороша команда в Linux, яка прихована всередині сотні Linux команд. Давайте стартанем, щоб побачити функції Screen.

Запускаємо Screen вперше

Просто введіть screen у командному рядку. Потім з'явиться screen з таким самим інтерфейсом, як у командному рядку.

Pungki@mint ~ $ screen

Показати параметри screen

Увійшовши в screen, можна виконувати різні дії, як і в нормальному довкіллі CLI. Але так як screen - це програма, тому вона має команди або параметри.

Наберіть Ctrl-Aі ? . Тепер ви побачите всі команди чи параметри на екрані.

Key bindings, page 1 of 1. Command key: ^A Literal ^A: a break ^B b flow ^F f lockscreen ^X x pow_break B screen ^C c width W clear C focus ^I log H pow_detach D select " windows ^W w colon: hardcopy h login L prev ^H ^P p ??silence _ wrap ^R r copy ^[< suspend ^Z z xoff ^S s digraph ^V info i next ^@ ^N sp n redisplay ^L l time ^T t xon ^Q q displays * kill K k number N remove X title A dumptermcap . lastmsg ^M m only Q removebuf = vbell ^G fit F license , other ^A reset Z version v ^] paste . " windowlist -b - select - 0 select 0 1 select 1 2 select 2 3 select 3 4 select 4 5 select 5 6 select 6 7 select 7 8 select 8 9 select 9 I login on O login off ] paste .

Щоб вийти з цього екрану, потрібно натиснути кнопку " пробілу" або " Enter". (Зверніть увагу, що всі шоткати, які використовують" Ctrl-A", використовуються без лапок).

Вимкнути screen

Однією з переваг screen є те, що його можна вимкнути. Потім можна відновити його, не втрачаючи інформації, яку виконували перед тим. Ось приклад скрипту:

Ви знаходитесь в середині SSH-onна сервері. Давайте припустимо, що ви завантажуєте 400MB патча для вашої системи за допомогою команди wget.

Процес завантаження триватиме близько двох годин. Якщо вимкнути SSHсесію або обірвати зв'язок через аварію, то процес завантаження зупиниться. Вам доведеться почати все спочатку. Щоб уникнути цього, ми можемо використовувати screen та вимкнути його.

Погляньте на цю команду. По-перше, ви повинні увійти до screen.

Pungki@mint ~ $ screen

Потім можна створити процес завантаження. Для прикладу, на моєму Linux Mint я апгрейднув мій dpkgпакет за допомогою команди apt-get.

Pungki@mint ~ $ sudo apt-get install dpkg

Приклад вихідних даних

Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be upgraded: dpkg 1 upgraded, 0 newly installed, 0 to remove and 1146 not upgraded. Необхідно отримати 2,583 kB of archives. Після цієї операції, 127 кБ додаткового дискового простору буде використано. Get:1 http://debian.linuxmint.com/latest/ testing/main dpkg i386 1.16.10 47% 14,7 kB/s

"і" dВи нічого не побачите при натисканні цих клавіш. Результат буде виглядати так:

Pungki@mint ~ $

Знову ввімкнути screen

Після того, як ви відключили screen, наприклад, будемо вважати, що ви обірвали SSHсесію і пішли додому. Вдома ви запускаєте SSHзнову на вашому сервері, і ви хочете побачити, як проходить процес завантаження. Щоб це зробити, вам потрібно відновити screen. Ви можете виконати наступну команду:

Pungki@mint ~ $ screen -r

І ви побачите, що процес відновився з того місця, де його обірвали.

Якщо у вас є більш ніж 1 screenсесії, вам потрібно ввести ID screen сесії. Використовуйте screen -ls, щоб побачити скільки screen є.

Pungki@mint ~ $ screen -ls

Приклад вихідних даних

Pungki@mint ~ $ screen -ls There are screens on: 7849.pts-0.mint (10/06/2013 1:50:45 PM) (Detached) 5561.pts-0.mint (10/06/2013 11 :12:05 AM) (Докладно) 2 Sockets in /var/run/screen/S-pungki

Якщо ви хочете, то відновіть screen 7849.pts-0.mint, потім введіть цю команду.

Pungki@mint ~ $ screen -r 7849

Використання кількох screen

Чи можливо запустити більше, ніж 1 screen, щоб виконати роботу? Так. Ви можете працювати з кількома вікнами екрана одночасно. Є два (два) способи зробити це.

По-перше, ви можете від'єднати перший screen та запустити інший screen на терміналі. По-друге, ви робите вкладення screen.

Перемикання між screen

Коли у вас вкладені екрани, ви можете перемикатися між ними за допомогою команди. Ctrl-A"і" n". Це буде перехід до наступного екрану. Коли вам потрібно повернутися до попереднього екрану, натисніть " Ctrl-A"і" p".

Щоб створити нове вікно екрану, просто натисніть " Ctrl-A"і" з".

Закладення, яке ви робите

Іноді важливо записати те, що ви зробили в той час, коли знаходилися в консолі. Припустимо, ви - адміністратор Linux, який управляє безліччю Linux серверів.

З закладанням екрана вам не потрібно записувати кожну команду, яку ви зробили. Для активації Функція реєстрації екрана просто натисніть "strong>Ctrl-А" та " H". (Будь ласка, будьте обережні, ми використовуємо велику букву H. Використання маленької літери hтільки створить скріншот екрану в окремому файлі).

У нижній лівій частині екрана з'явиться повідомлення, яке повідомляє: Creating logfile “ screenlog.0“. Ви знайдете screenlog.0файл у вашому домашньому каталозі.

Ця функція буде додавати все, що ви робите, коли у вікні екрана. Закрийте екран, щоб залогінитись, натисніть " Ctrl-А"і" Н" ще раз.

Pungki@mint ~ $ screen -L

Ще один спосіб активувати функцію ведення журналу - ви можете додати параметр " -L", коли screen запускається вперше. Команда буде виглядати так.

Pungki@mint ~ $ screen -L

Screen блокування

Screen також шоткат для блокування екрану. Ви можете натиснути " Ctrl-А"і" хдля блокування екрана. Це зручно, якщо ви хочете швидко заблокувати екран. Ось приклад виведення блокування екрана після натискання на шоткати.

Screen used by Pungki Arianto on mint. Password:

Ви можете використовувати свій Linux пароль, щоб розблокувати його.

Додати пароль для блокування screen

Для безпеки, ви можете поставити пароль на вашу screen сесію. Ввести пароль буде запропоновано, коли ви хочете повторно приточити screen. Цей пароль відрізняється від механізму блокування екрана вище.

Щоб захистити свій екран паролем, ви можете редагувати файл “ $HOME/.screenrc”. Якщо файл не існує, його можна створити вручну. Синтаксис буде таким.

Password crypt_password

Щоб створити " crypt_password", Ви можете використовувати команду " mkpasswd" на Linux. Ось команда з паролем " pungki123".

Pungki@mint ~ $ mkpasswd pungki123 l2BIBzvIeQNOs

mkpasswdбуде генерувати пароль, як показано вище. Як тільки ви отримаєте пароль, ви можете скопіювати його у файл " .screenrc" і зберегти. Тепер файл " .screenrcбуде виглядати так.

Password l2BIBzvIeQNOs

При наступному запуску екрана відключіть його, і пароль буде запитуватись при спробі повторно ввімкнути екран, як показано нижче:

Pungki@mint ~ $ screen -r 5741 Screen password:

Введіть пароль " pungki123" і екран знову підключиться.

Як тільки ви запустите запит пароля екрану та натисніть " Ctrl-А"і" х", то на виході це буде.

Screen used by Pungki Arianto on mint. Password: Screen password:

Вам потрібно буде ввести пароль два рази. Перший раз – ваш пароль Linux, другий - пароль, який ви поклали у файл .screenrc.

Вихід із screen

Є два (два) способи виходу з екрану. Перший - ми використовуємо " Ctrl-А"і" d", щоб вимкнути його. Другий - ми можемо використовувати команду погашення екрану. Ви також можете використовувати "Ctrl-А"і" Дощоб прибити екрана.

Є така чудова утиліта screen, Про яку я раніше взагалі не знав! Тепер намагаюся постійно використовувати. І, сподіваюся, після прочитання цієї статті, використовуватимете її і ви.

Отже, навіщо вона потрібна?

Скільки разів була ситуація, коли, працюючи в терміналі по SSH отримував дисконнект і всі напрацювання (відкритий конфіг або процес копіювання) губилися. Screen дозволяє запускати у своєму оточенні сеанси користувача і отримувати до них доступ, маючи різні віртуальні консолі. Можна залишити відкритим конфіг будь-якого сервісу, відключитися під кінець робочого дня, приїхати додому і підключитися до цього ж сеансу з дому та все, що було в терміналі, буде доступно, включаючи історію, відкритий редактор і т.д. Розриви зв'язку тепер не на заваді. Можна мати кілька різних сеансів та підключатися до них довільно!

Подивимося, як це працює:

Утиліта в мене була вже встановлена, про що радісно повідомила мені команда:

# dpkg info | grep screen

Ну от і все! Тепер можна розпочинати роботу.

Робота з сесіями Screen

Запускати screen можна, набравши в консолі назву цієї програми. Ви відразу потрапите або в термінал, або на вікно запрошення, звідки після натискання пробілу або введення знову ж таки в термінал.

Подивитися всі сесії screen-а можна так:

Якщо сесії відкриті, то підключитися до них можна так:

# screen -x Ім'я

або без імені, якщо сесія одна.

Створити сесію з певним ім'ям можна так:

# screen -S "name"

Крім того, можна відразу запускати програми в Screen-сесію, набираючи їх:

# screen<команда>

Попрацювали ми зі скрином, тепер можемо або вбити сесію (вийшовши з оболонки), або відключитися від неї (Ctrl+D). При цьому все, що було в сесії, продовжуватиме виконуватися і далі.

Крім того, в одному вікні screen можна використовувати кілька консолей.

Вбити сесію можна командою і потім k.

Управління Screen-ом

У screen-а дуже специфічне управління. Програмі, запущеній всередині нього передаються всі натискання клавіш, крім тих, що передуються поєднанням Ctrl+a(за замовчуванням). Тобто. щоб керувати screen-ом - потрібно спершу натиснути цю комбінацію, а потім набрати керуючу клавішу.

Отже, створюємо нове вікно всередині сесії screen:

# c

Можемо перейменувати це вікно, щоб мати можливість швидко його знайти:

# A

Набрали текст, тиснемо Enter.

Переглянути всі вікна можна так:

#

Виведе нам інтерактивний список вікон із номерами та іменами, можна переключитися на будь-яке.

Є варіанти вибрати не інтерактивний список w, а також перемикатися на наступне nабо на попереднє вікно p. Або відразу на заздалегідь відомий номер вікна 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).

Якщо ж скрін у вас вже запущено, то можна створити нове вікно:

# c

Перейменувати його на tail-log

# A

І запустити там потрібну нам команду:

# tail -f /var/log/nginx/error.log

А в іншому вікні, аналогічним чином, відкрити редактор правил файрволла і додавати в DENY тих, хто нам явно небажаний. Ну чи інше подібне застосування, коли потрібно швидко перемикатися з вікна у вікно.

Моніторинг змін вікна

Але це ще не все. Зручності ще тільки починаються. Є ситуації, коли виведення якогось вікна довго залишається незмінним. Наприклад, чекати, поки в логи потрапить будь-яка інформація може бути дуже довго. Та screen Дещо має на цей рахунок!

Запустили ми два вікна LOG у якому прослуховується лог-файл, та USER у якому наша консоль. Чекаємо поки що в консолі. Реагувати будемо тоді, коли в LOG, що прослуховується, щось прийде. Але не перемикатися постійно туди-сюди, з метою вловити зміни?

Натискаємо поєднання:

# M

та включаємо моніторинг активності вікна. Тепер, якщо текст вікна зміниться, то у списку вікон біля його імені буде відображено символ “@”, а внизу вікна на кілька секунд з'явиться напис “Активність у вікні №…”!

Також є зворотна можливість моніторити "тишу", для цього використовується команда: _ .

Два вікна відразу

А чи можна відкрити два консольні вікна відразу? Звичайно можна! Screen дозволяє поділити вікно. Ось як ми це зробимо.

Розділяємо вікно на частини:

# S

При цьому поточне вікно піде у верхню частину.

Перемикання на нижчий регіон (на перший, якщо вже на самому нижньому) здійснюється так:

# Tab

Відкриваємо там іншу консоль:

#

і вибираємо її на ім'я. Імена вікон підсвічуються (0 LOG, 1 USER), щоб ми не заплутали між ними.
2 вікна одразу? Легко

Переміщаючи фокус введення по Tab-у, як описано вище, ми награлися. Зачиняємо вікна.

# X- Закриває поточний регіон, Qзакриває решту, крім поточного. Дивлячись, що вам потрібно.

Копіювання тексту між вікнами

Є ще одна цікава можливість копіювання тексту між вікнами через особливий буфер.

Для цього є команда

# [ , при цьому можна переміщатися вікном курсорними клавішами, для визначення початку текстового фрагмента тиснемо пробіл. Рухаючи стрілочками курсор, відзначаємо кінець виділення і знову тиснемо пробіл. Все фрагмент скопійований. Вставляється він у це чи інше вікно натисканням ] . Все просто!

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

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

#H

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

Також команда для зняття поточного вікна

#h

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

Конфігурування

Для себе можна налаштувати Screen дуже гнучко. Після запуску виконуються команди у конфігах /etc/screenrc та персональні.screenrc у каталозі користувача.

У кожної клавіатурної команди є текстовий варіант для конфіга, який можна подивитися в довідці.

Але для прикладу такий конфіг, в якому відключаємо вітання, створюємо заголовок і рядок статусу, створюємо два вікна USER і LOG, в яких відкриваємо відповідні каталоги, робимо активним перше вікно USER.
startup_message off
caption always "%(= 45)%(+b w)Screen: %n | %h %=%t %c"
hardstatus alwayslastline "%-Lw%(= BW)%50>%n%f* %t%(-)%+Lw%<"
chdir /root/
screen -t USER
chdir /var/log/nginx/
screen -t LOG
select 0

Тепер при простому запуску скрина у нас буде таке:

Довідка

Є й інші можливості, які можна побачити так.

Понад рік однокласник підбивав мене почати використовувати screen під час роботи. Минав час, у мене все ніяк не доходили до цього руки. А даремно…

Screen - це повноекранний віконний менеджер, що дозволяє з одного термінального сеансу працювати відразу з кількома вікнами. Іншими словами, підключившись до віддаленої машини по ssh, ви зможете працювати відразу з кількома його вікнами всередині однієї сесії подібно до натискання ctrl+alt+f1, ctrl+alt+f2… У програми є одна важлива особливість: при обриві зв'язку або відключенні від «скрину» процеси, у ньому запущені не зупиняються і до них можна повернутися будь-якої миті. Цьому можна визначити масу застосувань. Наприклад, працюючи з віддаленим сервером можна бути впевненим у тому, що запущене компілювання програми дійде до кінця, навіть якщо раптом обірветься зв'язок.

Встановлення

Встановлюється програма як зазвичай, наприклад, в Ubuntu так:

apt-get install screen

Варто також помітити, що в моїй Ubuntu 10.04 Desktop цей пакет вже був у системі.

Використання Screen

Запуск програми:

Після запуску програми буде показано коротку інформацію про неї. Для того, щоб прибрати її, натискаємо enter або пробіл. Ви можете подумати, що нічого не сталося, але це не так: ви всередині терміналу, запущеного в screen. Після цього ми бачимо звичну консоль.

Для подачі команд screen використовується поєднання клавіш ctrl+a. Нижче наведено список основних команд, що служать для управління оболонкою:

  • c — створення нового вікна
  • n — перемикання до наступного вікна
  • p — перемикання до попереднього вікна
  • k - закриття вікна
  • d - відключення від скрина
  • » - Список запущених у скрині вікон

Наприклад, для створення нового вікна потрібно натиснути ctrl+a та натиснути клавішу c.

При відключенні від скрина всі вікна та процеси, запущені в них, продовжують виконуватися. Для перегляду запущених скринів використовується команда:

Висновок команди буде приблизно таким:

There are screens on:
18388.pts-4.asid-ubuntu-vm (23.09.2010 05:05:30) (Detached)
18272.pts-0.asid-ubuntu-vm (23.09.2010 04:54:23) (Detached)
2 Sockets in /var/run/screen/S-root.

Для того, щоб підключитися до запущеного скрин, виконуємо команду screen -r . Наприклад, так:

screen -r 18388.pts-4.asid-ubuntu-vm

або коротше:

Якщо ви забули відключитися від скрина з іншої машини (у виводі screen -ls поруч із ним буде напис atached), перехопити його можна за допомогою параметра -rd:

screen -rd 18388

Для підключення до останнього скрин можна просто:

Ну от, начебто, і все. Докладніше про ці та інші команди, як завжди, у мані.

Screen – це консольна програма, що дозволяє використовувати кілька термінальних сесій в одному вікні. Програма діє в рамках сесії оболонки і виступає як контейнер і менеджер для інших термінальних сесій, подібно до того, як менеджер вікон управляє вікнами.

У багатьох випадках створення кількох термінальних вікон неможливо. Можливо, доведеться керувати кількома сесіями консолі, не запускаючи сервер X; може бути потрібний швидкий доступ до кількох віддалених хмарних серверів або виведення на монітор працюючої програми під час роботи над якимось іншим завданням. Всі ці потреби легко задовольнити консолі Screen.

Встановлення

Цей посібник використовує Ubuntu 12.04; на кожному сучасному дистрибутиві всі команди, крім установки, будуть такими самими.

Щоб встановити консоль на Ubuntu, використовуйте команду apt-get:

sudo apt-get update
sudo apt-get install screen

Основи використання

Щоб розпочати сесію screen, просто викличте команду «screen»:

screen
Screen version 4.00.03jw4 (FAU) 2-May-06
Copyright (c) 1993-2002 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann
Цей program is free software; Ви можете відновити це і/або змінити його під
the terms of the GNU General Public License як published by the Free Software
Foundation; either version 2, or (at your option) any later version.
Цей program is distributed in hope that it will be useful, but WITHOUT
ANY WARRANTY; без будь-яких іmplied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. Відомості про GNU General Public License for more details.
Ваша особа повинна бути отримана з GNU General Public License along with
this program (see the file COPYING); if not, write до Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to
[email protected]

Під час запуску з'явиться сторінка ліцензування. Щоб продовжити, натисніть «Return» або «Enter».

Подальші дії програми можуть бути несподіваними. Надається звичайний командний рядок і, здається, нічого не відбувається. Може, трапилася помилка роботи screen? Щоб дізнатися про це, використовуйте швидке поєднання клавіш. Натисніть та утримуйте клавішу керування (Ctrl), натисніть «а», потім клавішу «v»:

Ця дія запитує у Screen інформацію про версію; виведений результат свідчить у тому, що консоль працює.

Тепер потрібно ознайомитись із керуванням консоллю. Screen керується переважно за допомогою клавішних комбінацій швидкого виклику. Кожна така комбінація повинна передувати «Ctrl-a» (затисніть клавішу «Ctrl» перед натисканням «а»). Така послідовність натискання клавіш говорить Screen звернути увагу на такі клавіші.

Цей принцип вже використовувався при запиті інформації про Screen. Використовуйте його ще раз, щоб отримати ще трохи корисної інформації.

Ctrl-a?
Screen key bindings, page 1 of 2.
Command key: ^A Literal ^A: a
break ^B b license , removebuf =
clear C lockscreen ^X x reset Z
colon: log H screen ^C c
copy ^[ [ login L select "
detach ^D d meta a silence _
digraph ^V monitor M split S
displays * next ^@ ^N sp n suspend ^Z z
dumptermcap. number N time ^T t
fit F only Q title A
flow ^F f other ^A vbell ^G
focus ^I pow_break B version v
hardcopy h pow_detach D width W
help? prev ^H ^P p ^? windows ^W w
history ( ) quit \ wrap ^R r
info i readbuf< writebuf >
kill K k redisplay ^L l xoff ^S s
lastmsg ^M m remove X xon ^Q q

Це список внутрішніх гарячих клавіш. Варто запам'ятати команду його виклику, оскільки це чудовий спосіб швидко отримати довідку. Як видно внизу файлу, щоб отримати більше команд, необхідно натиснути пропуск.

Тепер викличте команду «top», яка надає інформацію про процеси.

top
top - 16:08:07 1:44, 1 користувача, load average: 0.00, 0.01, 0.05
Tasks: 58 total, 1 running, 57 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 507620k total, 262920k used, 244700k free, 8720k buffers
Swap: 0k total, 0k used, 0k free, 224584k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 3384 1836 1288 S 0.0 0.4 0:00.70 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd/0
5 root 20 0 0 0 0 S 0.0 0.0 0:00.12 kworker/u:0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.07 watchdog/0
8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
11 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
12 root 20 0 0 0 0 S 0.0 0.0 0:00.03 sync_supers
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khubd
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md

Тепер можна переглянути процеси на VPS. Але які команди використовувати, щоб отримати докладнішу інформацію про запущені програми? Можна не виходити з команди top, а просто створити нове вікно для запуску цих команд.

Послідовність "Ctrl-a c" створює нове вікно. Тепер можна запустити будь-яку команду, не порушуючи запущених у іншому вікні команд (у разі це моніторинг процесів).

Куди зникло це інше вікно? До нього можна повернутися за допомогою команди:

Ця послідовність виводить наступне запущене вікно. Список вікон циклічно замкнутий, тому якщо за поточним вікном немає інших вікон, вона повертає перше вікно.

Ця послідовність перемикає вікна у зворотному порядку. Якщо, наприклад, запущено три вікна, і третє є поточним, команда виведе друге вікно.

При постійному перемиканні між двома вікнами корисно використовувати наступне поєднання клавіш:

Дана послідовність переводить користувача в вікно, що найчастіше відвідувається. У попередньому прикладі вона знову вивела б третє вікно.

Наразі відстеження всіх створених вікон може здатися неможливим. На щастя, консоль Screen надає кілька способів керування різними сесіями. Для початку створіть три нові вікна (всього вийде 4 вікна), а потім використовуйте один із найпростіших інструментів керування вікнами - "Ctrl-a w".

Ctrl-a c
Ctrl-a c
Ctrl-a c
Ctrl-a w
0$ bash 1$ bash 2-$ bash 3*$ bash

Ця команда надає корисну інформацію – список відкритих вікон. У цьому випадку відкрито 4 вікна. Кожне вікно має свій номер, починаючи з 0. Зірочка поруч із номером вказує на поточне вікно.

Як можна бачити, на даний момент вікно №3 є поточним (по суті воно четверте, так як нумерація починається з 0). Як швидко перейти на вікно №1?

Порядковий номер можна використовувати для прямого переходу до потрібного вікна. Знову відкрийте список вікон:

Ctrl-a w
0$ bash 1*$ bash 2$ bash 3-$ bash

Як можна бачити, тепер є вікно №1. Спробуйте інший спосіб перемикання між вікнами.

Ctrl-a “
Num Name Flags
0 bash $
1 bash $
2 bash $
3 bash $

На цей раз виведено навігаційне меню. Тепер можна переміщатися за допомогою стрілок вгору і вниз або клавіш «j» і «k», як це робиться в текстовому редакторі vi. Перейти на вибране вікно можна, натиснувши кнопку «Return» або «Enter».

Це досить корисно, але зараз усі вікна називаються «bash». Це не дуже зручно. Тепер треба дати назву сесії. Перейдіть на вікно, яке потрібно назвати, і використовуйте послідовність «Ctrl-a A».

Ctrl-a 0
Ctrl-a A
Set window"s title to: bash

За допомогою цієї послідовності можна дати сесії назву. За допомогою клавіші backspace зітріть bash і введіть будь-яке нове ім'я. Наприклад назвіть вікно №0 «monitoring» і запустіть у ньому команду «top».

Set window"s title to: monitoring
Ctrl-a “
Num Name Flags
0 monitoring $
1 bash $
2 bash $
3 bash $

Вікно №0 має зручніше ім'я.

Тепер можна створювати та перейменовувати вікна; але як позбутися непотрібного вікна?

Використовуйте послідовність "Ctrl-a k", що означає "kill":

Ctrl-a k
Really kill this window

Управління сесіями Screen

Щоб вийти зі Screen та закрити всі вікна, використовуйте наступну послідовність команд:

Ctrl-a \
Really quit and kill all your windows

Це завершить сесію Screen. Усі створені вікна, а також уся незавершена робота буде втрачено.

Використання Screen має одну величезну перевагу. Сесію можна не видаляти, а просто зняти. Зняття сесії дозволяє програмам, запущеним у Screen, продовжувати роботу, а також дає доступ до сесії основної консолі (тої, з якої починається робота зі Screen). Ця сесія Screen все ще існує, просто вона керується у фоновому режимі.

Ctrl-a d

Отже, сесію знято. Як повернутися в цю сесію?

Прапор "-r" означає "reattach", або "відновити". Але якщо існує кілька сесій Screen? Що якщо сесія Screen була створена та знята, а потім створена нова сесія, яка також була знята?

screen
Ctrl-a d
screen
Ctrl-a d

Як сказати Screen, яку сесію потрібно поновити?

screen –ls
There are screens on:
2171.pts-0.Blank (07/01/2013 05:00:39 PM) (Detached)
1835.pts-0.Blank (07/01/2013 3:50:43 PM) (Detached)
2 Sockets in /var/run/screen/S-justin.

Наразі виведено список сесій. Щоб відновити другу сесію, введіть її ідентифікаційний номер після прапора "-r".

screen –r 1835

Що, якщо потрібно відновити сесію на двох віддалених комп'ютерах або термінальних вікнах? Використовуйте прапор «-x», щоб розділити сесію.

Управління терміналами у Screen

Існує ряд команд, що дозволяє керувати сесіями терміналів, запущених у Screen.

Щоб скопіювати текст, використовуйте послідовність:

Ця послідовність надає курсор, який можна пересувати за допомогою клавіш зі стрілками або клавіш «h», «j», «k», «l» (як у vi). Переведіть курсор на початок фрагмента тексту, який потрібно скопіювати, та натисніть «Return» або «Enter». Потім переведіть курсор у кінець фрагмента і натисніть «Return» або «Enter». Текст буде скопійовано до буфера обміну.

Слід запам'ятати, що це також механізм прокручування цієї консолі. При необхідності переглянути текст, що знаходиться поза екраном, введіть «Ctrl-a [» і скористайтеся прокручуванням вгору.

Можна вставити скопійований текст за допомогою квадратної дужки, що закриває.

Також може знадобитись переглянути програми, запущені в іншому screen-вікні.

Наприклад, будь-які дані компілюються в одному вікні і потрібно дізнатися, коли процедура завершена. Можна сказати Screen відстежувати бездіяльність цього вікна за допомогою послідовності "Ctrl-a _", яка повідомить, якщо дані перестануть виводитися протягом 30 секунд.

Наведемо простіший приклад. Скажіть консолі Screen повідомити, коли вікно завершить пінг Google 4 рази.

ping –c 4 www.google.com
Ctrl-a _
На window is now being monitored for 30 sec. silence.

Тепер можна працювати в іншому вікні та чекати повідомлення про завершення завдання у попередньому вікні.

Ctrl-a 1
Window 2: silence for 30 seconds

Можна також, навпаки, вимагати повідомлення про активність певного вікна. Це робиться за допомогою послідовності "Ctrl-a M".

sleep 20 && echo “output”
Ctrl-a M
Window 2 (bash) is now being monitored for all activity.

Тепер з'явиться повідомлення під час виведення даних у цьому вікні.

Ctrl-a 1
Activity in window 2

Наприклад, необхідно внести ряд важливих змін, і при цьому потрібно отримати журнал запущених команд. Сесію можна записати за допомогою:

Ctrl-a H
Creating logfile "screenlog.1".

Області Screen

При необхідності бачити кілька вікон відразу можна використовувати так звані «області». Нові області створюються під час розділення поточної області. Щоб розділити поточну область по горизонталі, можна ввести:

Це пересуне поточне вікно у верхню частину екрана та відкриє нову порожню область під ним. Щоб перейти до нижньої області, використовуйте «tab»:

Тепер у нижній області можна створити нове вікно або перейти в інше вікно у звичайному порядку.

За необхідності знищити поточну область використовуйте таку послідовність:

Це видаляє область, не знищуючи поточне вікно. Тобто, якщо в цій галузі була запущена команда, то отримати доступ до неї як до звичайного вікна все ще можна просто окрему область знищено.

При необхідності зробити вертикальний розділ можна використовувати послідовність:

Примітка: це не символ 1 (одиниці) або L. Це символ вертикальної риси, який на більшості клавіатур знаходиться на одній клавіші із символом \. Засоби керування вертикальними областями збігаються з керуванням горизонтальними. При необхідності видалити кілька різних областей і повернутися до однієї області, можна використовувати цю послідовність, яка руйнує всі області, крім поточної:

Використання Byobu

Значним покращенням для Screen є програма під назвою «byobu». Вона діє як оболонка Screen та надає підвищену зручність користування. В Ubuntu її можна встановити за допомогою:

sudo apt-get install byobu

Перш ніж почати, потрібно сказати byobu використовувати screen як вихідний буфер. Це можна зробити за допомогою команди:

byobu-select-backend
Select the byobu backend:
1. tmux
2. screen
Choose 1-2:

Тут можна встановити screen як менеджер терміналу за умовчанням.

Тепер можна ввести "byobu" замість "screen", щоб розпочати сесію.

byobu
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-24-virtual i686)
* Documentation: https://help.ubuntu.com/
Welcome to the light, powerful, text window manager, Byobu.
Ви можете записати launch of Byobu at login with:
"byobu-disable" та "byobu-enable"
Для tips, tricks, and more information, see:
* http://bit.ly/byobu-help
justin@Blank:~$
u? 12.04 0: * 118! 3h55m 2.00 2.0GHz 496M6% 2013-07-01 18:19:21

Як можна бачити, тепер screen укладено в зручний інтерфейс.

Вперше набравши "Ctrl-a", потрібно сказати byobu розпізнавати цю команду як команду screen, а не Emacs.

Ctrl-a
Configure Byobu's ctrl-a behavior...
Якщо ви напишете Ctrl-a в Byobu, вам потрібно буде працювати в:
(1) Screen mode (GNU Screen"s default escape sequence)
(2) Emacs mode (go to beginning of line)
Note that:
- F12 also operates as an escape in Byobu
- You can press F9 and choose your escape character
- Ви можете керувати "byobu-ctrl-a" в будь-який час до зміни свого вибору
Select :

Виберіть 1, щоб використовувати byobu у звичайному режимі.

Інтерфейс надає багато корисної інформації, як, наприклад, список вікон та інформацію про систему. В Ubuntu він навіть повідомляє, скільки пакетів має оновлення безпеки у вигляді номера з наступним знаком оклику на червоному тлі.

Єдина відмінність між byobu і screen в тому, що byobu керує сесіями. Якщо після відключення просто знову набрати «byobu», вона відновить попередню сесію замість створення нової.

Щоб створити нову сесію, потрібно набрати:

byobu –S sessionname

Змініть "sessionname" (ім'я сесії) на власний розсуд, щоб викликати нову сесію. Список поточних сесій можна переглянути за допомогою:

byobu –ls
There are screens on:
22961.new (07/01/2013 06:42:52 PM) (Detached)
22281.byobu (07/01/2013 6:37:18 PM) (Detached)
2 Sockets in /var/run/screen/S-root.

Якщо існує кілька сесій, то після введення «byobu» з'явиться меню, в якому можна вибрати, до якої сесії потрібно підключитися.

byobu
Byobu sessions...
1. screen: 22961.new (07/01/2013 06:42:52 PM) (Detached)
2. screen: 22281.byobu (07/01/2013 06:37:18 PM) (Detached)
3. Create a new Byobu session (screen)
4. Run a shell без Byobu (/bin/bash)
Choose 1-4:

Можна вибрати будь-яку з існуючих сесій, створити нову сесію byobu, або навіть нову оболонку, яка не використовує byobu.

Одна з дуже корисних для віддаленого хмарного сервера функцій – можливість запускати byobu автоматично при кожному підключенні до сесії. Це означає, що при відключенні сесії робота не буде втрачена, і можна буде легко підключитися до цієї сесії знову.

Щоб активувати автоматичний запуск при кожному вході, введіть у термінал:

byobu-enable
The Byobu window manager will be launched автоматично на їх text login.
To disable this behavior later, just run:
byobu-disable
Press to continue...

Як зазначено вище, щоб вимкнути цю функцію, просто введіть:

Тоді вона не запускатиметься автоматично.

Tags: ,

Іноді доводиться працювати з серверами *nix віддалено по ssh, в моєму випадку через putty. Якщо дисканектит через херовий інтернет, сесія рветься, то хана всім нашим не завершеним процесам, напрацюванням у не збережених конфігах і т.д. Щоб застерегти себе від подібних казусів, а також зберігати сесії і в будь-який час з будь-якого місця до них підключатися я відкрив для себе віконний менеджер Screen. Тепер у справі.

Встановлюємо:

#yum install -y screen

Для початку, освоїмо основні дії для маніпуляції з вікнами
Відкриваємо будь-який емулятор терміналу (у моєму випадку – це putty) і запускаємо в ньому Screen:


Це вікно – перше вікно Screen, яке було створено програмою автоматично, під час її запуску. Створимо ще одне вікно.
Набираємо на клавіатурі наступну комбінацію клавіш (скрізь без -, - це роздільник):
Ctrl+ac

Запустимо у цьому вікні будь-який процес. Нехай це буде top та створюємо ще одне вікно
Ctrl+acі запустимо у ньому якийсь процес. На цей раз шлях це буде man screen

На даний момент ми маємо в одному вікні терміналу putty три запущених вікна screen.
Як глянути скільки вікон? як варіант Ctrl+aw

Ми бачимо у лівому верхньому куті вікна рядок:
0$ bash 1*$ bash 2-$ bash

Це список активних, створених нами вікон screen. 0 , 1 , 2 - це номери вікон, а bash- Їх імена (заголовки). Очевидно, нумерація вікон починається з нуля. А ось імена у всіх трьох однакові - bash

Вікна:
* 0$ bash- це те, яке Screenсам створив при своєму запуску (забігаючи трохи вперед, можна сказати, що їх кількість може бути не одна і виставляється вона в конфігураційному файлі);
* 1-$ bash- у цьому вікні ми заплутали top;
* 2*$ bash- у цьому вікні у нас запущено man screen.

Перемикання здійснюється поєднанням:
Cntrl+a -p- перейти на попередню віртуальну консоль
Cntrl+a - nабо пробіл- перейти на наступну віртуальну консоль
Ctrl+a“ -- інтерактивний (на відміну від Ctrl+a – w) Список створених нами вікон. Можна пересуватися ним стрілками вгору-вниз і входити EnterТом у потрібне.


Можна перейти на потрібне вікно, знаючи його номер за командою:
Ctrl+aномер_вікна

Наприклад, перейдемо на друге вікно:
Ctrl+a1

Або, трохи переінакшивши команду:
Ctrl+a

У нижньому рядку з'явиться пропозиція ввести номер вікна, до якого ми хочемо перейти. Припустимо, нам потрібно перейти у перше вікно – вводимо номер 0 та натискаємо Enter:

Як ми бачили з висновку команд Ctrl+a – wі Ctrl+a – “, імена (заголовки) вікон однакові. Давайте виправимо це. Наберемо команду Ctrl+aA

У нижньому рядку з'явиться запрошення змінити заголовок вікна. Виправляємо з bash на main та натискаємо Enter. Дізнатися ім'я поточного вікна можна Ctrl+aNми побачимо у лівому верхньому кутку вікна його ім'я.

Інформація про вікно:
Ctrl+ai

Ми побачимо у лівому верхньому куті вікнаінформацію та його ім'я, у нашому випадку ім'я Main.

Як видно з попередніх висновків, нумерація вікон відбувається послідовно зі зростанням номера: 0 - 1 - 2 . Якщо ми закриємо одне з них, нумерація вікон, що залишилися, не зміниться.

Закриття вікна в Screenвиконується виконанням команди exitу вікні. Попередньо потрібно зупинити всі запущені процеси в ньому. Закриття вікон можна зробити і комбінацією Ctrl+a – k. Проте, виконувати її не рекомендується, оскільки ця операція ідентична команді kill- "Вбити" процес.

Давайте закриємо друге вікно. Зупинимо процес topі виконаємо exit. А потім подивимося виведення команди.

Бачимо, що нумерація тепер така: 0 — 2 . Давайте поміняємо нумерацію вікон, зокрема вікна під номером 2 і надамо йому номер 1 . Виконаємо команду:
Ctrl+a:
Внизу вікна з'явиться запрошення у вигляді двокрапки для введення команди.
Введемо команду:
number 1
І натискаємо Enter.
Дивимося результат:
Ctrl+a

Довідка за клавіатурними комбінаціями Screen:
Ctrl+a?

За замовчуванням, Screenвідображає лише одне вікно на екрані емулятора терміналу. Однак, є можливість розбивати вікно Screenу терміналі на кілька. Для цього існує команда розбивки вікна на горизонтальні частини регіони. Зручність у цьому випадку полягає в тому, що немає потреби перемикатися між вікнами – всі вони перебувають на увазі і всі процеси під контролем, достатньо лише перевести погляд на потрібне вікно.
Відкриваємо емулятор терміналу і запускаємо в ньому Screenі виконуємо команду розбивки екрана емулятора на дві горизонтальні частини – регіони:
Ctrl+aS

Як видно на скріншоті, вікно емулятора терміналу puttyбуло розбито на дві однакові горизонтальні частини. У Screenтакі частини, виконані за допомогою команди Ctrl+a – Sназиваються регіонами. Таких регіонів може бути не обов'язково два, а набагато більше. Допустимо, щоб отримати три вікна Screenу нашому випадку, потрібно у поточному регіоні (він у нас верхній) знову виконати команду Ctrl+a – S. Так можна створити три, чотири, п'ять і т.д. Screen. Але ми зупинимося на варіанті двох вікон, для наочності.

У верхньому регіоні у нас запущено Screenі в цьому регіоні встановлено фокус (зелений курсор). Нижній регіон у нас порожній – у ньому не запущено Screenі поки що там нічого немає. Нам необхідно перейти на нижній регіон, створити там вікно Screenі запустити у ньому процес.
Перекладемо фокус на нижній регіон:
Ctrl+aTab
і створимо у ньому вікно Screen:
Ctrl+ac

У нас з'явився командний рядок.
Запустимо тут процес – top


Тепер перемістимося (перекладемо фокус) знову на верхній регіон і запустимо там ps-aux.
Знову вводимо команду:

Ctrl+aTab
і виконуємо:
ps-aux

Отримуємо:


Закриття поточного регіону в Screenпроводиться командою Ctrl+a – X. Виконаємо її у нашому поточному верхньому регіоні:
Ctrl+aX

Отримаємо:

Якщо відкрито кілька (більше двох) регіонів, можна закрити відразу все, крім одного – поточного, виконавши команду:
Ctrl+aQ

І ось ще:
Ctrl+a-| (Вертикальне розбиття)

Ctrl+A - d- deattach - відключитись від вікна (але не закрити)
Ctrl+A - H- записувати до журналу
Ctrl+A - C- (clear) Очистити екран.
Ctrl+A - d- (detach) відключити screen від цього терміналу. Ctrl+A - D-D- (pow_detach) вимкнутись та розреєструватися. Корисні опції командного рядка: -ls та -listне запускає screen, а показує натомість список ідентифікуючих сеансів screen рядків pid.tty.host. Сеанси, зазначені словом "detached", можуть бути продовжені за допомогою команди "screen -r". Сеанси, зазначені словом "attached", працюють, і вони мають керуючий термінал. Якщо сеанс працює в розрахованому на багато користувачів режимі, він відзначений словом "multi". Сеанси, які позначені словом "unreachable" або працюють на іншому хості, або померли (dead). Недоступний (unreachable) сеанс вважається мертвим, якщо його ім'я відповідає або імені локального хоста, або вказаним параметром (якщо такий є). Як описувати рядки для вибору, розповідається в описі ключа -r. Сеанси, зазначені як "dead", потрібно перевірити та видалити. Якщо ви не впевнені, чи потрібно видаляти якийсь сеанс, ви можете звернутися до системного адміністратора (якщо це не ви самі, інакше може виникнути нескінченна рекурсія). Видалення сеансів можна за допомогою опції -wipe. -wipeпрацює також як "screen -ls", тільки видаляє файли знищених сеансів замість того, щоб помічати їх як "dead" (мертві). Сеанс, який не відповідає, вважається мертвим, або якщо його ім'я відповідає імені локального хоста, або явно вказаному параметру match. Див. опис ключа -r, де розказано правила складання match. -r -r sessionowner/відновлює роботу відключеного сеансу. Інші опції (за винятком комбінацій з -d/-D не допускаються). Необов'язковий параметр tty.host може вказуватися для того, щоб визначити який саме сеанс із безлічі відключених мається на увазі. Друга форма використовується для підключення до сеансу іншого користувача, що працює в розрахованому на багато користувачів режимі. Ця опція говорить про те, що файл потрібно шукати у каталозі іншого користувача. Потребує наявності біта setuid-root у програми screen. -xПідключитись до активної (not detached) сесії screen. (Багатодисплейний режим). -XНадіслати вказану команду у працюючий сеанс screen. -S sessionnameЦя опція може використовуватися для встановлення імені сеансу під час його створення. Ім'я використовується для ідентифікації під час виклику "screen -list" та "screen -r". Воно замінює префікс "tty.host", який використовується за умовчанням. -AАдаптує розміри всіх вікон під поточний термінал. За замовчуванням screen намагається відновити старий розмір вікна (при підключенні до терміналів зі змінними розмірами (у кого є "WS" в описі, наприклад, suncmd або xterm). -d -mЗапустити сеанс у "вимкненому" режимі. Сесія створюється, але не виконується підключення. Це корисно для завантажувальних системних скриптів. -D -mТакож запускає screen у "відключеному" режимі, але не створює нового процесу. Команда завершується, якщо сесія переривається. d|-Dне запускає новий сеанс, а відключає натомість вже запущений раніше. Досягається той самий ефект, що у випадку натискання клавіш "C-a d" на керуючому терміналі screen. Ключ -D еквівалентний ключу power detach. Якщо до жодного сеансу не можна звернутися, опція ігнорується. У зв'язці з -r/-R можуть бути досягнуті інші цікавіші ефекти. -d -rПідключити до сеансу, і, якщо необхідно, спочатку вимкнути його.

У кожному сеансі свої вікна!

Розберемо з прикладу скрипт:

#!/bin/bash "Тут ми направляємо команду exit у сесію Proga1" screen -X -S Proga1 exit "Тут ми переходимо в каталог program, який знаходиться в нашій домашній дерикторії і запускаємо у "відключеному" режимі сесію з ім'ям Proga1 і в цій же сесії відразу запускаємо nasha_program.sh" cd ~/program/ screen - A -m -d -S Proga1 nasha_program.sh

Тобто. ми створюємо сесію з ім'ям Proga1, але до неї не підключаємось і запускаємо в ній програму і якщо сесія з таким ім'ям вже існує, ми її спочатку закриваємо посилаючи команду exit.

Управління всередині скрина:

Ctrl+a - c- Створення нової вкладки всередині поточної сесії скрина.
Ctrl+a - цифра- перехід на вкладку "номер" у поточній сесії скрина.
Ctrl+a - A- Створення імені для поточної вкладки.
Ctrl+a - " - Зручне переміщення по іменованих вкладках.
Ctrl+a - d- detach, від'єднання від сесії скрина, вихід у звичайний баш. Всі завдання продовжують виконуватися, але всередині скрин.
Ctrl+d- звичайний логауат, як з терміналу. Якщо вкладка єдина у сесії, поточний скрін завершить роботу. Якщо одна з кількох, то вона закриється, а ви переміститеся до попередньої вкладки за номером.
Ctrl+D– вийти зі всіх сеансів screen

Управління скрином зовні, з баша.
screen -r- attach , За наявності єдиної сесії запущеного скрина - приєднання до неї.
screen -r proc-id- приєднання до зазначеної сесії за номером її процесу.
screen -ls- роздрук списку поточних запущених скринів.

Якщо сесія запущена з іншого терміналу (Attached), можна спробувати -D -R

Тюнінг

Можна так само злегка тюнінгувати зовнішнє відображення віртуальних консолей, для цього створіть у домашній директорії файл .screenrcі впишіть до нього таке:

Caption always caption string "%(kw)%-w%(wr)%n %t%(-)%+w" shell -$SHELL Тепер внизу завжди буде відображатися кількість віртуальних консолей та кольорове відображення поточної.