• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Стаття також доступна російською (перейти до перегляду).

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

Зміст

Доволі часто виникає потреба в керуванні кількома незалежними сесіями у межах одного екрану терміналу Linux-системи. Це дає змогу оптимізувати процес адміністрування та пришвидшити швидкість обробки даних. Утиліта Screen є однією із найвідоміших програм – термінальних мультиплексорів для реалізації вказаних можливостей по управлінню системою. Вона дозволяє гнучко налаштувати контроль роботи запущених псевдо терміналів у автоматичному режимі із видачею відповідних повідомлень. Розглянемо її можливості та практичне використання на ОС Ubuntu 22.04.

Основні відомості про Screen

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

Утиліта під час своєї роботи утворює своєрідний контейнер для можливості одночасної роботи декількох окремих сесій у межах основної сесії, утвореної оболонкою. Це дозволяє організувати мультиплексування запущених псевдо терміналів в автоматичному режимі. Будь-яку із запущених сесій можна закрити або від’єднати від основної сесії та залишити працювати й надалі у фоновому режимі. При необхідності до неї завжди можна повернутися за допомогою відповідної команди.

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

Серед найближчих конкурентів програми можна назвати утиліту tmux, котра входить до стандартного набору програм для OpenBSD та орієнтована на зручність роботи користувача.

Встановлення Screen на VPS-сервер Ubuntu

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

Насамперед, оновимо список пакетів:

$ sudo apt update

Оновлення списку пакетів

Запустимо процес інсталяції:

$ sudo apt install screen

Запуск інсталяції програми

Вихід команди: screen is already the newest version (4.9.0-1). Це означає, що програма вже присутня в системі. Її версія - 4.9.0-1.

Перевірити наявність програми можна також за допомогою наступної команди:

$ which screen

Перевірка наявності програми

Результат: /usr/bin/screen. Тобто, бінарний файл програми знаходиться на своєму місці, а, значить, вона готова до роботи.

Запуск та управління утилітою

Для запуску програми достатньо ввести її назву у базовому термінальному вікні:

$ screen

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

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

В результаті наш екран очищається і залишається лише запрошення командної строчки, як і у звичайному термінальному режимі (див. зображення).

Термінальне вікно

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

Якщо ж нам знадобляться будь-які функції screen, пов’язані із керуванням вікнами, ми завжди повинні починати із введення комбінації двох управляючих клавіш Ctrl+a, після котрих може вводитися цифра від 0 до 9 або інший символ в залежності від необхідної нам функціональності.

Для прикладу, зробимо запит на номер версії програми, для чого натиснемо Ctrl+a, а потім v. Результат показаний нижче.

Перевірка версії програми

У нижній частині екрану з’явилася відповідь на наш запит: screen 4.09.00 (GNU) 30-Jan-22

Тепер зробимо запит на отримання довідкової інформації по командним клавішам, для чого натиснемо Ctrl+a ?. Список команд представлений нижче.

Довідка програми screen

Якщо натиснути клавішу space можна отримати більше інформації по командам.

Запустимо відому утиліту для контроля за процесами на нашому сервері:

$ top

Результат команди top

Результат:

top - 14:20:34 up 29 days, 12 min, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 116 total, 1 running, 115 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.8 us, 1.0 sy, 0.2 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1915.7 total, 292.2 free, 738.1 used, 885.4 buff/cache
MiB Swap: 1865.0 total, 1863.5 free, 1.5 used. 590.9 avail Mem

799233 root 20 0 882320 64472 27532 S 0.3 3.3 1:56.76 bitninja-dispat
...................................................................................................
83 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 tpm_dev_wq

Створимо новий термінал або сесію для демонстрації сумісної роботи окремих терміналів. Для цього достатньо натиснути комбінацію клавіш Ctrl+a c. Вигляд екрану знову змінився:

Нове термінальне вікно в screen

Тепер перед нами нове вікно псевдо терміналу, готове для прийняття команд. Водночас наше перше вікно, котре налаштоване на моніторинг процесів, нікуди не зникло, а лише стало прихованим. Тобто, ми й тепер можемо на нього перейти. Для цього необхідно натиснути Ctrl+a, n. Якщо б у нас було вікно, створене після поточного, то перейти на нього можна за допомогою команди Ctrl+a, p. Таким чином ми можемо переміщуватися між усіма запущеними вікнами у обидва боки, послідовно змінюючи поточне

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

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

Створимо два нових вікна, після чого натиснемо Ctrl+a w. В результаті у нижній частині екрану з’явиться наступна інформація:

Створення двох нових вікон

Вихід команди:

0$ bash  1-$ bash  2*$ bash

Нумерація у списку починається з нуля. Наявність символу «*» вказує на те, яке з вікон є активним на даний момент. У нашому випадку це термінал №2.

Для зміни поточного терміналу достатньо вказати його індексний номер. Наприклад, зробимо активним вікно №1. Для цього одразу після управляючих клавіш натиснемо число 1, після чого знову виведемо список.

Зміна терміналу

Можна переконатися, що тепер активним є термінал №1, позначений зірочкою.

Перейдемо до терміналу з запущеним моніторингом процесів (нульовий індекс) та перейменуємо його. Це можна зробити за допомогою команди Ctrl+a A.

В результаті, у нижній частині активного вікна з лівого боку з’явиться поле, до котрого введемо нову назву: new_monit (див. зображення). Після цього натиснемо Enter.

Перехід до вікна із запущеною командою top

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

Виведення списку вікон

Отже, назва вікна змінилася і тепер замість bash стала new_monit.

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

Зробимо активним вікно №2 та спробуємо його закрити, натиснувши Ctrl-a k

Активація другого вікна

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

Закриття другого вікна

