Утилита Screen — это менеджер окон Linux, который позволяет переключаться между несколькими процессами в одном физическом терминале. Screen предоставляет буфер истории для прокрутки и механизм копирования и вставки текста между окнами.

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

❯ Установка утилиты screen

В зависимости от дистрибутива, Screen может быть предустановлен в операционной системе, а может требовать отдельной установки. Чтобы установить Screen, используйте следующую команду:

Для Ubuntu и Debian:

apt install -y screen

Для CentOS, Fedora и AstraLinux:

yum install -y screen

Или:

dnf install -y screen

Основные команды 

Рассмотрим основные команды для управления сессиями Screen.

Запуск сессии screen

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

screen

Это откроет сеанс Screen, создаст новое окно, запустит в нем оболочку, и вы увидите следующее окно. Нажмите Enter, чтобы перейти к вводу команд.

Image3

❯Создание именованного сеанса

Сеансам можно давать имена, что особенно полезно, когда вы работаете с несколькими сеансами Screen. Чтобы создать именованный сеанс, выполните команду screen с такими аргументами:

screen -S имя_сеанса

Всегда полезно выбирать описательное имя для сеанса.

Отключение от сеанса Screen в Linux

Чтобы отключиться от сеанса Screen в любой момент, наберите Ctrl+a d.

Программа, запущенная в сеансе Screen, продолжит работу после вашего отключения в фоне.

Повторное подключение к сеансу Screen в Linux

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

screen -r

Если у вас запущено несколько сеансов Screen, нужно указать ID сеанса или его имя после параметра -r.

Чтобы узнать ID текущих запущенных сеансов, выполните:

screen -ls

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

There are screens on:
        1468393.timeweb (07/25/2024 02:07:34 PM)        (Detached)
        1466624.pts-3.1495851-ralimov   (07/25/2024 01:54:05 PM)        (Detached)
2 Sockets in /run/screens/S-linuxize.

Чтобы восстановить сеанс с ID 1466624.pts-3.1495851-ralimov, введите команду:

screen -S 1466624

Чтобы восстановить сеанс, используя его имя, введите:

screen -S имя_сеанса

Список дополнительных опций

Утилита Screen предлагает массу полезных возможностей для удобного управления сессиями в терминале. Вы можете настроить каждое окно под свои нужды, например, изменить его размер в соответствии с параметрами дисплея или настроить параметры утилиты, используя собственный конфигурационный файл. Если необходимо, можно приостановить сессию и вернуться к ней позже, а также запустить Screen в режиме демона, чтобы он работал в фоне. Помимо этого, доступны функции для настройки командных символов, управления потоком данных и ведения логов. Удобно, что можно выбирать нужные окна, менять их заголовки и использовать кодировку UTF-8, что делает работу в терминале более комфортной и адаптируемой под разные задачи.

  • -a: Включает все возможные функции для каждого окна, делая их максимально функциональными.  

  • -A -[r|R]: Автоматически подстраивает все окна под изменившуюся ширину и высоту экрана.  

  • -c файл: Позволяет указать альтернативный файл конфигурации вместо стандартного .screenrc.  

  • -d (-r): Отключает текущий сеанс Screen, но не завершает его, так что к нему можно будет вернуться позже.  

  • -D (-r): Завершает активное подключение к удалённой сессии, но сессию можно восстановить.  

  • -D -RR: Выполняет все необходимые действия, чтобы подключиться к существующему сеансу Screen, если он есть. Если нет — запускает новый.  

  • -e xy: Позволяет изменить стандартные сочетания клавиш для команд Screen на свои собственные. Например, чтобы избежать конфликтов с другими программами.

  • -f: Включает управление потоком данных; -fn — отключает его; -fa — включает автоматическое управление. Помогает при работе с большим объемом данных.

  • -h строки: Настраивает размер истории команд, которую можно пролистывать вверх.  

  • -i: Прерывает вывод данных на экран, если включено управление потоком, чтобы не перегружать терминал.  

  • -l: Включает запись информации о сессии в системный журнал, чтобы можно было отслеживать активные сессии; -ln — отключает это.  

  • -ls [шаблон]: Показывает список всех активных сессий Screen, которые в данный момент подключены.  

  • -L: Включает запись всего вывода терминала в лог-файл.  

  • -p окно: Автоматически выбирает указанное окно при запуске, если оно существует.  

  • -q: Запускает Screen в «тихом» режиме, без вывода лишней информации в случае ошибок.  

  • -V: Показывает версию Screen и завершает работу.  

  • -r [сеанс]: Повторно подключается к уже запущенному, но временно отключенному сеансу Screen.  

  • -R: Если находит существующий сеанс, подключается к нему, если нет — запускает новый.  

  • -S имя_сеанса: Устанавливает имя для новой сессии, которое будет использоваться для подключения к ней.  

  • -t заголовок: Задает заголовок для окна, который будет отображаться в списке окон.  

  • -U: Включает поддержку кодировки UTF-8 для работы с текстом.  

  • -v: Показывает текущую версию программы Screen.  

  • -x: Подключается к активной сессии, позволяя использовать ее одновременно на нескольких экранах.  

  • -X: Выполняет указанную команду внутри активной сессии Screen.

