Этот учебник предоставит обзор основ Linux Screen, мощного терминального мультиплексора (terminal multiplexer), который позволяет создавать, управлять и перемещаться между несколькими терминальными сессиями в пределах одного окна. Вы узнаете, как запускать, отсоединять и повторно подключаться к сессиям Screen, а также изучите практическое применение этого универсального инструмента.
Понимание основ Linux Screen
Linux Screen — это мощный терминальный мультиплексор (terminal multiplexer), который позволяет создавать, управлять и перемещаться между несколькими терминальными сессиями в пределах одного окна. Он предоставляет способ запускать несколько команд или приложений одновременно, поддерживать их работу в фоновом режиме и плавно переключаться между ними.
Одним из основных вариантов использования Linux Screen является обеспечение постоянных сессий (persistent sessions). Это означает, что вы можете запустить длительный процесс, отсоединиться от сессии и позже повторно подключиться к ней, даже из другого места или с другого устройства. Это особенно полезно для таких задач, как удаленное управление сервером, запуск автоматизированных скриптов или поддержание длительных процессов, которые не должны прерываться.
Еще одной ключевой особенностью Linux Screen является его способность поддерживать общие сессии (shared sessions). Это позволяет нескольким пользователям подключаться к одной и той же сессии Screen, обеспечивая совместную работу и удаленную помощь. Это может быть особенно полезно в сценариях, когда нескольким членам команды необходимо работать над одним и тем же проектом или совместно устранять проблему.
Чтобы продемонстрировать основное использование Linux Screen, давайте начнем новую сессию Screen. Откройте свой терминал и введите следующую команду:
screen
Теперь вы находитесь внутри новой сессии Screen. Вы можете понять, что находитесь в сессии Screen, потому что терминал может выглядеть немного иначе, или вы можете увидеть приветственное сообщение.
Теперь давайте выполним простую команду внутри этой сессии Screen. Мы будем использовать команду top, чтобы увидеть запущенные процессы.
top
Вы должны увидеть вывод top, отображающий системные процессы.
top - HH:MM:SS up X days, HH:MM, X users, load average: X.XX, X.XX, X.XX
Tasks: XXX total, X running, XXX sleeping, X stopped, X zombie
%Cpu(s): X.X us, X.X sy, X.X ni, XX.X id, X.X wa, X.X hi, X.X si, X.X st
MiB Mem : XXXX.X total, XXXX.X free, XXX.X used, XXXX.X buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. XXXX.X avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
XXXX labex 20 0 XXXXXX XXXXX XXXXX S X.X X.X X:XX.XX top
XXXX labex 20 0 XXXXXX XXXXX XXXXX S X.X X.X X:XX.XX zsh
...
Чтобы выйти из команды top, нажмите q.
Теперь давайте отсоединимся от этой сессии Screen. Это оставит сессию работающей в фоновом режиме. Чтобы отсоединиться, нажмите Ctrl+A, а затем d.
Ctrl+A, d
Вы должны увидеть сообщение, указывающее на то, что вы отсоединились от сессии Screen.
[detached from ...]
Теперь вы вернулись в свою исходную терминальную сессию. Сессия Screen с командой top (из которой вы вышли) все еще работает в фоновом режиме.
Просмотр списка и повторное подключение к сессиям Screen
Теперь, когда вы отсоединились от сессии Screen, давайте узнаем, как просмотреть список запущенных сессий и повторно подключиться к одной из них.
Чтобы просмотреть список всех запущенных сессий Screen, используйте команду screen -ls в своем терминале.
screen -ls
Вы должны увидеть вывод, подобный этому, показывающий вашу отсоединенную сессию:
There is a screen on:
XXXXX.pts-X.labex (Detached)
X Sockets in /run/screen/S-labex.
Вывод показывает идентификатор сессии (session ID) (например, XXXXX.pts-X.labex) и ее статус (Detached).
Чтобы повторно подключиться к последней отсоединенной сессии Screen, используйте команду screen -r.
screen -r
Теперь вы должны снова находиться внутри своей сессии Screen. Поскольку вы вышли из top на предыдущем шаге, вы, вероятно, увидите стандартное приглашение терминала (terminal prompt) внутри сессии Screen.
Если у вас запущено несколько сессий Screen, вы можете повторно подключиться к определенной сессии, указав ее идентификатор сессии (session ID) после команды screen -r. Например, если идентификатор сессии (session ID) равен 12345, вы бы использовали:
screen -r 12345
Для этой лабораторной работы, поскольку у вас, вероятно, только одна сессия, screen -r будет достаточно.
Теперь, когда вы вернулись в сессию Screen, давайте выйдем из нее правильно. Вы можете сделать это, набрав exit внутри сессии Screen.
exit
Это завершит сессию Screen и вернет вас в ваш исходный терминал.
Вы можете убедиться, что сессия закрыта, снова просмотрев список сессий Screen:
screen -ls
Вы должны увидеть вывод, указывающий на то, что нет запущенных сессий Screen:
No Sockets in /run/screen/S-labex.
Завершение сессии Screen
На предыдущем шаге вы узнали, как выйти из сессии Screen изнутри сессии, используя команду exit. Однако могут быть случаи, когда вам нужно завершить сессию Screen извне сессии, например, если сессия не отвечает или вы просто хотите закрыть ее, не переподключаясь.
Чтобы завершить определенную сессию Screen из вашего исходного терминала, вы можете использовать команду screen -X -S [session_id] quit. Вам понадобится идентификатор сессии (session ID), который вы можете получить с помощью screen -ls.
Сначала давайте запустим новую сессию Screen, чтобы у нас была сессия для завершения.
screen
Теперь отсоединитесь от этой сессии, используя Ctrl+A, d.
Ctrl+A, d
Перечислите запущенные сессии, чтобы получить идентификатор сессии (session ID).
screen -ls
Запишите идентификатор сессии (session ID) из вывода (например, XXXXX.pts-X.labex).
Теперь используйте команду screen -X -S [session_id] quit, чтобы завершить сессию. Замените [session_id] фактическим идентификатором, который вы записали.
screen -X -S XXXXX.pts-X.labex quit
Вы не должны увидеть никакого вывода, если команда выполнена успешно.
Чтобы подтвердить, что сессия была завершена, снова перечислите сессии Screen.
screen -ls
Вы должны увидеть вывод, указывающий на то, что нет запущенных сессий Screen.
No Sockets in /run/screen/S-labex.
Этот метод полезен для принудительного завершения сессии Screen, когда вы не можете получить к ней прямой доступ.
Итог
Linux Screen — ценный инструмент для управления и поддержания постоянных терминальных сессий (persistent terminal sessions). Понимая, как создавать, отсоединять, перечислять, повторно подключать и завершать сессии Screen, вы можете запускать длительные процессы (long-running processes), сотрудничать с членами команды и гарантировать, что ваши критические задачи продолжат выполняться, даже если вы не подключены напрямую к терминалу. Этот учебник охватил основные концепции и практические примеры использования Linux Screen, предоставив вам знания для повышения вашей производительности и оптимизации рабочих процессов на основе терминала.