Автор - Лукас Вестерман (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. Есть два способа:
- Ctrl + a, \ — выходит из screen и закрывает все окна;
- закрыть все окна кроме оболочки, а затем набрать.
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