Руководство по выживанию экрана 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 зависает. Поэтому я просто отключил ярлык для замораживания.

Ответ 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

Ответ 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