Linux - начинающим. Screen - многозадачность в терминале и ни единого разрыва!

  • Автор:

linux-screen-000.pngЛюбой начинающий Linux-администратор начинает знакомство системы с интерфейса командной строки и эмулятора терминала. В качестве последнего могут использоваться самые различные приложения, но достаточно быстро приходит понимание, что никакие возможности терминала не могут заменить возможностей самой системы. Одной из утилит, помогающей управлять терминалами Linux является screen, это достаточно простая, но в тоже время функциональная утилита, владение которой входит в разряд обязательных знаний и умений любого специалиста.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Прежде всего вспомним, что такое терминал, более подробно этот вопрос мы обсуждали в нашей статье: Linux - начинающим. Часть 7. Потоки, перенаправление потоков, конвейер. Терминал - это оконечное устройство, при помощи которого осуществляется взаимодействие пользователя с компьютером, в современных системах это специальное приложение - эмулятор терминала. К одному компьютеру может быть присоединено сколько угодно терминалов, взаимодействие с терминалом осуществляется через консоль - инструменты ввода-вывода (клавиатура и монитор), к одной консоли также можно подключить несколько терминалов.

После того, как мы подключились через эмулятор терминала к компьютеру, не важно, локальному или удаленному, в нем запускается специальная программа - командный интерпретатор, который обеспечивает базовое взаимодействие пользователя и ОС, в современных Linux чаще всего это bash. Все последующая работа производится в рамках сессии командного интерпретатора запущенного в эмуляторе терминала.

Из этого вытекает две сложности: командный интерпретатор - однозадачное приложение и если вы запустили длительную операцию, вам придется сидеть и ожидать ее окончания. Но этот вопрос достаточно просто решается запуском дополнительных терминалов, а вот второй гораздо серьезнее. При обрыве связи или случайном закрытии терминала все запущенные в нем процессы будут аварийно завершены, а это может привести к самым тяжелым последствиям, особенно если вы выполняли потенциально опасную операцию.

И чем нам здесь поможет screen? Для этого в первую очередь следует разобраться с терминологией, потому что очень много материалов содержат самые разные варианты терминов, что только запутывает ситуацию. При запуске screen создает отдельный процесс в системе, который создает отдельный консольный сеанс и запускает в нем эмулятор терминала. В различных инструкциях можно встретить наименования скрин, экран, но наиболее правильно называть его именно сеансом. Терминал запущенный в сеансе screen обычно принято называть окном, мы можем создавать неограниченное количество окон в одном сеансе и переключаться между ними, точно также как можем создать несколько tty-терминалов в обычной консольной сессии.

Сеанс screen существует до тех пор, пока в нем существует хотя бы одно окно (терминал), как только мы закроем последнее окно - сеанс screen также будет закрыт.

Для установки screen воспользуйтесь командой:

apt install screen

Если вы используете дистрибутивы основанные не на Debian или Ubuntu, то обратитесь к справке по используемому пакетному менеджеру.

Чтобы создать новый сеанс screen просто можете запустить:

screen

Перед вами откроется подобное окно, чтобы закрыть его используйте Пробел или Enter.

linux-screen-001.pngПосле чего перед нами снова откроется окно терминала, только абсолютно чистое. Можем запускать здесь любые команды, процессы, в общем работать самым привычным образом, но не забывать, что мы находимся внутри сессии screen. Также сразу запомним очень простое сочетание Ctrl + a, которое переводит screen в командный режим.

Если нам нужно новое окно, то нажмите Ctrl + a c, у вас снова появится чистое окно терминала, готовое к работе. Чтобы просмотреть количество запущенных окон нажмите Ctrl + a w и внизу экрана вы увидите их список, около активного окна будет стоять звездочка.

linux-screen-002.pngПереключаться между окнами можно сочетанием клавиш Ctrl + a N, где N - номер нужного окна. Для закрытия ненужного окна используйте Ctrl + a k. Помните, что закрытие последнего окна приведет к завершению сеанса screen.

Сеансы screen могут находиться в двух состояниях - активном (Аttached), когда он запущен в открытом терминале и неактивном (Deattached), когда сеанс продолжает работу в свернутом виде и активных соединений с ним нет. Если сеанс screen активен в одно терминале, то подключиться к нему с другого вы не сможете.

