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

StackOverflow https://stackoverflow.com/questions/70614

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Я пользуюсь экраном более 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 ~]$

Ctrl+А ?- показать экран помощи!

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

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

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

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

Вы можете переназначить клавишу 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

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

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

  • Изменить имя экранного окна очень просто: Ctrl+А сдвиг+А.
  • Вы пропустили последнее сообщение с экрана? Ctrl+а Ctrl+м покажет это снова для вас.
  • Если вы хотите запустить что-то (например, отслеживать файл) и экран сообщит вам об изменениях, используйте Ctrl+А сдвиг+м в целевом окне.Предупреждение:оно сообщит вам, если что-либо изменения.
  • Хотите выбрать окно 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+а сдвиг+от 0 до 9 для окон с 10 по 19.

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

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

Я «должен» добавить это:добавлять

bind s

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

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

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

Ctrl+а с [c]создать новое окноCtrl+а 0-9 переключаться между окнами по номеру

screen -r — вернуться в отключенный сеанс

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

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

Ctrl+А Н = перейти на ***N***дальний экран

Ctrl+А п = перейти к ***P***предыдущему экрану

Ctrl+А С = ***C***создать новый экран

Ctrl+А Д = ***D***отсоедините экран

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

Есть некоторая интересная работа делается для получения хорошей настройки экрана 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

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

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

сбежать `е

Это обратный апостроф.

Это позволяет мне использовать обратную галочку в качестве клавиши выхода (например.чтобы создать новый экран, я нажимаю обратную галочку-c, отсоединить — обратную галочку-d, обратную галочку-?— справка, обратная галочка — предыдущий экран и т. д.).Единственный способ помешать (и мне пришлось отвыкнуть) — это использовать обратную галочку в командной строке для захвата результатов выполнения или вставку всего, что содержит обратную галочку.В первом случае я изменил свою привычку, используя соглашение 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

Мне нравится настраивать сеанс экрана с описательными именами окон.^a A позволит вам дать имя текущему окну, а ^a " предоставит вам список ваших окон.Когда закончите, отсоедините экран с помощью ^a d и снова присоедините его с помощью screen -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 удаляет его (они потенциально могут быть разрушительными, поэтому используйте их на свой страх и риск).хД

Добавить:

Еще один bash-изм, который мне кажется удобным при частой работе с экраном:

alias sls='/usr/bin/screen -ls'

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top