С чего начать Первые шаги трек · 15 ступеней
Linux Labs

screen — мультиплексор терминала

3 мин GNU screen

Держит сессию терминала на сервере после разрыва SSH; сессии живут в памяти и не переживают перезагрузку сервера.

Шпаргалка

6 команд Версия для печати
  • screen -S name новая именованная сессия
  • screen -ls список сессий
  • screen -r name подключиться к сессии
  • screen -d -r name отцепить с другого терминала и подключить к себе
  • Ctrl+a d отключиться — сессия продолжает работать
  • screen -dmS job cmd запустить detached сразу, для скриптов

Обзор

screen — как tmux: держит сессию терминала на сервере, переживающую разрыв SSH. Старше и проще; часто уже установлен. Если есть выбор — tmux удобнее, но screen встречается повсюду.

bash
screen                            # новая сессия
screen -S work                    # именованная
screen -ls                        # список сессий
screen -r work                    # подключиться
screen -d -r work                 # отцепить с другого терминала и подключить к себе

Ключи

6

-S даёт сессии имя вместо номера pid — без него screen -ls показывает малопонятные идентификаторы. -d -r решает частую проблему «сессия занята другим терминалом»: сначала отцепляет её оттуда, потом подключает к текущему.

Ключ Что делает Пример
-S name Дать сессии имя вместо номера pid — проще найти в списке. screen -S work
-ls Показать список запущенных сессий и их состояние (Attached/Detached). screen -ls
-r name Подключиться к отцепленной сессии по имени. screen -r work
-d Отцепить сессию от текущего терминала (используется вместе с -r для перехвата). screen -d -r work
-dmS name Запустить команду сразу в отцепленной сессии — удобно для скриптов и cron. screen -dmS job long-running-command
-X command Отправить управляющую команду в сессию по имени, не подключаясь к ней. screen -X -S job quit

Ничего не найдено. Попробуй запрос короче.

Рецепты

2

Горячие клавиши

Префикс — Ctrl+a, затем клавиша:

Ctrl+a  d        отключиться (detach) — сессия работает дальше
Ctrl+a  c        новое окно
Ctrl+a  n / p    следующее / предыдущее окно
Ctrl+a  0..9     к окну по номеру
Ctrl+a  "        список окон (выбрать)
Ctrl+a  A        переименовать окно
Ctrl+a  S        разделить экран по горизонтали (Tab — переход, Ctrl+a X — закрыть регион)
Ctrl+a  |        разделить по вертикали
Ctrl+a  [        режим прокрутки/копирования (Esc — выход)
Ctrl+a  k        убить окно
Ctrl+a  ?        справка по биндингам

Полезное

bash
screen -S log -L -Logfile out.log cmd   # писать вывод сессии в файл (логирование)
screen -dmS job cmd                       # запустить detached сразу (для скриптов)
screen -X -S job quit                     # убить сессию по имени

~/.screenrc (частое):

defscrollback 10000      # длина прокрутки
startup_message off

Неполадки

4

screen -r: There is no screen to be resumed

Сессии нет (закрылась/ребут). screen -ls покажет, что есть. Сессии в памяти — перезагрузка их убивает (для устойчивых служб — systemd).

Attached, не отключиться («There is a screen on ... Attached»)

Сессия «прилипла» к другому терминалу: screen -d -r work (отцепить и подключить).

Кракозябры/сломанное отображение

Ctrl+a затем C (очистить) или переподключись. Проверь $TERM (xterm-256color).

Прокрутка мышью не работает

screen по умолчанию прокручивается через copy-mode (Ctrl+a [). Увеличь буфер defscrollback в ~/.screenrc. Для мыши/панелей удобнее tmux.

См. также

  • tmux — Сессии, которые переживают разрыв SSH; окна и панели.
  • ssh-client — Подключение по SSH, копирование scp/rsync, ~/.ssh/config, проброс портов.
  • background-jobs — Запуск в фоне, управление задачами оболочки, чтобы процесс пережил выход.
Загрузка…