Отже, вікно №2 тепер закрите.

Для виходу з програми із закриттям усіх вікон використовується комбінація Ctrl+a \. Натискаємо відповідні клавіші, після чого знову отримуємо запит на підтвердження або скасування операції.

Вихід з програми і закриття всіх вікон

Після підтвердження видалення всіх вікон ми повертаємося до первісного базового вікна терміналу, з котрого програма була запущена (див. зображення нижче).

Робота програми завершена

Результат: screen is terminated. Тобто, робота програми завершена.

Управління сесіями у межах одного сеансу

Вище було продемонстровано закриття всіх запущених вікон. При цьому всі сесії були зруйновані. Однак, у деяких випадках важливо забезпечити безперервну роботу терміналу, не перериваючи сесію. Для цього передбачена наявність у програмі режиму від’єднання, при котрому сесія фактично переходить у фоновий режим, а користувач отримує доступ до базового терміналу. Режим включається для поточного вікна за допомогою команди Ctrl+a d.

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

Натиснемо Ctrl-a d, в результаті чого екран зміниться так, як показано нижче.

Закриття програми не закриваючи сесії

Над строчкою запрошення виведене інформаційне повідомлення – [detached from 2411134.pts-0.dedicated]. Це означає, що сесія працює, як і раніше, тільки у фоновому режимі, а ми маємо змогу одночасно працювати у базовому терміналі. Таке поєднання є дуже зручним з точки зору адміністрування системи.

Щоб знову повернутися до сесії достатньо ввести наступну команду:

$ screen –r

Повернення до запущеної сесії

Опція -r здійснює повторне під’єднання до сесії. Тепер ми знову повернулися до нашої першої сесії.

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

$ screen –ls

Результат виконання команди буде наступним:

2411134.pts-0.Blank (08/07/2024 17:25:32 PM) (Detached)
2411235.pts-0.Blank (08/07/2024 17:25:45 PM) (Detached)
2 Sockets in /var/run/screen/S-justin.

Таким чином ми отримали список та назви сесій терміналів, до котрих тепер можемо під’єднатися при необхідності. Під’єднатися до визначеного терміналу можна використовуючи відповідний номер сесії:

$ screen –r N

Де N – номер сесії, отриманий за результатами виконання попередньої команди.

У випадку, якщо потрібно під’єднати сесію на кількох пристроях, використовується команда з параметром -x:

$ screen -x

Робота із областями екрану

Розробники передбачили можливість одночасної роботи із усіма або кількома вікнами, що водночас відображаються на екрані. Для цього було введено поняття «область» або «region».

Для розбиття крану на кілька областей існує ряд команд. Наведемо декотрі з них:

Ctrl+a « – показати всі термінали;

Ctrl+a S – розбиття поточної області по горизонталі;

Ctrl+a | – розбиття поточної області по вертикалі;

Ctrl+a [tab] – переміщення між областями;

Ctrl+X – знищення поточної області;

Ctrl+a Q – повернення до однієї області (поточної).

Для прикладу, розіб’ємо по горизонталі вікно, у котрому ми моніторимо системні процеси. Для цього натиснемо Ctrl+a S. Результат показаний нижче.

Розбиття області на горизонталі

Тепер розіб’ємо поточну область по вертикалі, натиснувши Ctrl+a |. Як видно із зображення, команда успішно спрацювала.

Розбиття області на вертикалі

Додаткові можливості по управлінню терміналами

Існує ряд команд, котрі роблять процес адміністрування за допомогою Screen більш інтерактивним.

Одна з них:

Ctrl+a _ - включення режиму відслідковування певної події в іншому вікні

Для прикладу, включимо режим відслідковування пінгу до певного веб-ресурсу. Команда пінгу буде виглядати наступним чином:

$ ping –c 7 www.meta.ua

Тут пінг до вказаного сайту буде здійснюватися сім разів. Для отримання повідомлення про його завершення натиснемо Ctrl+a _, після чого у нижній частині екрану з’явиться наступне повідомлення:

Закриття роботи вікна і відповідь програми

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

Для моніторингу активності у якомусь із вікон використовується наступна управляюча конструкція:

$ sleep 30 && echo “output”

Моніторинг активності вікна

Після її запуску слід натиснути клавіші Ctrl+a M. У нижній частині екрану з’явиться наступне повідомлення:

Повідомлення про моніторинг вікна 5

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

Якщо ж нам потрібен журнал всіх запущених нами команд, ми повинні зареєструвати сеанс за допомогою команди Ctrl+a H. На виході отримуємо:

Створення журналу всіх запущений програм

Вихід команди: Creating logfile "screenlog.1". Тобто, лог-файл із ім’ям screenlog.1 успішно створений, що дасть нам змогу у подальшому відслідковувати можливі негаразди чи помилки.

Налаштування параметрів утиліти

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

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

$ nano /etc/screenrc

Файл програми screenrc для зміни налаштувань

Тут, зокрема, можна налаштувати прокручування екрану за допомогою параметру defscrollback, налаштувати строчку стану та ще багато чого. Усе залежить від особистих уподобань Адміністратора. Звісно, після внесених у файл змін їх необхідно зберегти та вийти з редактору.

Дата-центр FREEhost.UA пропонує оренду віртуальних та фізичних серверів з підтримкою 24/7. Пропонуємо Вам ознайомитись з списком конфігурацій виділених серверів на нашому сайті. Сервери є в наявності, сервер користувачеві видаємо вже налаштованим, протягом одного робочого дня.

Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.

Дивіться наш канал Youtube на https://www.youtube.com/freehostua.

Ми у чомусь помилилися, чи щось пропустили?

Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.

Дата: 12.07.2024
Автор: Олександр Ровник
Голосування

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA