Руководство по выживанию экрана GNU
Что люди думают не только о том, что вам нужно знать о превосходной утилите экрана, но о том, что вы считаете целесообразным научить кого-то, начинающего, с нуля?
Я только что привел друга на экран, и им трудно привыкнуть к нему. Таким образом, аналогии и полезные советы для запоминания привязок и т.д. Были бы замечательными.
Ответы
Ответ 1
Я использую экран более 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, чтобы попытаться разблокировать его.
Ответ 2
Я не мог привыкнуть к экрану, пока не нашел способ установить "строку состояния" в нижней части экрана, которая показывает, на какой вкладке или виртуальном экране вы находитесь, а какие есть, Вот моя настройка:
[[email protected] ~]$ 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"
[[email protected] ~]$ 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"
[[email protected] ~]$
Ответ 3
Ctrl + A? - показать экран справки!
Ответ 4
Если ваш знакомый имеет привычку нажимать ^A
, чтобы добраться до начала строки в bash, он/она ждет сюрпризы, так как ^A
является привязкой клавиш командной строки экрана. Обычно я заканчиваю замороженным экраном, возможно, из-за какого-то случайного ключа, который я нажал после ^A
:-)
В этих случаях я пытаюсь
^A s
и ^A q
блокировать/разблокировать прокрутку терминала
чтобы исправить это. Чтобы перейти к началу строки внутри экрана, последовательность клавиш ^A a
Ответ 5
Вы можете переназначить escape-ключ из ctrl-A, чтобы быть другим ключом по вашему выбору, поэтому, если вы используете его для чего-то другого, например. для перехода к началу строки в bash вам просто нужно добавить строку в файл ~/.screenrc. Чтобы сделать это ^ b или ^ B, используйте:
escape ^bB
В командной строке используйте сеансы имен, чтобы контролировать несколько сеансов. Я использую один сеанс для каждой задачи, каждый с несколькими вкладками:
screen -ls lists your current screen sessions
screen -S <name> creates a new screen session called name
screen -r <name> connects to the named screen sessions
При использовании экрана вам понадобятся только несколько команд:
^A c create a new shell
^A [0-9] switch shell
^A k kill the current shell
^A d disconnect from screen
^A ? show the help
Здесь можно найти отличную ссылку на здесь. Стоит закладок.
Ответ 6
Некоторые советы для тех, кто знаком с экраном, но которые, как правило, не помнят того, что они читают на странице руководства:
- Изменить имя окна экрана очень просто: ctrl + A shift + A.
- Вы пропустили последнее сообщение с экрана? ctrl + A 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 + A shift + 0 through 9 для окон с 10 по 19.
Ответ 7
ctrl + a - специальный ключ.
ctrl + a d - [d] etach, оставьте программы (irssi?) в фоновом режиме, идите домой.
ctrl + a c [c] введите новое окно
ctrl + a 0-9 переключиться между окнами по номеру
screen -r - вернуться в отдельный сеанс
Это охватывает 90% случаев использования. Не пытайтесь показать все функции за один раз.
Ответ 8
Ctrl + A является базовой командой
Ctrl + A N= перейти к экрану *** N *** ext
Ctrl + A P= перейти к экрану *** P *** revious
Ctrl + A C= *** C *** введите новый экран
Ctrl + A D= *** D *** etach ваш экран
Ответ 9
http://www.debian-administration.org/articles/34
Я написал это пару лет назад, но это все-таки хорошее введение, которое получает много положительных отзывов.
Ответ 10
Я должен "добавить": add
bind s
на ваш .screenrc
, если вы, как и я, - использовали для использования разделенных окон, поскольку C-a S
разбивает фактическое окно, но C-a S
зависает. Поэтому я просто отключил ярлык для замораживания.
Ответ 11
Не очень важно не только связать экран, но позволяющий 256 цветов в моем терминале, GNU Screen и Vim улучшил мой экранный опыт (тем более, что я код в Vim около 8 часов в день - есть некоторые замечательные цвета для глаз).
Ответ 12
Существует некоторая интересная работа, которая делается для получения хорошей настройки gnu-экрана, которая по умолчанию используется в следующей версии Ubuntu Server, которая включает в себя использование нижней части экрана для отображения всех окон, а также других полезных сведений о машине (например, доступных # обновлений и необходимости перезагрузки компьютера). Вероятно, вы можете захватить их .screenrc
и настроить его на свои нужды.
Наиболее полезными командами, которые у меня есть в .screenrc
, являются следующие
shelltitle "$ |bash" # make screen assign window titles automatically
hardstatus alwayslastline "%w" # show all window titles at bottom line of term
Таким образом, я всегда знаю, какие окна открыты, и что в них работает в данный момент.
Ответ 13
Первая модификация, которую я делаю для .screenrc, заключается в изменении команды escape. В отличие от многих из вас, мне не нравится последовательность по умолчанию Ctrl-A из-за ее вмешательства в эту фундаментальную функциональность практически в любом другом контексте. В моем файле .screenrc я добавляю:
escape `e
Этот backtick-e.
Это позволяет мне использовать обратную линию в качестве клавиши эвакуации (например, для создания нового экрана, я нажимаю backtick-c, отключение backtick-d, backtick-? help, backtick-backtick - предыдущий экран и т.д.)., Единственный способ, которым это мешает (и мне пришлось нарушить привычку), использовать обратную линию в командной строке для захвата вывода вывода или вставки всего, что содержит обратную сторону. Для первого я изменил свою привычку, используя соглашение BASH $(command). Для последнего я обычно просто открываю другой xterm или отсоединяюсь от экрана, а затем вставляю содержимое, содержащее обратную сторону. Наконец, если я хочу вставить буквальный обратный ход, я просто нажимаю backtick-e.
Ответ 14
Я не помню, с кем я его украл (кто-то на 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.
Cheers z0mbix
Ответ 15
Мне нравится настраивать сеанс экрана с описательными именами для окон. ^ a A даст вам имя для текущего окна, а ^ a "предоставит вам список ваших окон.
По завершении отсоедините экран с помощью кнопки a и d-re-attach с помощью экрана -R
Ответ 16
Кто-то отправил аналогичный вопрос на Ошибка сервера.
Ответ 17
Мне нравится использовать 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:
Другой bash -ism, который мне удобен при работе с экраном:
alias sls='/usr/bin/screen -ls'
Таким образом, вы можете перечислить свои экраны с гораздо меньшим количеством нажатий клавиш. Я не знаю, сталкивается ли sls
с любыми существующими утилитами, но в то время в моей системе это не было, поэтому я пошел на это.
Ответ 18
^ A A переключается обратно на экран, из которого вы только что пришли.
Ответ 19
^ A - большой особый char для людей UNIX, но если ваш экран использовать, чтобы говорить с OpenVMS, то неспособность ^ A сделает вас лысыми преждевременно. В VMS, если вы редактируете команду DCL до выполнения из буфера истории, режим Insert отключен (должен быть по нескольким причинам, я не буду здесь входить).., чтобы включить его, чтобы вы не перегружались, введите команду, а не пробел, вы должны нажать ^ A