GNU Screen Survival Guide
Что люди думают не только о важных вещах, которые вы должны знать об отличной утилите Screen, но и о вещах, которые, по вашему мнению, стоит научить кого-то, начинающего, с нуля?
Я только что познакомил друга с Screen, и им трудно привыкнуть к нему. Таким образом, аналогии и полезные советы для запоминания привязок и т. Д. Были бы потрясающими.
19 ответов
Я использую экран более 10 лет и, вероятно, использую менее половины функций. Так что определенно нет необходимости изучать все его функции сразу (и я бы не рекомендовал пробовать). Мои ежедневные команды:
^A ^W - window list, where am I
^A ^C - create new window
^A space - next window
^A p - previous window
^A ^A - switch to previous screen (toggle)
^A [0-9] - go to window [0-9]
^A esc - copy mode, which I use for scrollback
Я думаю это все. Я иногда использую функции разделения экрана, но, конечно, не ежедневно. Другой совет: если экран, кажется, заблокирован, потому что вы случайно нажали какую-то случайную комбинацию клавиш, выполните обе команды ^Q и ^A ^Q, чтобы попытаться разблокировать ее.
Я не мог привыкнуть к экрану, пока не нашел способ установить "строку состояния" в нижней части экрана, которая показывает, на какой "вкладке" или "виртуальном экране" вы находитесь и какие есть другие. Вот моя установка:
[roel@roel ~]$ cat .screenrc
# Here comes the pain...
caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"
backtick 2 5 5 $HOME/scripts/meminfo
hardstatus alwayslastline "%{+b dw}:%{-b dw}:%{+b dk}[%{-b dg} %0C:%s%a %{=b dk}]-[ %{-b dw}Load%{+b dk}:%{-b dg}%l %{+b dk}] [%{-b dg}%2`%{+b dk}] %=[ %{-b dg}%1`%{=b dk} ]%{-b dw}:%{+b dw}:%<"
sorendition "-b dw"
[roel@roel ~]$ cat ~/scripts/meminfo
#!/bin/sh
RAM=`cat /proc/meminfo | grep "MemFree" | awk -F" " '{print $2}'`
SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print $2}'`
echo -n "${RAM}kb/ram ${SWAP}kb/swap"
[roel@roel ~]$
Если ваш друг имеет привычку давить ^A
чтобы добраться до начала строки в bash, его ждут сюрпризы, так как ^A
является привязкой клавиши команды экрана. Обычно я получаю замерзший экран, возможно из-за какой-то случайной клавиши, которую я нажимаю после ^A
:-)
В этих случаях я стараюсь
^A s
а также ^A q
блокировка / разблокировка прокрутки терминала
чтобы исправить это. Чтобы перейти к началу строки внутри экрана, последовательность клавиш ^A a
Вы можете переназначить клавишу escape из ctrl-A, чтобы она стала другим ключом по вашему выбору, поэтому, если вы используете его для чего-то другого, например, чтобы перейти к началу строки в bash, вам просто нужно добавить строку в ~/.screenrc файл. Чтобы сделать это ^b или ^B используйте:
escape ^bB
Из командной строки используйте имена сессий, чтобы держать под контролем несколько сессий. Я использую одну сессию на задачу, каждая с несколькими вкладками:
screen -ls перечисляет ваши текущие сеансы экрана screen -Sсоздает новый сеанс экрана с именем name screen -r подключается к именованным сеансам экрана
При использовании экрана вам нужно всего несколько команд:
^ C может создать новую оболочку ^A [0-9] переключатель оболочки ^ K убить текущую оболочку ^ D отсоединиться от экрана ^ А? показать помощь
Отличный краткий справочник можно найти здесь. Стоит закладки.
Несколько советов для тех, кто знаком с экраном, но кто не помнит, что они читают на странице руководства:
- Изменить имя окна экрана очень просто: Ctrl + A Shift + A.
- Вы пропустили последнее сообщение с экрана? Ctrl + Ctrl + M покажет это снова для вас.
- Если вы хотите что-то запустить (например, хвост файла), и на экране появится сообщение о том, что есть изменение, используйте ctrl + A shift + m в целевом окне. Предупреждение: оно сообщит вам, если что-то изменится.
- Хотите выбрать окно 15 напрямую? Попробуйте это в вашем
.screenrc
файл:
bind ! select 11 bind @ select 12 bind \# select 13 bind $ select 14 bind % select 15 bind \^ select 16 bind & select 17 bind * select 18 bind ( select 19 bind ) select 10
Это назначает Ctrl + Shift + 0 до 9 для окон с 10 по 19.
Ctrl+A - базовая команда
Ctrl+A N = перейти на экран ***N***ext
Ctrl+A P = перейти на предыдущий экран ***P***
Ctrl+A C = *** C *** открыть новый экран
Ctrl+A D = *** D *** подключить ваш экран
http://www.debian-administration.org/articles/34
Я написал это пару лет назад, но это все еще хорошее введение, которое получает много положительных отзывов.
Я "должен" добавить это: добавить
bind s
на ваш .screenrc
, если Вы - как я - использовали разделенные окна, как C-a S
разбивает фактическое окно, но C-a s
замораживает это. Так что я просто отключил ярлык замораживания.
Ctrl + A - это специальный ключ.
Ctrl + D - [D] Etach, оставить программы (irssi?) в фоновом режиме, иди домой.
ctrl + a c [c] создать новое окно ctrl + 0-9 переключение между окнами по номеру
screen -r - вернуться к отдельному сеансу
Это охватывает 90% случаев использования. Не пытайтесь показывать всю функциональность одновременно.
Не очень важно, не только в связи с экраном, но включение 256 цветов в моем терминале, GNU Screen и Vim значительно улучшили мой опыт работы с экраном (тем более, что я кодирую в Vim около 8 часов в день - есть несколько приятных для глаз цветовых схем).
В следующей версии Ubuntu Server по умолчанию выполняется хорошая работа по настройке хорошего экрана gnu, которая включает использование нижней части экрана, чтобы показать все окна, а также другие полезные сведения о машине (например, # updates). доступно и нужно ли перезагружать машину). Вы можете, вероятно, захватить их .screenrc
и настроить его под свои нужды.
Самые полезные команды, которые у меня есть в моем .screenrc
следующие
shelltitle "$ |bash" # make screen assign window titles automatically
hardstatus alwayslastline "%w" # show all window titles at bottom line of term
Таким образом, я всегда знаю, какие окна открыты, и что в них сейчас запущено.
Первая модификация, которую я делаю в.screenrc, это изменение команды escape. В отличие от многих из вас, мне не нравится последовательность Ctrl-A по умолчанию из-за ее вмешательства в эту фундаментальную функциональность практически во всех других контекстах. В моем файле.screenrc я добавляю:
escape`e
Это круто.
Это позволяет мне использовать обратную клавишу в качестве управляющей клавиши (например, чтобы создать новый экран, я нажимаю backtick-c, detach is backtick-d, backtick-? Is help, backtick-backtick - предыдущий экран и т. Д.). Единственный способ, которым это мешает (и мне пришлось отказаться от привычки), это использовать backtick в командной строке для захвата результатов выполнения или вставки чего-либо, содержащего backtick. Для первого я изменил свою привычку, используя соглашение BASH $(команда). В последнем случае я обычно просто открываю другой xterm или отсоединяюсь от экрана, затем вставляю содержимое, содержащее обратную черту. Наконец, если я хочу вставить буквальный обратный удар, я просто нажимаю backtick-e.
Я не могу вспомнить, у кого я это украл (кто-то на dotfile.org). Я слегка изменил его для ssh:
#!/bin/sh
# scr - Runs a command in a fresh screen
#
# Get the current directory and the name of command
wd=`pwd`
cmd=$1
shift
# We can tell if we are running inside screen by looking
# for the STY environment variable. If it is not set we
# only need to run the command, but if it is set then
# we need to use screen.
if [ -z "$STY" ]; then
$cmd $*
else
# Screen needs to change directory so that
# relative file names are resolved correctly.
screen -X chdir $wd
# Ask screen to run the command
if [ $cmd == "ssh" ]; then
screen -X screen -t ""${1##*@}"" $cmd $*
else
screen -X screen -t "$cmd $*" $cmd $*
fi
fi
Затем я установил следующие псевдонимы bash:
vim() {
scr vim $*
}
man() {
scr man $*
}
info() {
scr info $*
}
watch() {
scr watch $*
}
ssh() {
scr ssh $*
}
Он открывает новый экран для указанных выше псевдонимов и, если он использует ssh, переименовывает заголовок экрана с именем хоста ssh.
Ура z0mbix
Кто-то опубликовал похожий вопрос на этот вопрос на сервере Fault.
Мне нравится настраивать сеанс экрана с описательными именами для окон. ^a позволит вам дать имя текущему окну, а ^a "даст вам список ваших окон. Когда закончите, отсоедините экран с помощью ^a d и заново присоедините с экраном -R
Я люблю использовать screen -d -RR
автоматически создавать / прикреплять к заданному экрану. Я создал функции bash, чтобы было проще...
function mkscreen
{
local add=n
if [ "$1" == '-a' ]; then
add=y
shift;
fi
local name=$1;
shift;
local command="$*";
if [ -z "$name" -o -z "$command" ]; then
echo 'Usage: mkscreen [ -a ] name command
-a Add to .bashrc.' 1>&2;
return 1;
fi
if [ $add == y ]; then
echo "mkscreen $name $command" >> $HOME/.bashrc;
fi
alias $name="/usr/bin/screen -d -RR -S $name $command";
return 0;
}
function rmscreen
{
local delete=n
if [ "$1" == '-d' ]; then
delete=y
shift;
fi
local name=$1;
if [ -z "$name" ]; then
echo 'Usage: rmscreen [ -d ] name
-d Delete from .bashrc.' 1>&2;
return 1;
fi
if [ $delete == y ]; then
sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
fi
unalias $name;
return 0;
}
Они создают псевдоним для /usr/bin/screen -d -RR -S $name $command
, Например, мне нравится использовать irssi в сеансе экрана, поэтому в моем.bashrc (под этими функциями) у меня есть:
mkscreen irc /usr/bin/irssi
Тогда я могу просто напечатать irc
в терминал, чтобы попасть в irssi. Если экран 'irc' еще не существует, он создается и из него запускается / usr / bin / irssi (который, конечно, подключается автоматически). Если он уже запущен, я просто присоединяюсь к нему, принудительно отключая любой другой экземпляр, который уже подключен к нему. Это довольно мило.
Другой пример - создание временных псевдонимов экрана для perldocs, когда я с ними сталкиваюсь:
mkscreen perlipc perldoc perlipc
perlipc # Start reading the perldoc, ^A d to detach.
...
# Later, when I'm done reading it, or at least finished
# with the alias, I remove it.
rmscreen perlipc
Опция -a (должен быть первым аргументом) добавляет псевдоним экрана к.bashrc (чтобы он был постоянным), а -d удаляет его (это может быть разрушительным, поэтому используйте его на свой страх и риск). XD
Append:
Еще один вариант, который я считаю удобным при работе с экраном:
alias sls='/usr/bin/screen -ls'
Таким образом, вы можете перечислить свои экраны с гораздо меньшим количеством нажатий клавиш. Я не знаю, если sls
сталкивается с любыми существующими утилитами, но в моей системе этого не произошло, поэтому я пошел на это.
^A A переключается обратно на экран, с которого вы только что пришли.
^A - отличный специальный символ для людей UNIX, но если вы используете экран для общения с OpenVMS, то невозможность ^A сделает вас лысым преждевременно. В VMS, если вы редактируете команду DCL перед выполнением из буфера истории, режим вставки отключен (это должно быть по нескольким причинам, в которые я не буду входить) ... чтобы включить его, чтобы не перегружать наберите команду, а не пробел, вы должны нажать ^A