❯ Работа с окнами

Одновременно можно работать с несколькими сеансами screen, причем внутри каждого сеанса может быть запущено несколько окон.

Чтобы создать новое окно с оболочкой, нажмите Ctrl+a c. Окну будет автоматически присвоен номер от 0 до 9.

Ниже приведены некоторые из самых распространенных команд для управления окнами в Screen:

  • Ctrl+a c — Создать новое окно (с оболочкой).

  • Ctrl+a " — Показать список всех окон.

  • Ctrl+a 0 — Переключиться на окно 0 (по номеру).

  • Ctrl+a A — Переименовать текущее окно.

  • Ctrl+a S — Разделить текущую область горизонтально на две области.

  • Ctrl+a | — Разделить текущую область вертикально на две области.

  • Ctrl+a tab — Переключить фокус ввода на следующую область.

  • Ctrl+a Ctrl+a — Переключаться между текущим и предыдущим окнами.

  • Ctrl+a Q — Закрыть все области, кроме текущей.

  • Ctrl+a X — Закрыть текущую область.

Чтобы просмотреть все команды, введите Ctrl+a ?.

Image1

Когда Screen запускается, он читает свои конфигурационные параметры из файлов /etc/screenrc и ~/.screenrc, если они присутствуют. Мы можем изменить настройки Screen по умолчанию в соответствии с нашими предпочтениями, используя файл .screenrc.

Вот пример конфигурации ~/.screenrc с кастомизированной строкой состояния и несколькими дополнительными опциями:

# Отключить приветственное сообщение
startup_message off

# Автоматически подключаться к последней сессии при запуске
autodetach on

# Установить буфер прокрутки на 10000 строк
defscrollback 10000

# Включить логирование для текущей сессии
logfile /path/to/screenlog

Дополнительные рекомендации по кастомизации конфигурационного файла Screen:

  • Автоматическое разделение окон при запуске: Полезно, если вы часто работаете с несколькими окнами и хотите, чтобы они открывались сразу при запуске Screen.

screen -t shell1
split
focus
screen -t shell2
  • Логирование всех сессий: Полезно для ведения журнала работы.

deflog on
logfile $HOME/.screen/screenlog.%t
  • Автоматическое переподключение при обрыве: Полезно при работе с нестабильными соединениями.

autodetach on
reattach on

❯ Примеры использования Screen

Пример 1. Чтобы отслеживать изменения файла в реальном времени, можно использовать два окна Screen: в одном редактировать файл, а в другом отображать его содержимое с помощью команды tail -f. Это позволит вам мгновенно видеть все внесенные изменения без необходимости повторного выполнения команды.

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

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

❯ Заключение 

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

Дополнительную информацию о Screen можно найти на странице «Руководство пользователя Screen».


Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud  в нашем Telegram-канале 

Перейти ↩

? Читайте также:

