Screen ubuntu как пользоваться
Перейти к содержимому

Screen ubuntu как пользоваться

  • автор:

Записки IT специалиста

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

  • Автор: Уваров А.С.
  • 27.04.2022

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

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

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

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

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

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

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

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

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

Чтобы создать новый сеанс 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 с именем i31_htop.

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

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

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

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

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

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

linux-screen-003.png

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

Поэтому, если вы открываете много сеансов 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 позволяет легко оптимизировать рабочее пространство, разделив его на несколько частей и позволяя легко перемещаться между ними. В наш век мониторов с высоким разрешением это как никогда актуально.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

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

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

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

Why Screen?

screen is this awesome software tool in Linux that provides you the ability to spring-up and use multiple shell sessions from a single ssh session. Screen essentially acts as a terminal multiplexer emulator that is packed with features (just look at the size of its man page, you'll know ��)

A few key benefits of screen are:

  • Leverage the use of multiplexer to create multiple shell windows from a single shell SSH session
  • Re-establish access and control of the shell session through network disruptions
  • Ability to disconnect and re-connect to a shell session from any system
  • Ability to daemonize a session to keep a long-running process and attach to the session whenever needed

Honestly, the above ☝ are just a few examples. There are many

How to Install It?

It is most likely already have screen installed on your system. To check if you already have it installed you can use the which command to inspect the path of screen on your system.

If you don’t have screen , then you can easily install it using yum on CentOS

or on Debian using apt like

or on Manjaro using pacman like

or on Fedora using dnf like

Once, you have successfully installed it you can check using the which command again. Alternatively, you can run the screen command

It should prompt you a new window within the screen

How to Use It?

Using Sessions

To get started just use your command line and simply type as shown below:

You’ll see a page of legal information. You can now press Space or Enter to go to the command prompt.

�� Hmmm, you seem to have returned to you your normal session and nothing seems to have happened. But surprise-surprise, you’re now running a shell inside your screen multiplexer emulator.

Let’s get testing by running a long-running script on the session. Let’s download some bug file

Now our download will begin, and the progress will be display on the screen.

Now, we are going to detach from the session using Clrl+A and then press d.

now lets list out the screen windows using the -ls (list) option

We are can use the -r (reattach) option and the number of the session to reattach to it

And just like that, you’re back working on your download. ��

You can always exit from a screen session by just typing the exit command as you would do in a typical session.

If you’re not comfortable using numbered sessions and would like some semantic name for them you can do use using the -S (session name) option.

Appropriately our command to reattach will now be leveraging the name of the session that we had quite some creatively given

Recap

  • On the terminal, type screen
  • Use Ctrl+a + d to detach from the screen session
  • Reattach to screen session by typing screen -r <ID>
  • Start a named session using screen -S <name>
  • Reattach to a named screen session by typing screen -r <name>

Conclusion

My fellow coders, programmers, and wannabe hackers; we just learn how to use screen on Linux. Now you can start using the utility and go-crazy impressing people with your nifty terminal skills.

You can also personalize your screen utility by using a .screenrc file. To learn about the various customization options you can follow the Screen User's Manual.

Как пользоваться screen для управления терминалами Linux и отсоединения процессов от терминала

Screen — это программа для «уплотнения» (мультиплекса) физических консолей. Суть в том, что несколько процессов (как правило интерактивных шеллов) могут работать в одном окне консоли. То есть эта программа позволяет пользователю иметь несколько экземпляров терминалов внутри одного терминала этого менеджера окон. Речь идёт не о вкладках, а о перемещении терминалов в фон. Одним из эффектов работы screen является то, что при закрытии окна терминала, процесс продолжает работу.

Приложение screen очень полезно если вы имеете дело с несколькими программами из интерфейса командной строки, а также для отделения программ от оболочки терминала. Она также позволяет вам делиться вашими сессиями с другими пользователями и отсоединять/подсоединять сессии терминала.

Как установить screen

На некоторых системах пакет screen может быть уже установлен. Если у вас его нет, то установите его.

На Debian, Linux Mint, Ubuntu, Kali Linux и их производных:

На RedHat и производных:

На Arch Linux, BlackArch и их производных:

Чтобы установить screen на Solaris:

На самом деле, screen это очень полезная команда в Linux которая может пригодиться при различных обстоятельствах. Давайте начнём знакомство с функциями screen.

Запуск screen в первый раз

Просто наберите screen в приглашении командной строки:

Будет выведена информация о программе — нажмите ENTER, чтобы её скрыть. Затем приглашение командной строки вернётся в точно такое же, как было и ранее.

Справка по параметрам screen

Когда вы вошли в screen, вы можете делать вашу обычную работу как будто бы вы в обычном окружении командной строки. Программа screen расширяет функциольность за счёт своих команд (параметров).

Нажмите Ctrl-A, а затем ? (то есть Shift+/). Затем вы увидите все команды (параметры) screen.

Чтобы выйти из экрана справки, нажмите Пробел или Enter.

Отсоединение процесса от консоли в screen

Одним из преимуществ screen является возможность отсоединить от консоли процесс, который запущен внутри screen. Далее вы можете даже закрыть консоль (или отключиться от SSH) — процесс всё равно продолжит свою работу. Затем вы можете восстановить окно консоли — вы увидите, что программа всё это время работала и её данные не потеряны.

Пример сценария: вы работаете по SSH на вашем сервере. Вам нужно запустить программу, выполнение которой требует много времени. Это может быть скачивание большого патча для системы с помощью wget или любая длительная команда. В качестве примера я возьму обычный ping. Предположим мне нужно проверить качество связи с помощью ping на протяжении двух часов. Если я отключусь от SSH или связь будет потеряна случайно, то тогда процесс выполнения команды в консоли будет остановлен и нужно будет вновь начинать сначала. Чтобы этого избежать, мы можем использовать screen для отсоединения процесса от консоли.

Рассмотрим на примере конкретных команд.

Вначале входим в screen:

Затем я запускаю пинг:

В процессе работы программы, мы можем нажать Ctrl-a и d. Вывод от программы прекратиться, мы увидим примерно следующую информацию:

Повторное подсоединение консоли с запущенным процессом к screen

После отсоединения процесса и закрытия screens, вы можете отключиться от сервера, то есть закрыть SSH сессию и заняться другими делами. Затем вы можете подключиться к SSH снова — причём, возможно даже с другого компьютера. После этого вы можете увидеть прогресс выполнения вашего процесса (пинг, загрузка, что угодно). Чтобы это сделать, нужно восстановить screen. Для этого запустите следующую команду:

И вы увидите, что процесс, который вы здесь оставили, всё ещё запущен.

Когда у вас больше чем одна сессия screen, то вам нужно будет ввести ID (идентификатор) сессии screen. Используйте screen -ls чтобы показать, как много сессий доступно:

Если вы хотите восстановить сессию screen 13786.pts-2.HackWare, тогда наберите следующую команду:

Использование нескольких screen

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

Во-первых, вы можете отсоединить первый экран screen для запуска другого screen в реальном терминале.

Во-вторых, вы можете делать вложенные экраны screen.

Переключение между экранами

Когда вы делаете вложенные screen, вы можете переключаться между ними используя команду Ctrl-a и n. В этом случае вы перейдёте к следующему окну screen. Когда вам нужно перейти к предыдущем screen, то просто нажмите Ctrl-a и p.

Для создания нового окна screen нажмите Ctrl-a и c.

Как записать все действий в терминале

Иногда важно сохранить все действия в терминале, которые вы выполнили находясь в консоли, то есть вести журнал (логи) активности в консоли.

Допустим вы администратор Linux, который управляет множеством серверов Linux. С ведением журнала в screen, вам не нужно выписывать каждую команду, которую вы ввели. Для активации функции ведения журнала screen просто нажмите Ctrl-a и H. Пожалуйста, будьте осторожны — используется заглавная H (то есть Shift+h). Использование прописной ‘h’ только создаст скриншот экрана screen в файле с именем hardcopy.

В нижней левой части экрана будет уведомление, которое говорит что-то вроде Creating logfile «screenlog.0» (производится ведение журнала экрана). В своей домашней директории вы найдёте файл screenlog.0.

Эта функция будет добавлять в файл всё, что вы делаете в окне screen. Для закрытия активности по ведению журнала screen, вновь нажмите Ctrl-a и H.

Другой способ активировать функцию ведения журнала: вы можете добавить параметр -L во время запуска screen. Команда будет выглядеть примерно так:

Блокировка screen

Screen также имеет комбинацию клавиш для блокировки окна screen. Вы можете нажать Ctrl-a и x для блокировки screen. Это полезно, если вы хотите быстро заблокировать ваш screen. Пример вывода после блокировки:

Вы можете использовать ваш пароль в Linux чтобы разблокировать его.

Добавление пароля на заблокированный screen

Для дополнительной безопасности, вы можете установить пароль на вашу сессию screen. Пароль будет спрашиваться каждый раз, когда вы хотите подсоединить screen. Этот пароль отличается от пароля в описанным выше механизме блокировки окна Screen.

Чтобы защитить паролем screen, вы можете отредактировать файл «$HOME/.screenrc». Если файл не существует, создайте его. Синтаксис будет примерно таким:

ВАШ_ПАРОЛЬ нужно указать в виде хеша, а не в виде обычного текста. Если там указано none, то пароль не будет спрашиваться. Если не указать пароль, то screen покажет приглашение для ввода пароля и его подтверждения и поместит хеш в буфер обмена.

Чтобы сгенерировать хеш, нужно выполнить следующую последовательность действий:

  • запустить сессию screen:
  • нажать Ctrl+a
  • там ввести:
  • появится приглашение ввести пароль и его подтвердить.
  • затем нажать Ctrl+a и ] — пароль будет скопирован на экран.

