Это старая версия документа.


Автор - Лукас Вестерман (Lucas Westermann)

Прежде, чем мы начнём, я вынужден признать ошибку. Читатель Stefan Eike указал на то, что в прошлом выпуске я пропустил символ «t» в команде:

sudo smartctl -H /dev/sda

Поэтому спасибо Stefan за подсказку, и простите все, кто столкнулся с проблемами из-за этой команды.

15 ноября я получил письмо от корректора Brian Jenkins. Он написал, что хотел бы увидеть статью, посвящённую GNU Screen, так как он начал её использовать и считает очень полезной. Brian, вот твоя статья! Я снова хочу поблагодарить его за напоминание о Screen, ведь я всё время собирался написать о ней, когда думал о новой статье. После того, как он посоветовал эту тему, я решил, что это отличная идея написать одну-две статьи. Я наверняка напишу ещё одну статью в следующем месяце и расскажу о Screen больше. Я решил, что буду использовать Screen по максимуму все эти недели и настрою её так хорошо, как смогу. В конце концов, нельзя писать о приложении, с которым никогда не работал.

В этой статье я расскажу про установку, использование (горячие клавиши и т.д.), настройку .screenrc, а также о плюсах и минусах Screen. В следующем месяце я сосредоточусь на продвинутом использовании Screen (мультисессии, Screen поверх SSH и др.). Таким образом, читатель будет иметь необходимые знания для понимания следующей части, а я смогу рассказать не о том, как использовать программу, а почему. Так что же такое GNU Screen? GNU Screen — это терминальный мультиплексор. Если это ни о чём вам не говорит, терминальный мультиплексор, по сути дела, создаёт серию «виртуальных» терминалов внутри другого терминала или tty-экрана. Эти виртуальные терминалы можно присоединять к новому терминалу или другой учётной записи, отсоединять их и т.д. Вы можете спросить себя: «Почему просто не открыть несколько терминалов?». Так можно поступить, и я сам привык использовать несколько терминалов, но Screen предлагает вам возможность работы со множеством виртуальных терминалов в одной экранной сессии, подобно вкладкам (да, я знаю, что есть эмуляторы терминалов с поддержкой вкладок). Однако Screen также позволяет вам передать всю сессию, включая вкладки, в новый терминал, другую учетную запись или tty экран.

Конечно, лучший способ понять, что такое Screen — установить и попробовать его. Для установки Screen на компьютер введите команду:

sudo apt-get install screen

После установки вы можете протестировать Screen, просто набрав:

screen

Вы увидите, что открылся… пустой терминал! Screen выглядит в точности как терминал, если запускать его без аргументов, хотя вы можете увидеть, что это действительно Screen, нажав C-a d (т.е. «CTRL + a», затем «d»). Вы увидите терминал, который вы открыли прежде, со строкой:

[detached]

Это значит, что экранная сессия, запущенная раньше, была отсоединена, но не закрыта.

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

  • Ctrl + a, d — отсоединяет экран
  • Ctrl + a, 0-9 — переключает на соответственный виртуальный терминал в сессии экрана
  • Ctrl + a, Ctrl + a — переключает на предыдущее окно
  • Ctrl + a, Ctrl + c — создаёт новое окно с оболочкой и переключается на него
  • Ctrl + a, k — закрывает текущее окно

Отсоединив свой экран, возможно, вы захотите узнать, как вернуть его обратно. Если вы введёте следующую команду в терминале, вы получите список экранов:

screen -ls

Мой список выглядит так:

There is a screen on:

17153.pts-0.lswest-netbook (Detached)

1 Socket in /tmp/screens/S-lswest.

Или, если ввести команду из этой экранной сессии:

There is a screen on:

17153.pts-0.lswest-netbook (Attached)

1 Socket in /tmp/screens/S-lswest.

После просмотра этого списка вы, возможно, запутаетесь. По сути, здесь приводится список файлов, которые созданы каждой экранной сессией в /tmp/screens/S-<username>/. Также тут отображается статус этого экрана (присоединён, отсоединён и т.д.). Чтобы переподключиться или «присоединить» экранную сессию, нужно выполнить следующую команду:

screen -r <name of screen>

Для примера выше команда будет:

screen -r 17153.pts-0.lswest-netbook

Конечно, все мы ленивы, поэтому мы будет использовать только числовой ID (в данном случае 17153). ID достаточно для доступа к локальной сессии экрана, однако, если вы захотите подключиться к удалённой сессии, вам нужно указать ID полностью.

Можно предложить небольшую настройку, которая может оказаться полезной, — писать номер экрана в приглашении Bash или Zsh. Это можно сделать, добавив переменную «$WINDOW» в строку приглашения, после чего она покажет значение текущего открытого окна. Если у вас 3 открытых окна в экранной сессии, и вы в командной оболочке в экране 1 (нумерация начинается с 0, поэтому 1 означает второй экран), вы увидите значение 1. Текст из моей настройки приведён ниже.

Это приглашение в Z-Shell, оно не будет работать в Bash, но вы поймёте, как его использовать. Файл проверяет, есть ли значение в $WINDOW, и если есть, он отображает его в приглашении. В комментариях видно, как выглядят приглашения в обоих случаях. Мне это показалось очень полезным при работе с Screen.

Последнее, о чём я хочу рассказать в этом месяце — создание файла .screenrc, который содержит настройки Screen. Мой файл .screenrc выглядит как текст справа, на странице 7 (основанный на .screenrc пользователя rson с форумов ArchLinux).

Комментарий «hardstatus alwayslastline» — это пример того, как это выглядит в результате. Все другие команды хорошо документированы. В результате экран выглядит так: (Рис 1.)

Это начальный .screenrc. Потребуется несколько статей, чтобы рассказать хотя бы про половину того, что можно настроить. Я просто оставлю .screenrc как он есть с комментариями. В разделе «Читайте также» вы найдёте ссылку на сайт, который расскажет о всех возможных настройках файла .screenrc.

И самое последнее, о чём мне нужно рассказать в этой статье — как выйти из screen. Есть два способа:

  1. Ctrl + a, \ — выходит из screen и закрывает все окна;
  2. закрыть все окна кроме оболочки, а затем набрать.
exit

Если у кого-то остались ещё вопросы, или он хочет попросить рассказать о конкретном аспекте Screen, просто напишите мне на lswest34@gmail.com. То же самое касается тех, кто может предложить идеи статей любого вида, или вопросы о CLI. Желаю всем приятных выходных и хорошего нового года.


Читайте также: Описание горячих клавиш http://www.gnu.org/software/screen/manual/html_node/Default-Key-Bindings.html#Default-Key-Bindings

краткий список настроек .screenrc файлов и Screen в целом http://www.math.utah.edu/docs/info/screen_9.html