Сегодня я хотел бы поделиться небольшой шпаргалкой по 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, 1366 x 768, 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
. Ман подробнейший и вообще классный.
А пользуетесь ли вы screen или, быть может, его аналог, tmux ?