После того, как вы установите пароль password и нажмёте Ctrl-a и x, то у вас программа будет спрашивать пароль два раза: первым будет пароль пользователя, а затем пароль от screen . При подсоединении задач пароль будет спрашиваться только от screen.

Как выйти из Screen

Есть два способа покинуть screen. Первый это использовать Ctrl-a и d для отсоединения экрана. Второй — мы можем использовать команду exit для закрытия сессии screen. Вы также можете использовать Ctrl-a и K для остановки screen.

Как запустить скрипт, процесс которого отделён от терминала

С помощью screen также возможно запуск файла скрипта, который изначально будет отделён от терминала, например:

Это запустит отделённый (независящий) от терминала процесс. Можно отделить любую команду или процесс с помощью программы screen.

Как просмотреть предыдущие результаты (вывод)

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

Вы можете нажать Ctrl-a и Esc для входа в Copy mode (режим копирования). Когда вы окажитесь в режиме копирвоания, вы можете использовать для пролистывания экранов кнопки PageUp и PageDown.

Для выхода из Copy Mode, нажмите ещё раз Esc.

Как разделить экран на несколько вкладок в screen

В screen вы можете разделить окно на несколько виртуальных терминалов, которые будут одновременно присутствовать на экране. Для этого нажмите Ctrl-a и S.