Для того чтобы выйти из сеанса screen и перевести его в неактивный режим применяется сочетание клавиш Ctrl + a d.

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

Можем ли мы создать еще одну сессию screen? Да сколько угодно. Но для удобства управления ими мы советуем задавать осмысленные имена. Например, команда:

screen -S i31_htop 

запустит сессию screen с именем i31_htop.

Также мы можем сразу запустить сеанс в свернутом виде:

screen -dmS i31_MyScript ~/my_script.sh

Ключ d указывает на то, что сеанс должен быть свернут, ключ m - что его нужно создать, ключ S задает понятное имя i31_MyScript, далее передается команда, которую надо выполнить.

Здесь возникает еще один интересный вопрос: а что лучше создавать, новые окна в одном сеансе screen для разных задач или отдельные сеансы? Однозначного ответа здесь быть не может, все зависит от того, как вам удобнее работать. Но помните, что если кто-то подключился к сеансу screen и он перешел в статус активен, то вы не сможете подключиться к нему другим пользователем или с другого рабочего места.

Поэтому разные задачи все-таки лучше размещать в отдельных сеансах, а все связанные - в отдельных окнах одного сеанса.

Допустим мы закончили работу в офисе и ушли домой, после того как мы снова подключились к нужному узлу выполним:

screen -ls

Это покажет все существующие сеансы screen и их статус.

linux-screen-003.png

Для восстановления сеанса нужно указать его PID или имя, например:

screen -r 11411

или

screen -r i31_htop

Поэтому, если вы открываете много сеансов screen, то задавайте им осмысленные имена, чтобы было проще понять, что где запущено и для какой цели.

После выполнения данных команд у вас будет восстановлен сеанс screen c активным на момент деактивации окном. Можем продолжать работать.

Но на этом возможности screen не исчерпываются, хотите сразу выполнять команды и наблюдать результат их действий? Нет ничего проще, screen позволяет разделить экран на несколько областей и в каждой из них отобразить свое окно. Для того, чтобы разделить текущее окно по вертикали введите Ctrl + a S, обратите внимание на регистр, это важно. Чтобы разделить окно по горизонтали используйте другое сочетание Ctrl + a |.

Но эти комбинации только делят на части экранное пространство на несколько зон, переключаться между ними можно при помощи Ctrl + a Tab. Перейдя в нужную зону мы можем открыть там новое окно комбинацией Ctrl + a c или показать уже существующее при помощи Ctrl + a N с указанием номера нужного окна, при этом внизу области экрана будут указаны ее номер и имя.

linux-screen-004.pngПо умолчанию все окна имеют имя bash, это неудобно, так как не позволяет сразу понять для чего используется то или иное окно. Переименовать активное окно можно комбинацией клавиш Ctrl + a A, здесь снова важен регистр. Далее просто вводим желаемое имя, обратите внимание как выглядит нижняя область, окно которой мы ранее переименовали.

linux-screen-005.pngА что будет, если мы в окне screen восстановим другой сеанс screen? Мы увидим только активное на момент деактивации окно, без возможности переключаться между окнами, также даже при деактивации текущего сеанса screen открытый в нем сеанс останется активным, это тоже нужно учитывать.

Чтобы закрыть область экрана используйте Ctrl + a X, и снова обращаем внимание на регистр, чтобы закрыть все области, кроме активной, введите Ctrl + a Q.

Мы не будем здесь пересказывать полное руководство по команде screen, если вы что-то забыли, всегда можно вызвать быструю справку по командному режиму сочетанием клавиш Ctrl + a ?

linux-screen-006.pngНа этом мы закончим нашу статью, но в заключение обратим внимание на две важных особенности screen: сеанс не зависит от связи вашего терминала с узлом, вы можете отключаться, находиться в местах с нестабильной связью, закрывать терминал, но работа в сеансе будет продолжаться, и вы всегда сможете заново к нему подключиться.

Также screen позволяет легко оптимизировать рабочее пространство, разделив его на несколько частей и позволяя легко перемещаться между ними. В наш век мониторов с высоким разрешением это как никогда актуально.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments