Краткая шпаргалка по использованию GNU screen
12 апреля 2016
Сегодня я хотел бы поделиться небольшой шпаргалкой по screen. Пользуюсь я этой утилитой крайне редко. Поэтому я постоянно забываю, что и как делается. Отсюда и потребность в шпаргалке. Напомню, что screen — это программа, которая позволяет открывать несколько терминалов в одном. Это очень удобно, если вы работаете по SSH или просто без иксов. Также в случае разрыва SSH-соединения screen позволяет возобновить работу там, где вы ее закончили, так как все программы будут продолжать работу в фоне без вас. Последнее часто используется для создания своего рода «демонов для бедных». Есть у screen и другие интересные возможности, например, мониторинг активности терминалов (или ее отсутствия) и ввод диграфов.
Итак, устанавливаем screen:
sudo apt-get install screen
# Во FreeBSD:
sudo pkg install screen
Запускаем:
Так можно посмотреть список запущенных экземпляров screen:
А так — подключиться к одному из них:
Если в списке только один экземпляр, то можно просто:
Пример файлa ~/.screenrc:
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 могут пользоваться сразу несколько человек. Для этого первый должен выполнить:
:multiuser on
:acladd second_user_login
… а второй:
В частности, используя этот прием, можно программировать в паре.
Скриншот, демонстрирующий некоторые возможности screen (кликабельно, PNG, 1366x768, 126 Кб):
Обратите внимание, как красиво во 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. Ман подробнейший и вообще классный.
Дополнение: Краткая шпаргалка по использованию tmux


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.