Комментарии (16)


  1. V-King
    22.10.2024 17:48

    Я тоже раньне screen использовал. Пока про tmux не узнал.


    1. f_s_b_37
      22.10.2024 17:48

      Я тоже tmux использовал, пока про zellij не узнал


  1. ilyatom
    22.10.2024 17:48

    И ни одного скриншота! Надо просто в одном окне neofetch запустить, а в другом cmatrix, чтобы все знали, какой ты кулхацкер


  1. n_malder
    22.10.2024 17:48

    как будто dtach или tmux/zellij будут более удобным решением


  1. SlavikF
    22.10.2024 17:48

    Я ставил некоторые такие утилиты, пробовал учить hot keys. Как-то "не заходит".

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

    web-terminal - таких полно. А вот, чтобы можно было вернуться в сессию - таких не видел.


    1. unreal_undead2
      22.10.2024 17:48

      Если можно зайти по вебу в консоль, то там уже можно приаттачиться к бегущей сессии screen или tmux )


  1. ruraic
    22.10.2024 17:48

    Я использую такой конфиг:

    caption always "%{= 45}%{+b w}Screen: %n | %h %=%t %c"
    hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"
    
    # Добавляем некоторые настройки
    startup_message off
    defscrollback 1000
    defutf8 on
    shell -$SHELL
    
    # Создаем несколько окон
    chdir
    screen -t Main 1
    chdir /etc
    screen -t etc 2
    chdir /var/log
    screen -t logs 3
    
    # Активно первое окно после запуска
    select 1

    Что позволяет придать окну терминала такой вид:

    Переключаться между вкладками можно при помощи комбинации клавиш Ctrl+A [1-3]
    Переключаться между вкладками можно при помощи комбинации клавиш Ctrl+A [1-3]

    Если в файл .profile добавить такой текст:

    if [ -z "$STY" ]; then screen -R; fi

    screen с такими настройками будет загружаться при логине пользователя.


  1. OmSoft
    22.10.2024 17:48

    Интересно, а почему команды установки даются без sudo? Предполагается, что пользователь сидит под рутом? Ну а если все-таки рассчитывается на пользователя, автоматом подставляющего sudo в необходимых случаях, то не бессмысленно ли ему рассказывать о screen, как о чем-то неизвестном?


    1. le2
      22.10.2024 17:48

      команда (программа) sudo не входит в стандарт posix и собирается по желанию создателя дистрибутива.
      Во многих железках или в вашем телефоне её нет.


  1. D03ER
    22.10.2024 17:48

    тут конечно на вкус и цвет, но вот ещё полезное в конфиг для скрина:

    # буфер для сохраненных строк

    defscrollback 10000

    # строка состояния

    hardstatus alwayslastline

    hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'


  1. event1
    22.10.2024 17:48

    Пробовал screen, но оказалось там нет бесконечного буфера прокрутки. А в ansi-term из емакса есть.


    1. unreal_undead2
      22.10.2024 17:48

      Основной смысл screen/tmux - иметь живую сессию на сервере, к которой можно периодически подключаться (и, скажем, запускать что-то тяжёлое на ночь или выходные не задумываясь о nohup и т.п.)


      1. event1
        22.10.2024 17:48

        с емаксом это ещё лучше работает. Там не только терминал, но и редактор, почта, чат и даже броузер если очень хочется. Можно прекрасно запустить сервер и подключаться удалённо по ssh. И в терминале прокрутка бесконечная.


        1. unreal_undead2
          22.10.2024 17:48

          Не надо мне рассказывать что такое emacs ) Расскажите как с локального emacs'а подключиться к удалённой машине, чтобы сессия при выключении локальной машины не прервалась.


          1. event1
            22.10.2024 17:48

            1. на удалённой машине запускаете emacs-сервер

            2. с локальной подключаетесь по ssh

            3. emacsclient -t

            4. profit.


            1. unreal_undead2
              22.10.2024 17:48

              Тоже вариант. Но у меня основная сесссия самого emacs (c escreen и т.д.) на локальной машине, а удалённых машин много.