Именные окна screen

Вы можете использовать несколько именных окон screen. Для этого запустите сессию screen с опцией -S, после которой укажите желаемое имя, например:

эта команда создаст screen с именем testing.

покажет текущие сессии screen с их именами:

Чтобы подключиться к именной сессии screen используйте опцию -x с именем сессии:

в результате предыдущей команды, вы подключитесь к testing screen.

Альтернатива для screen

Если вы ищите альтернативу для screen, то присмотритесь к tmux.

Это азы использования screen которые вам пригодятся практически при каждом её использовании. У программы ещё множество функций, с которыми вы можете ознакомится в её справке или на странице man.

Screen — несколько экранов в одной SSH сессии

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

Screen позволяет отключиться от SSH, сохранив выполеняющиеся на удаленном сервере задания.

Установка screen

Для установки на Ubuntu нужно выполнить команду

После этого нужно запустить screen:

После запуска вы увидите либо приглашение командной строки, либо «экран приветствия», нажав SPACE или ENTER в котором, вы так же попадете в shell. При этом все команды будут запущены уже «внутри» screen’а.

Для того, чтобы выйти из screen’а (выйти, а не отсоединиться) достаточно выйти из всех открытых в нем оболочек, либо же, нажать комбинацию клавиш Ctl-a \, и ответить «y» на вопрос «действительно ли вы хотите выйти».

