Як використовувати екранну команду Linux

Застосовуючи команду `screen` в Linux, ви отримуєте можливість переміщувати запущені термінальні програми у фоновий режим, а потім повертати їх на передній план за потреби. Ця команда також забезпечує підтримку розділеного екрана та стабільну роботу через SSH-з’єднання, навіть якщо ви відключаєтесь і знову підключаєтесь до сервера!

Що таке команда `screen`?

Команда `screen` – це мультиплексор терміналу з широким спектром можливостей. Можливості цієї команди вражають. Документація до неї налічує понад 4100 рядків.

Нижче наведено найпоширеніші сценарії використання команди `screen`, які ми розглянемо детальніше у цій статті:

Типовий робочий процес полягає у створенні нового вікна оболонки, запуску команди, а потім переміщення вікна у фоновий режим (процес “від’єднання”). Якщо ви хочете знову спостерігати за ходом виконання процесу, ви можете вивести вікно на передній план (процес “повторного приєднання”) і продовжити роботу з ним. Це особливо корисно для довготривалих процесів, які ви не хочете випадково перервати, закривши вікно терміналу.
Після початку сеансу `screen` ви можете створювати нові вікна та запускати в них інші процеси. Легко перемикайтеся між вікнами для відстеження їхнього прогресу. Також можливо розділити вікно терміналу на вертикальні або горизонтальні панелі та відображати різні вікна `screen` в межах одного вікна.
Ви можете підключитися до віддаленого сервера, запустити сеанс `screen` та ініціювати процес. Від’єднавшись від віддаленого хоста і знову підключившись, ви побачите, що ваш процес продовжує виконуватись.
Можливість спільного доступу до сеансу `screen` через два різні SSH-з’єднання дозволяє двом користувачам спостерігати за одними й тими ж процесами в реальному часі.

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

Для встановлення `screen` в Ubuntu скористайтеся наступною командою:

sudo apt-get install screen

Щоб встановити `screen` в Manjaro, введіть таку команду:

sudo pacman -Sy screen

У Fedora використовуйте наступну команду:

sudo dnf install screen

Початок роботи з `screen`

Щоб запустити `screen`, просто введіть команду `screen` і натисніть Enter:

screen

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

Ви повернетесь до командного рядка, і на перший погляд нічого особливого не відбудеться. Однак, зараз ви працюєте з оболонкою, що запущена в середині емулятора мультиплексного терміналу. Яка від цього користь? Давайте запустимо процес, що займе тривалий час. Завантажимо вихідний код останнього ядра Linux і перенаправимо його у файл з назвою `latest_kernel.zip`.

Для цього введіть наступне:

curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip

Розпочнеться завантаження, а вивід `curl` показуватиме нам прогрес.

Ми не можемо показати вам зображення наступної дії, оскільки це послідовність натискань клавіш. Натисніть Ctrl+A, відпустіть ці клавіші, а потім натисніть d, щоб від’єднати `screen`.

Процес завантаження все ще виконується, але вікно з процесом завантаження зникло. Ви повернетесь до вікна терміналу, з якого було запущено сеанс `screen`. Повідомлення повідомить, що екранне вікно з позначенням `23167.pts-0.wdzwdz` було від’єднано.

Вам потрібен номер на початку назви вікна для його повторного приєднання. Якщо ви забудете його, ви завжди можете використовувати параметр `-ls` (список), як показано нижче, щоб отримати перелік від’єднаних вікон:

screen -ls

Коли будете готові, використайте параметр `-r` (повторне підключення) та номер сеансу, щоб повторно приєднати його, наприклад:

screen -r 23167

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

Якщо це процес, що має завершитися, він рано чи пізно виконається. Якщо це нескінченний процес, ви захочете його зупинити. У будь-якому випадку, коли процес закінчиться, ви можете ввести `exit`, щоб вийти з `screen`. Або ж, ви можете натиснути Ctrl+A, а потім K, щоб примусово закрити вікно.

Введіть таку команду:

exit

Ви повернетеся до попереднього вікна терміналу, де все ще буде відображена команда, використана для повторного приєднання вікна. Оскільки ми закрили єдине від’єднане вікно, з’явиться повідомлення про те, що `screen` завершує свою роботу.

Використання іменованих сеансів `screen`

Використовуйте параметр `-S` (назва сеансу), щоб задати ім’я сеансу `screen`. Застосування значущого імені, а не числового ідентифікатора, полегшить повторне приєднання до сеансу. Введемо наступну команду, щоб назвати наш сеанс `bigfile`:

