GNU Screen Survival Guide [закрыто]


что люди думают не только основные вещи, которые вам нужно знать о отличной утилите экрана, но и то, что вы считаете целесообразным научить кого-то, Новичка, с нуля?

Я только что познакомил друга с экраном, и им трудно привыкнуть к нему. Поэтому аналогии и полезные советы для запоминания персонализация и т. д. было бы здорово.

19 103

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 }'`
SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print }'`
echo -n "${RAM}kb/ram ${SWAP}kb/swap"
[roel@roel ~]$

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

если ваш друг имеет привычку нажимать ^A чтобы добраться до начала линии в Баш, он / она находится в некоторых сюрпризов, так как ^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

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

некоторые советы для тех, кто вроде знаком с экраном, но кто, как правило, не помнит вещи, которые они читают в man-странице:

  • изменить название окна экрана очень проста: ctrl+Ashift+A.
  • вы пропустили последнее сообщение с экрана? ctrl+actrl+m покажет его снова для вас.
  • если вы хотите запустить что-то (например хвост файл) и есть экран сказать вам, когда есть изменения, используйте ctrl+Ashift+m в целевом окне. Предупреждение: это даст вам знать, если что-нибудь изменения.
  • выбрать окно 15 напрямую? Попробуйте это в вашем .screenrc file:
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 до 9 для windows 10 через 19.

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

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

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

bind s

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

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

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

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

экран-r-вернуться к отсоединенной сессии

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

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

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

Ctrl+AP = перейти к***P * * * revious экран

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

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

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

есть немного интересная работа выполняется при получении хорошей настройки 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

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

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

побег ' e

Это бэк-ТИК-е.

Это позволяет мне использовать backtick в качестве клавиши escape (например, чтобы создать новый экран, я нажимаю backtick-c, отсоединяю backtick-d, backtick -? есть помогите, Апостроф-Апостроф-это предыдущий экран и т. д.). Единственный способ, которым это мешает (и мне пришлось сломать себя от привычки), - это использовать backtick в командной строке для захвата вывода выполнения или вставки всего, что содержит backtick. Для первого я изменил свою привычку, используя соглашение BASH $(command). Для последнего я обычно просто открываю другой xterm или отсоединяю от экрана, а затем вставляю содержимое, содержащее backtick. Наконец, если я хочу вставить литеральный 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=
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 $*
}

Он открывает новый экран для вышеуказанных псевдонимов и iff с помощью ssh, он переименовывает название экрана с именем хоста ssh.

Ура z0mbix

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

кто-то опубликовал подобный вопрос на Ошибка Сервера.

мне нравится использовать screen -d -RR для автоматического создания / прикрепления к заданному экрану. Я создал функции bash, чтобы сделать его проще...

function mkscreen
{
    local add=n

    if [ "" == '-a' ]; then
        add=y
        shift;
    fi

    local name=;
    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 [ "" == '-d' ]; then
        delete=y
        shift;
    fi

    local name=;

    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

дополнение:

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

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

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

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

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