Отсоединиться от текущего скрина, не закрывая и не завершая сессии, можно комбинацией Ctrl-a d.

Подключение к screen

Если на машине уже есть запущенная screen-сессия, и вы хотите подсоединиться к ней, то

  1. если сессия одна, достаточно просто команды:
  2. если сессий несколько, то: посмотреть список запущенных screen’ов можно командой screen -ls:

Выбираем нужный нам screen, и присоединяемся к нему:

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

где job1 — это название нашей «именнованной» сессии. Теперь в -ls мы увидим гораздо более понятное:

и сможем подсоединиться к сессии job1, просто указав ее имя:

Переключение между окнами screen

Как вы уже поняли, сессии сохраняются даже в то время, когда вы отключны от сервера, и все что в них запущено, продолжает выполняться. Впрочем, на этом возможности screen’а не исчерпываются. Иногда, при работе по ssh, очень хочется, чтобы было открыто сразу несколько терминалов, при этом коннектиться несколько раз облом — особенно если коннектиться нужно через несколько серверов. В этом тоже может помочь screen. Просто нажмите Ctrl — a c, и откроется еще один шелл. Перемещаться между открытыми шеллами можно либо через Ctrl — a <Цифра>, где <Цифра> — номер открытого шелла, начиная с нуля, либо Ctrl — a n/Ctrl — a p — вперед назад. Получить список открытых «окон» – консолей (и переключиться на нужную), можно комбинацией клавиш Ctrl — a «; чтобы задать нормальное имя (а не просто скучный «bash») для какого-нить окна, перейдите в него и нажмите Ctrl — a A (регистр имеет значение), затем в появившемся приглашении введите имя.

Мониторинг выполнения команды

Если открыто несколько окон, полезной может быть возможность следить за активностью в каком-то из них. Например, если вы запустили «долгоиграющую» команду и интересно узнать, когда она завершится. Переходим в окно с этой командой, жмем Ctrl — a m, видим надпись типа такой: «Window 0 (bash) is now being monitored for all activity». Когда что-то в окне изменится, screen подаст звуковой сигнал, а в списке окон после номера появится символ «@».

Прокрутка экрана в screen