screen -S bigfile

Після початку сеансу `screen` ми побачимо порожнє вікно з командним рядком. Ми збираємось завантажити великий файл, тому матимемо довготривалий процес для прикладу.

Введемо наступне:

curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip

Коли завантаження почнеться, ми натискаємо Ctrl+A, а потім D, щоб від’єднати сеанс. Введемо наступну команду, щоб використати параметр `-ls` (список) з `screen` для перегляду відомостей про наш від’єднаний сеанс:

screen -ls

Поряд з числовим ідентифікатором (23266) ми бачимо назву нашого сеансу (bigfile). Використаємо наступну команду для повторного приєднання, включаючи назву сеансу:

screen -r bigfile

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

Після завершення завантаження ми вводимо `exit`, щоб закрити вікно сеансу.

Використання `screen` з кількома вікнами

До цього часу ми використовували `screen` для розміщення окремого процесу у фоновому режимі в окремому вікні. Проте, `screen` здатний на набагато більше. Далі ми запустимо декілька процесів, що дозволять нам відслідковувати деякі аспекти нашого комп’ютера.

Введемо наступну команду, щоб почати сеанс `screen` під назвою `monitor`:

screen -S monitor

У командному рядку в новому віконному сеансі ми запустимо `dmesg` з параметрами `-H` (читабельний формат) і `-w` (очікувати нових повідомлень). Ця команда відображатиме повідомлення буфера ядра; нові повідомлення з’являтимуться одразу після їхньої появи.

Введемо наступну команду:

dmesg -H -w

З’являться існуючі повідомлення. Ми не повертаємось до командного рядка, оскільки `dmseg` очікує нових повідомлень і відображає їх у міру їхнього надходження.

Ми хочемо запустити іншу програму, тому нам потрібне нове вікно `screen`. Натискаємо Ctrl+A, а потім C, щоб створити нове вікно. Ми збираємось використовувати команду `watch` для багаторазового запуску `vmstat`, щоб отримувати оновлювані дані про використання віртуальної пам’яті на нашому комп’ютері.

У новому командному рядку вводимо наступне:

watch vmstat

Вивід `vmstat` з’являється і оновлюється кожні дві секунди.

Наразі запущено два процеси. Для переходу між вікнами `screen` натискайте Ctrl+A, а потім номер вікна. Перше вікно, що ми створили, це вікно нуль (0), наступне – вікно 1 і так далі. Щоб перейти до першого вікна (з `dmesg`), натискаємо Ctrl+A і 0.

Якщо натиснемо Ctrl+A і 1, повернемось до вікна з `vmstat`.

Це чудово! Можна натиснути Ctrl+A, а потім D, щоб відключитися від цього сеансу; пізніше зможемо повторно приєднатися. Обидва сеанси триватимуть. Знову ж таки, щоб перемикатися між вікнами, натискаємо Ctrl+A та номер (0 або 1) вікна, до якого хочемо перейти.

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

Для цього натискаємо Ctrl+A, а потім Shift+S (необхідна велика літера “S”).

Вікно розділиться на дві «панелі».

Верхня панель все ще показує `vmstat`, а нижня порожня. На скріншоті нижче курсор виділено. Щоб перемістити його у нижню панель, натискаємо Ctrl+A, а потім Tab.

Курсор переміститься у нижню панель, що насправді є порожнім простором. Це не оболонка, тому ми не можемо нічого тут ввести. Для отримання корисного відображення, натискаємо Ctrl+A, а потім натискаємо “0”, щоб відобразити у цій панелі вікно з `dmesg`.

Тепер ми маємо обидва живі виводи в одному розділеному вікні. Якщо натиснемо Ctrl+A та D для від’єднання вікна, а потім знову приєднаємо його, ми втратимо розділений вигляд панелей. Проте, ми можемо відновити його за допомогою наступних комбінацій клавіш:

Ctrl+A, S: Розділити вікно по горизонталі.
Ctrl+A, Tab: Перейти до нижньої панелі.
Ctrl+A, 0: Відобразити нульове вікно в нижній панелі.

Можна піти ще далі. Тепер розділимо нижню панель по вертикалі та додамо третій процес на дисплей. Розмістивши курсор у нижній панелі, натискаємо Ctrl+A і C, щоб створити нове вікно з оболонкою. Нижня панель показує нове вікно і надає нам командний рядок.

Далі ми запускаємо команду `df` для перевірки використання файлової системи:

df

<img loading=”lazy” decoding=”async” src=”https://techukraine.net/wp-content/uploads/2022/01/1641333638_655_