screen/

Сегодня я хотел бы поделиться небольшой шпаргалкой по screen. Пользуюсь я этой утилитой крайне редко. Поэтому я постоянно забываю, что и как делается. Отсюда и потребность в шпаргалке. Напомню, что screen — это программа, которая позволяет открывать несколько терминалов в одном. Это очень удобно, если вы работаете по SSH или просто без иксов. Также в случае разрыва SSH-соединения screen позволяет возобновить работу там, где вы ее закончили, так как все программы будут продолжать работу в фоне без вас. Последнее часто используется для создания своего рода «демонов для бедных». Есть у screen и другие интересные возможности, например, мониторинг активности терминалов (или ее отсутствия) и ввод диграфов.

Итак, устанавливаем screen:

# В Debian / Ubuntu:
sudo apt-get install screen

# Во FreeBSD:
sudo pkg install screen

Запускаем:

screen

Так можно посмотреть список запущенных экземпляров screen:

screen -ls

А так — подключиться к одному из них:

screen -r 6098 .pts- 0 .vpn

Если в списке только один экземпляр, то можно просто:

screen -r

Пример файлa ~/.screenrc:

startup_message off
hardstatus alwayslastline «%w»

# start windows numering from 1
# via https://wiki.archlinux.org/index.php/GNU_Screen
bind c screen 1
bind ^c screen 1
bind 0 select 10
screen 1

Здесь мы отключаем приветственное сообщение, а также добавляем статусную строку с выводом списка всех окон. Нумерацию окон начинаем с единицы, а не с нуля, как делается по умолчанию.

Интересно, что одним экземпляром screen могут пользоваться сразу несколько человек. Для этого первый должен выполнить:

screen -R pairprog
:multiuser on
:acladd second_user_login

… а второй:

screen -x first_user_login/pairprog

В частности, используя этот прием, можно программировать в паре.

Скриншот, демонстрирующий некоторые возможности screen (кликабельно, PNG, 1366 x 768, 126 Кб):

Пример использования screen

Обратите внимание, как красиво во FreeBSD по умолчанию рисуется статусная строка.

Основные хоткеи в screen следующие.

Окна:

Ctr + A, C Create, создать окно
Ctr + A, K Kill, прибить окно
Ctr + A, W Windows, показать список окон
Ctr + A, Space Переключитьcя на следующее окно
Ctr + A, N То же самое
Ctr + A, Backspace Переключиться на предыдущее окно
Ctr + A, P То же самое
Ctr + A, Ctr + A Вернутся на окно, с которого переключились
Ctr + A, » Выбрать из списка окно, на которое хотим переключиться
Ctr + A, 0-9 Переключиться на окно с таким-то номером
Ctr + A, ‘ Ввести номер окна, на которое хотим переключиться
Ctr + A, Shift + A Переименовать окно
Ctr + A, :number 3 Изменить номер окна
Ctr + A, I Info, информация о текущем окне
Ctr + A, Shift + N Number, номер и название текущего окна

Регионы:

Ctr + A, Shift + S Разделить текущий регион горизонтально
Ctr + A, | Разделить текущий регион вертикально
Ctr + A, :resize +5 Изменить размер региона вертикально (увеличить на 5)
Ctr + A, :resize -h 80 Изменить размер региона горизонтально (установить в 80)
Ctr + A, Tab Переключение между регионами
Ctr + A, Shift + X Прибить текущий регион
Ctr + A, Shift + Q Прибить все регионы кроме текущего

Мониторинг:

Ctr + A, Shift + M Включить/выключить мониторинг активности в окне
Сек + A, _ Мониторинг неактивности в течение 30 секунд

Скролинг и копирование текста:

Ctr + A, [ Перейти в режим copy/scrollback
Ctr + A, ] Вставить содержимое paste buffer (регистр . — «точка»)
Ctr + A, > Записать paste buffer во временный файл (bufferfile)
Ctr + A, < Считать paste buffer из временного файла
Ctr + A, = Удалить bufferfile
Ctr + A, :bufferfile Изменить имя bufferfile (нужно передать аргумент)
Ctr + A, :readreg a Положить paste buffer в регистр a
Ctr + A, :paste a Вставить содержимое регистра a

Режим copy/scrollback похож на редактирование текста в Vim . Например, можно искать текст при помощи / и ? . Перейти к началу строки можно при помощи ^ , а к концу — при помощи $ . Нажатие Y выделяет всю строчку. Нажатие Shift+W копирует одно слово. В целом, в режим copy/scrollback обычно переходят для того, чтобы выделить кусок текста, выведенный ранее в окне. Начало и конец выделения помечаются нажатием на пробел. Попробуйте один раз и сразу все поймете.

Разное:

Ctr + A, ? Подсказка по хоткеям
Ctr + A, D Detach
Ctr + A, Прибить все окна и выйти
Ctr + A, A Послать Ctr + A
Ctr + A, T Time, показать текущее время, имя хоста, LA
Ctr + A, V Version, показать версию screen
Ctr + A, X Lock, для разблакировки нужно ввести пароль пользователя
Ctr + A, F Fit, подогнать окно под размер текущего региона
Ctr + A, Z Как Ctr+Z для обычных приложений

Детали вы найдете в man screen . Ман подробнейший и вообще классный.

А пользуетесь ли вы screen или, быть может, его аналог, tmux ?

EnglishRussianUkrainian