it-swarm-ru.tech

GNU Руководство по выживанию экрана

Что люди думают не только о важных вещах, которые вы должны знать о превосходной утилите Screen, но и о вещах, которые, по вашему мнению, стоит научить кого-то, начинающего, с нуля?

Я только что познакомил друга с Screen, и им трудно привыкнуть к нему. Так что аналогии и полезные советы для запоминания привязок и т.д. Были бы потрясающими.

105
Henry B

Я использую экран более 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, чтобы попытаться разблокировать ее.

91
Greg Hewgill

Я не мог привыкнуть к экрану, пока не нашел способ установить "строку состояния" в нижней части экрана, которая показывает, на какой "вкладке" или "виртуальном экране" вы находитесь и какие есть другие. Вот моя установка:

[[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] ~]$
36
Roel

Ctrl+A ? - показать экран справки!

30
James Muscat

Если ваш друг имеет привычку нажимать ^A, чтобы перейти к началу строки в bash, он/она ожидает некоторых сюрпризов, поскольку ^A является привязкой экранной команды. Обычно я получаю замерзший экран, возможно из-за какой-то случайной клавиши, которую я нажал после ^A :-)

В этих случаях я стараюсь

^A s и ^A q блокировать/разблокировать прокрутку терминала

чтобы исправить это. Чтобы перейти к началу строки внутри экрана, последовательность клавиш должна быть ^A a

26
agnul

Вы можете переназначить управляющую клавишу из ctrl-A, чтобы она была другой по вашему выбору, поэтому, если вы используете ее для чего-то другого, например, чтобы перейти к началу строки в bash, вам просто нужно добавить строку в ваш файл ~/.screenrc. Чтобы сделать это ^ b или ^ B используйте:

escape ^bB

Из командной строки используйте имена сессий, чтобы держать под контролем несколько сессий. Я использую одну сессию на задачу, каждая с несколькими вкладками:

 screen -ls выводит список текущих сеансов экрана 
 screen -S <name> создает новый сеанс экрана с именем name 
 screen -r <name> подключается к названным сеансам экрана 

При использовании экрана вам нужно всего несколько команд:

 ^ A c создать новую оболочку 
 ^ A [0-9] переключатель Shell 
 ^ A k убить текущую оболочку 
 ^ A d отключиться от экрана 
 ^ А? показать помощь 

Отличный краткий справочник можно найти здесь . Стоит закладки.

12
Andrew Johnson

Несколько советов для тех, кто знаком с экраном, но кто не помнит, что они читают на странице руководства:

  • Изменить имя окна экрана очень просто: ctrl+Ashift+A,.
  • Вы пропустили последнее сообщение с экрана? ctrl+actrl+m покажет это снова для вас.
  • Если вы хотите что-то запустить (например, файл), и на экране появится сообщение об изменении, используйте ctrl+Ashift+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+ashift+0 through 9 для окон с 10 по 19.

8
staticsan

ctrl+a это специальный ключ.

ctrl+ad - [d] etach, оставь программы (irssi?) в фоновом режиме, иди домой.

ctrl+ac [c] открыть новое окно ctrl+a0-9 переключаться между окнами по номеру

screen -r - вернуться к отдельному сеансу

Это охватывает 90% случаев использования. Не пытайтесь показывать всю функциональность одновременно.

6
tadeusz

Ctrl+A это базовая команда

Ctrl+AN = перейти на экран *** N *** ext

Ctrl+AP = перейти к открытому экрану *** P ***

Ctrl+AC = *** C *** открыть новый экран

Ctrl+AD = *** D *** etach ваш экран

6
Niko Gunadi

http://www.debian-administration.org/articles/34

Я написал это пару лет назад, но это все еще хорошее введение, которое получает много положительных отзывов.

6
user14038

Я "должен" добавить это: добавить

bind s

на ваш .screenrc, если Вы - как я - раньше использовали разделенные окна, так как C-a S разделяет реальное окно, но C-a s замораживает его. Так что я просто отключил ярлык заморозки.

6
Zsolt Botykai

Не очень важно, не только связано с экраном, но включение 256 цветов в моем терминале, GNU Screen и Vim значительно улучшило мой экран (особенно после того, как я кодирую в Vim около 8 часов день - есть несколько отличных для глаз цветовых схем).

4
jkramer

Существует некоторая интересная работа работа над настройкой gnu-screen, которая происходит по умолчанию в следующей версии Ubuntu Server, которая включает использование нижней части экрана для отображения всех окон, а также других полезные сведения о машине (например, # доступны обновления и требуется ли перезагрузка машины). Вы можете, вероятно, взять их .screenrc и настроить его под свои нужды.

Самые полезные команды, которые у меня есть в моем .screenrc, следующие:

shelltitle "$ |bash" # make screen assign window titles automatically
hardstatus alwayslastline "%w" # show all window titles at bottom line of term

Таким образом, я всегда знаю, какие окна открыты, и что в них сейчас запущено.

3
David Dean

Первое изменение, которое я делаю в .screenrc, это изменение команды escape. В отличие от многих из вас, мне не нравится последовательность Ctrl-A по умолчанию из-за ее вмешательства в эту фундаментальную функциональность практически во всех других контекстах. В моем файле .screenrc я добавляю:

escape`e

Это круто.

Это позволяет мне использовать обратную клавишу в качестве управляющей клавиши (например, для создания нового экрана, я нажимаю backtick-c, detach is backtick-d, backtick-? Is help, backtick-backtick - предыдущий экран и т.д.). Единственный способ, которым это мешает (и мне пришлось отказаться от привычки), это использовать backtick в командной строке для захвата результатов выполнения или вставки чего-либо, содержащего backtick. Для первого я изменил свою привычку, используя соглашение BASH $ (команда). Для последнего я обычно просто открываю другой xterm или отсоединяюсь от экрана, затем вставляю содержимое, содержащее обратную черту. Наконец, если я хочу вставить буквальный обратный удар, я просто нажимаю backtick-e.

3
Gary Chambers

Я не могу вспомнить, у кого я это украл (кто-то на 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

3
user203445

Мне нравится настраивать сеанс экрана с описательными именами для окон. ^ a A позволит вам дать имя текущему окну, а ^ a "даст вам список ваших окон. Когда закончите, отсоедините экран с помощью ^ a d и заново прикрепите с экраном -R

2
innaM

Кто-то опубликовал похожий вопрос на этот вопрос на Ошибка сервера .

2
Vagnerr

Мне нравится использовать 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 с какими-либо существующими утилитами, но в то время это не происходило в моей системе, поэтому я пошел на это.

1
bambams

^ A - это отличный специальный символ для людей UNIX, но если вы используете экран для общения с OpenVMS, то неспособность ^ A сделает вас лысым преждевременно. В VMS, если вы редактируете команду DCL перед выполнением из буфера истории, режим вставки отключен (это должно быть по нескольким причинам, в которые я не буду входить) ... чтобы включить его, чтобы не перегружать наберите команду, а не пробел, вы должны нажать ^ A

0
user2146463

^ A переключается обратно на экран, с которого вы только что пришли.

0
dummy