Для просмотра вывода команды, который ушел выше границ окна, нужно нажать Ctrl-a [

Это переключит screen в Copy mode. Для выхода из этого режима просто нажмите Esc.

Конфигурация screen

Конфигурируется screen с помощью файла

/.screenrc, в вашем домашнем каталоге. Например, можно написать туда:

Это даст вам все время видимый список открытых окон, и другую полезную информацию внизу экрана.

Также при запуске Screen по-умолчанию выполняются команды из файла /etc/screenrc и файла .screenrc из домашнего каталога пользователя. Многие команды которые можно использовать в файлах конфигурации были рассмотрены в таблицах выше в поле «Текстовая команда». Ниже представлен пример конфигурации Screen из файла .screenrc:

Этот достаточно простой файл конфигурации открывает три окна с именами Work, Configuration, Logs, соответственно в личном каталоге пользователя, в каталоге /etc и каталоге /var/log . После запуска на экране будет находиться первое окно с именем Work. На рисунке 1 представлен пример работы Screen с этим файлом конфигурации.

Завершение Screen

Если по какой-то причине сессия screen перестает отвечать, можно завершить ее. Для этого нужно подключиться к нужной сессии, затем нажать Ctrl — a и ввести команду «:quit».

Screen завершит работу данной сессии, принудительно закрыв все окна.

Работа со Screen

Screen с тремя именованными окнами

Одна из основных возможностей Screen — создание и управление несколькими консольными окнами, или текстовыми приложениями в одном единственном окне терминала. В один момент времени на экране терминала может находится только одно из окон (несколько их может быть только в случае если они делят экран терминала на части). Screen позволяет быстро переключаться между окнами, сохранять и позднее возвращаться к текстовой сессии и открывать доступ к ней другим пользователям. Плюс к этому Screen позволяет давать окнам заголовки, отслеживать активность в каждом окне и обмениваться содержимым окон с помощью копирования и вставки. И, вдобавок, Screen позволяет переназначать клавиши, управлять настройкой эмуляции терминала и решать еще много небольших задач, связанных с текстовыми окнами, в которых может и не быть постоянной необходимости, но которые могут помочь выполнению административной работы в отдельные моменты времени.

На рисунке изображен Screen с тремя именованными окнами (Work, Configuration, Logs) и открытый в нем текстовым редактором Vim, с примером файла конфигурации Screen.

Первый запуск

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

Если команда вернула путь как в примере выше, можно сразу начинать пользоваться, в противном случае Screen может быть установлен стандартными средствами поддержки пакетов вашей операционной системы, или скачан с официального сайта http://www.gnu.org/software/screen/ .

Теперь мы можем запускать Screen, для чего просто набираем:

После запуска на экран может появиться информация о версии и лицензии (при рассмотрении конфигурации мы рассмотрим, как можно отменить вывод данного сообщения) и в этом случае необходимо нажать клавишу «Пробел» или «Ввод», после чего мы попадаем в, на первый взгляд обычную, текстовую оболочку. Надо заметить, что в командной строке сразу можно указать команду для запуска определенного приложения, например, для запуска top надо набрать:

Хорошо, теперь Screen запущен, но, на первый взгляд, нет никаких внешних изменений — мы можем работать в запущенной оболочке, или использовать top.Хитрость в том, что во время работы Screen передает все нажатия клавиш непосредственно приложению, но (по умолчанию) оставляет для себя управляющие команды, начинающиеся с комбинации клавиш Ctrl + a .

Эту управляющую комбинацию клавиш можно поменять через файлы конфигурации (которые мы рассмотрим ниже), но во всех примерах будет рассматриваться только конфигурация по умолчанию. Таким образом, все клавиатурные команды Screen состоят из двух клавишных комбинации — управляющей Ctrl + a и непосредственно клавиши, или клавишной комбинации представляющей команду. Практически каждая команда также имеет своего текстового аналога, который можно выполнить, либо через файл конфигурации, либо, выполнив следующую команду:

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a : colon Вывести приглашение для ввода текстовых команд в интерактивном режиме

В данном случае мы должны выполнить две клавиатурные комбинации сначала нажав Ctrl + a и затем клавишу двоеточия. При этом Screen выведет в нижней части экрана приглашение для ввода команды в виде двоеточия. Ту же самую команду, которую мы только что выполнили с помощью клавишной комбинации, можно выполнить через конфигурационный файл с помощью текстовой команды colon , что может, например, понадобиться для вывода приглашения о вводе команд при старте, или переназначении комбинации клавиш, вызывающих это приглашение. Ниже, как и в примере выше, для каждой клавишной комбинации я буду писать соответствующие им ключевые слова, которые можно использовать в файлах конфигурации, или вводить с помощью Ctrl + a и :.

Здесь может возникнуть закономерный вопрос — а что, если приложению нужно непосредственно передать комбинацию клавиш Ctrl + a , которая уже используется в Screen как служебная? Например, такая же комбинация используется библиотекой редактирования командной строки readline для выполнения перехода в начало строки. Для этого случая в Screen предусмотрена следующая команда:

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a a meta Передать текущему предложению клавишную комбинацию Ctrl + a

Управление окнами

В предыдущем разделе мы научились запускать Screen и выучили основной шаблон для всех клавишных команд. Пришло время разобраться с командами для управления окнами. При запуске Screen создает одно окно (если только в конфигурации не указано создание сразу нескольких окон) и присваивает ему номер 0. Новое окно с командной оболочкой можно создать с помощью команды ниже:

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a c screen Создать новое окно

При этом Screen создаст новое окно и присвоит ему следующий по порядку номер.В нашем случае новым окном будет окно с номером 1.

Теперь у нас есть уже два текстовых окна, из которых текущим является только что созданное окно с номером 1, а окно с номером 0 находится в фоновом режиме. Но, надо заметить, что даже если окно находится в фоновом режиме, оно может воспринимать вывод запущенного в нем приложения, как если бы оно было текущим. Например, мы могли бы запустить в окне 0 процесс, который выводит дополнительную информацию через определенные промежутки времени (для примера это может быть команда tail -f) и затем переключиться в окно 1 для работы в текстовом редакторе. Через какое-то время, если мы захотим посмотреть, что происходит в окне 0, мы можем переключиться в это окно и увидеть весь вывод работающего там процесса. Затем можно переключиться обратно в окно редактирования.

В предыдущем параграфе я описал пример с переключением между окнами, но пока не сказал какие команды для этого используются. Рассмотрим подробнее наиболее часто используемые команды для управления окнами:

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a w windows Выводит список номеров и заголовков всех окон в нижней строчке экрана
Ctrl + a « windowlist Выводит интерактивный список номеров и заголовков всех окон из которого можно выбрать окошко для переключения
Ctrl + a Номер окна select Выбор окна по номеру. Например, команда Ctrl + a и 0 делает текущим окно с номером 0
Ctlr + a n next Переключиться на следующее по порядку окно, или на первое окно если мы находились в последнем окне
Ctrl + a p prev Переключиться на предыдущее по порядку окно, или на последнее окно если мы находились в первом окне
Ctrl + a select Вывести приглашение ввода номера окна для переключения
Ctrl + a Ctrl + a other Переключиться на последнее использованное окно
Ctrl + a N number Показать номер и заголовок текущего окна
Ctrl + a A title Установить заголовок текущего окна
Ctrl + a k kill Принудительное закрытие окна, например, в случае если приложение не удается закрыть обычным способом

При закрытии какого-либо из окон номера других окон не меняются и в нумерации появляются «дырки», которые позднее могут быть заполнены новыми окнами.Хотя Screen имеет команду для изменения номера окна, она здесь не рассматривается и остается для самостоятельного изучения. В случае, если закрыты все окна, Screen завершает свою работу и выводит сообщение:

Работа с текстом

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

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a M monitor Включить/выключить мониторинг активности для текущего окна. Когда мониторинг включен и в окне находящемся в фоновом режиме производится вывод текста, в служебной строке выводится информация об активности.
silence Включить/выключить мониторинг отсутствия активности для текущего окна. Когда мониторинг включен и в окне находящемся в фоновом режиме некоторый период времени не производится вывод текста в служебной строке выводится информация об отсутствии активности.
Ctrl + a h hardcopy Записать текстовое изображение текущего окна в файл hardcopy.номер_окна в каталоге Screen по умолчанию.
Ctrl + a H log Включить/выключить трассировку текста текущего окна в файл screenlog.номер_окна в каталоге Sccreen по умолчанию.
Ctrl + a [ copy Войти в режим копирования. Дополнительные команды этого режима описаны ниже.
Ctrl + a ] paste Вставить в окно текст из регистра по умолчанию (куда он предварительно был скопирован с помощью команды выше).

В режиме копирования Screen запускает текстовый редактор похожий на редактор Vi. Наиболее часто используемые команды редактора:

  • Клавиши управления курсором перемещают курсор по экранному буферу;
  • Клавиша «Пробел» отмечает начало и конец региона для копирования. При втором нажатии «Пробел» , отмеченный текст копируется в регистр по умолчанию, и Screen выходит их режима копирования;

Несколько окон на экране

Screen с тремя окнами и двумя регионами на экране

По умолчанию Screen оставляет видимым на экране только одно логическое окно, но при желании есть дополнительная возможность разделить экран терминала на горизонтальные регионы. Таким образом, можно отображать сразу несколько окон на одном экране терминала. Рассмотрим подробнее команды для работы с регионами экрана:

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a S split Разделить текущее окно, или регион на два новых региона. При этом размеры всех регионов меняются для получения дополнительного пространства на экране и в новом регионе отображается пустое окно.
Ctrl + a Tab focus Переместить текущий фокус отображения на регион ниже, или на верхний регион если текущим является самый нижний регион.
Ctrl + a Q only Закрыть все регионы кроме текущего
Ctrl + a X remove Закрыть текущий регион

На рисунке 2 изображен Screen с тремя именованными окнами (Work, Configuration, Logs) и разделенным на два региона экраном. В верхнем регионе открыто окно Work с текстовым редактором Vim и примером файла конфигурации Screen. В нижнем регионе окно Configuration с частью общего файла конфигурации /etc/screenrc.

Консольные сессии

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

Рассмотрим команды отсоединения консольной сессии от терминала:

КЛАВИШНАЯ КОМБИНАЦИЯ ТЕКСТОВАЯ КОМАНДА ОПИСАНИЕ
Ctrl + a d detach Отсоединить консольную сессию и оставить ее запущенной в фоновом режиме. При этом Screen пишет: [detached]
Ctrl + a D D pow_detach Отсоединить консольную сессию, оставить ее запущенной в фоновом режиме и послать родительскому процессу Screen сигнал HANGUP. При запуске Screen из удаленного терминала это означает отсоединение Screen и затем закрытие соединения. При этом Screen пишет: [power detached]
Ctrl + a z suspend Отсоединить консольную сессию и оставить ее запущенной как фоновый процесс родительской командной оболочки. В этом случае для восстановления сессии кроме команд описанных ниже могут быть использованы стандартные команды управления фоновыми процессами командной оболочки
Ctrl + a Ctrl + quit Закрыть все окна сессии и выйти из Screen.Надо заметить, что многие дистрибутивы переопределяют клавишную комбинацию для этой команды, но текстовую команду можно использовать в любом случае

Чтобы присоединиться обратно к отсоединенной сессии, или посмотреть список доступных сессий, необходимо запустить Screen с одним из следующих ключей:

КОМАНДА ДЛЯ ЗАПУСКА SCREEN ОПИСАНИЕ
screen -r Присоединиться к отсоединенной сессии.
screen -R Присоединиться к первой подходящей отсоединенной сессии.Это может быть полезно в случае если используется несколько сессии.
screen -x Присоединиться к уже работающей сессии.
screen -ls Вывести список доступных сессий.

Что дальше?

Screen имеет огромное количество различных возможностей и, практически, невозможно описать их все в одной статье, поэтому некоторая часть функциональности осталась «за кадром». Вот некоторые возможности/настройки Screen, которые не были рассмотрены выше и остаются для самостоятельного изучения:

  • Команды настройки эмуляции терминала;
  • Многопользовательские консольные сессии;
  • Назначение, или переназначение командам клавишных комбинации;
  • Вспомогательные опции текстовых команд. Например, опция -t команды screen, которая используется в примера файла конфигурации;
  • Редко используемые команды, например, команды, которые можно использовать при настройке запуска Screen — echo и sleep;
  • Переменные среды, которые могут быть полезны при настройке Screen;
  • Дополнительные ключи запуска Screen;

Альтернативы screen

Screen — это программа с большой историей, надо заметить, что первая версия появилась в 1987-м году. На данный момент, к Screen, практически, не добавляется новых возможностей (одной из причин может быть наличие уже большого их количества на данный момент) и производится, в основном, только исправление ошибок. Если кому-то не нравится относительная «старость» Screen, или не нужно такое большое количество возможностей, то можно обратиться к одной из следующих программ:

  • dtach (http://dtach.sourceforge.net/ ) — основной акцент при разработке этой программы сделан на компактность. По аналогии со Screen она поддерживает возможность работы с консольными сессиями, но не имеет других возможностей Screen.
  • SplitVT (http://www.devolution.com/

Screen — несколько экранов в одной SSH сессии: 8 комментариев

Запуск скрина в свернутом виде
screen -dmS rtor rtorrent
Ключ -d укажет, что скрин нужно свернуть, а ключ -m — что его нужно для начала создать. Таким образом нужная программа запустится сразу в фоне, а screen лишь выведет сообщение о том, что программа запущена, и скрин свернут.

Не могу сообразить — как заставить сразу после запуска запустить программу с правами root (конкретно openvpn)?

У меня переключение окон не работает.
Фактически при одновременном нажатии Ctrl+a происходит переключение только между первым и последним окном. Промежуточные окна никогда не доступны.

вот файл /root/.screenrc
hardstatus alwayslastline «%-Lw%<= BW>%50>%n%f* %t%<->%+Lw%<"
startup_message off
defscrollback 1000
defutf8 on
shell -$SHELL

chdir /root
screen -t root 1
chdir /etc
screen -t etc 2
chdir /var/log
screen -t logs 3
chdir /var/www
screen -t www 4
select 1

Так и должно быть в screen, если вы нажмёте дважды Ctrl-A.
Нажмите Ctrl-A и затем цифру — 0, 1, 2 и тд.

Подскажите, как при возвращении в screen увидеть весь лог который происходил там в момент моего долгого отсутствия?
Отображаются только последнии 50 +- строк

Алексей, нажмите Ctrl+A, и затем ESC или [
Это переведёт screen в Copy mode, и вы сможете прокрутить экран с помощью клавиш курсора или PgUp/PgDn.
Для выхода нажмите ESC.

Добрый день!
Есть такой вопрос для варианта работы:
«Запуск скрина в свернутом виде: screen -dmS rtor script»

В таком варианте, если я правильно понимаю — запустится script в свернутом виде и когда он отработает то скрин закончит свою работу. Если я, пока работает script, перехвачу выполнение командой: screen -x , но в это время script закончится, то screen закроется и я не увижу, что было выведено в консоль.
Вопрос:
1. Можно ли как-то для такой ситуации сделать так, чтобы screen не закрывался??
или
2. Как включить логирование того, что выводится в консоль??
Просто информация в консоли часто ОЧЕНЬ важна для выявления ошибки работы script.
Заранее спасибо за ответы

Добрый день!
Есть такой вопрос для варианта работы:
«Запуск скрина в свернутом виде: screen -dmS rtor script»

В таком варианте, если я правильно понимаю — запустится script в свернутом виде и когда он отработает то скрин закончит свою работу. Если я, пока работает script, перехвачу выполнение командой: screen -x , но в это время script закончится, то screen закроется и я не увижу, что было выведено в консоль.
Вопрос:
1. Можно ли как-то для такой ситуации сделать так, чтобы screen не закрывался??
или
2. Как включить логирование того, что выводится в консоль??
Просто информация в консоли часто ОЧЕНЬ важна для выявления ошибки работы script.
Заранее спасибо за ответы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *