Що я повинен знати, щоб правильно використовувати екран GNU? [зачинено]


106

Я щойно представив друга на GNU Screen, і вони важко звикають до нього. Це змушує мене задуматися про найважливіші речі, які він повинен знати про відмінну корисність екрану , про ті самі речі, які, як вам здається, варто навчати когось із початківців. Які існують аналогії та зручні поради щодо запам'ятовування палітур тощо?

Це було б приголомшливо.


1
Є кілька хороших відповідей на це також і тут: stackoverflow.com/questions/70661/what-is-gnu-screen
— Кріс

Хтось опублікував подібне запитання до цього питання про помилку сервера .
— Вагнерр

Якщо хтось тільки починає роботу з Екраном і не має труднощів, вони, можливо, захочуть перевірити альтернативу tmux .
— Крістофер Ботс

Відповіді:


93

Я використовую 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спробувати розблокувати її.


1
^ До списку слід додати k, щоб закрити вікно.
— Лео Леопольд Герц 준영

7
Я не використовую ^ A k через можливість випадкового вбивства більше, ніж я маю намір. Натомість я просто виходжу з оболонки у вікно, використовуючи ^ D (або exit). Вікно екрана автоматично закриється після виходу з останньої оболонки у вікно.
— Грег Хьюгілл

9
"^ Esc - режим копіювання, який я використовую для прокрутки" Ви бог серед людей, сер.
— Роб Говард

4
^ А [робить точно те саме.
— atx

Дякую за ^ A ^ D трюк ... Я затримався і не зміг повернутися до своєї сесії. Якщо це допомагає комусь, я трохи пізніше написав статтю, в якій пояснюється основні екрани, як тут, але є ще кілька хитрощів geekpad.ca/blog/post/…
— Патрік Забудь

36

Я не зміг звикнути до екрана, поки не знайшов спосіб встановити "рядок стану" в нижній частині екрана, який показує, на якій "вкладці" або "віртуальному екрані" ви перебуваєте та які ще є. Ось моя настройка:

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

3
Ознайомтеся також з byobu (екрани-профілі): startpad.net/byobu
— Дрю Стівенс

Це дивовижно, дякую. Я намагався зрозуміти, що насправді відбувається, коли я намагався розділити свій термінал. Я не розумів, що мені потрібно запустити екран спочатку, щоб змусити будь-яку з цих команд працювати, нерозумно, я знаю.
— Огадай

30

Ctrl+ A? - покажіть екран довідки!


Я з цим повністю згоден. Це набагато корисніше, ніж інші відповіді, оскільки ви можете вирахувати за ним інші команди, але навпаки не можете це зробити. Також набагато простіше запам'ятати річ.
— Лео Леопольд Герц 준영

26

Якщо ваш друг звик натискати, ^Aщоб перейти до початку рядка в Bash, він / вона чекає деяких сюрпризів, оскільки ^Aприв'язка клавіш до екрана. Зазвичай я закінчую заморожений екран, можливо через якусь випадкову клавішу, яку я натиснув після ^A:-)

У тих випадках я намагаюся

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

щоб виправити це. Щоб перейти до початку рядка всередині екрану, це послідовність клавіш ^A a.


1
Легко змінити символ втечі з ^ A на щось інше. Я вклав деталі у свою відповідь.
— Ендрю Джонсон

3
+ 1 + 1 + 1 ^ A s ... дякую ... заблокований екран :)
— Yuji 'Tomita' Tomita

1
@agnul +1 для вас для ^ A a Я є користувачем ^ A у звичайному сеансі bash, і я не можу використовувати його всередині екранного сеансу. Дякую за чудову пораду! :)
— icasimpan

Дякую 100 разів вам за те, що ви сказали мені, як отримати ctrl Робочий внутрішній екран. Шукав цього все своє життя.
— користувач674669

Тут чутливі регістри "A" та "a"?
— Депутат Адітія

12

Ви можете перевстановити ключ клавіші " Ctrl+", Aщоб бути ще одним ключем на ваш вибір, тому якщо ви використовуєте його для чогось іншого, наприклад, для переходу на початок рядка в bash, вам просто потрібно додати рядок до ~ /. файл screenrc. Щоб зробити це ^ b або ^ B, використовуйте:

escape ^bB

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

  screen -ls # Перераховує ваші поточні сеанси на екрані
  screen -S <ім'я> # Створює новий екранний сеанс під назвою ім'я
  screen -r <ім'я> # Підключається до названих сеансів екрана

При використанні екрана потрібно лише кілька команд:

  ^ A c Створіть нову оболонку
  ^ A [0-9] Оболонка перемикання
  ^ A k Убити поточну оболонку
  ^ A d Відключення від екрана
  ^ А? Покажіть допомогу

Відмінна швидка довідка можна знайти тут . Варто робити закладки.


Я використовую вкладені сеанси екрану. Я запускаю зовнішній з того, screen -e^ooщоб я міг використовувати для цього Ctrl + O, а потім запустити внутрішні, screen -mщоб вони почали нові сеанси.
— staticsan

1
Ви можете змінити ключ втечі на льоту. Під час сеансу запущеного екрана введіть, ^A :а \Bbпотім натисніть клавішу Enter, щоб встановити клавішу виходу на ^ B. Взагалі, ^A :дозволяє оцінити команду, яку .screenrcрозуміють ваші .
— малана

8

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

  • Змінити ім'я екранного вікна дуже просто: 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для Windows 10-19.


7

Ctrl+ Aє базовою командою

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

Ctrl+ A P= перейдіть до екрану *** P *** revable

Ctrl+ A C= *** C *** реагувати на новий екран

Ctrl+ A D= *** D *** встановіть ваш екран


6

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

Я написав це пару років тому, але це все ще хороший вступ, який отримує багато позитивних відгуків.


Посилання (ефективно) порушено:$VAR1 = \'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (111 "Connection refused") at ../lib/Singleton/DBI.pm line 95. ';
— Пітер Мортенсен

6

Я "повинен" додати це: додати

bind s

до вашого .screenrc, якщо Ви - як і я - використовували розділені вікна, як C-a Sрозбиває фактичне вікно, але C-a sзаморожує його. Тому я просто відключив ярлик швидкого заморожування.


2
^-Qрозморожує, якщо потрапить^-S
— Платон

Ви праві @Plato. Я все ще працюю в середовищі з користувачами, які не запам'ятовують майже жодного із ярликів ... Мені потрібно було його відключити.
— Zsolt Botykai

NP я щойно знайшов цю тему і шукав "заморозити", і не знайшов того, що шукав
— Платон

6

Ctrl+ a- це спеціальний ключ.

Ctrl+ a d- [d] етах, залиште програми (irssi?) у фоновому режимі, йдіть додому.

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

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

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


Хоча, коли я вперше дізнався про screenмене, я був розгублений у тому, що це насправді означає зняття та повторне прикріплення екрана. Цитата : "... у вас можуть бути тривалі виконання завдань на окремих консолях (наприклад, ssh на машині ремонта, сеанси IRC, ...) на даній машині, відірватися від сеансу, перейти з одного фізичного місця в інше, підключитися до машина через ssh і повторно приєднається до екранного сеансу, щоб продовжувати працювати. "
— JW.

4

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


Дякую! Це мене хвилювало деякий час.
— Ден Гольдштейн

3

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

втеча `е

Це бетік-е.

Це дозволяє мені використовувати backtick як клавішу втечі (наприклад, для створення нового екрана, я натискаю backtick-c, від'єднання - backtick-d, backtick-? - допомога, backtick-backtick - попередній екран тощо). Єдиний спосіб, коли це заважає (і мені довелося зламати звичку), - використовувати backtick в командному рядку для зйомки результатів виконання або вставки всього, що містить backtick. Для першого я змінив свою звичку, використовуючи конвенцію BASH $ (command). Для останнього я зазвичай просто відкриваю інший xterm або відриваюся від екрана, а потім вставляю вміст, що містить backtick. Нарешті, якщо я хочу вставити буквальний backtick, я просто натискаю backtick-e.


блискучий. Я використовую бекстіки весь час, хоча я знаю, що мені слід використовувати $ (...), тож тепер я думаю, що, можливо, доведеться змінити свої способи. Назад трохи не вдається, але приємно мати одну клавішу без модифікаторів. Але чому "е", і як ви це пам’ятаєте?
— іконоборство

Я щойно випробував 'escape' ', і це добре працює і запам'ятовується легше. Якщо ви потрапили в backtick і не отримаєте те, що очікуєте, просто натисніть його ще раз.
— іконоборство

Я зробив це, але чи є спосіб насправді набрати backtick, перебуваючи на екрані? Іноді для цього доводиться це робити, і я ненавиджу, щоб це зробити, щоб зробити це ...
— Guillochon

@Guillouchon: попередній коментар пояснює саме це.
— tripleee

3

Проводиться якась цікава робота щодо отримання гарного налаштування екрана 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

Таким чином, я завжди знаю, які вікна відкриті, і що в них зараз працює.


3

Я використовую наступне для 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 $*
}

Він відкриває новий екран для вищезазначених псевдонімів і iff за допомогою ssh, він перейменовує назву екрана з ім'ям хосту ssh.


2

Мені подобається налаштувати сеанс на екрані з описовими іменами для Windows. ^ a A дозволить вам дати ім'я поточному вікні, а ^ a "дасть вам список ваших вікон. Закінчивши, від'єднайте екран із ^ оголошення та повторно додайте екран -R


1

Мені подобається використовувати 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

Додайте:

Ще один химерність, що мені здається зручним при роботі з екраном:

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

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



0

Ctrl+ A- чудовий спеціальний персонаж для людей Unix, але якщо ви використовуєте екран для розмови з OpenVMS , то неможливість ^ A змусить вас лисити передчасно.

У VMS , якщо ви редагуєте команду DCL перед виконанням з буфера історії, режим Insert вимкнено (це повинно бути з кількох причин, я сюди не потрапляю) ... увімкніть його, щоб ви не 't перезаписуйте команду, а не пробіл, ви повинні натиснути `^ A.


Я використовую screen -e ^Llз аналогічних причин; Я просто не можу навчитися вводити ctrl-A для переходу до початку рядка в Emacs. На щастя, ctrl-L - це натискання клавіш, яке мені рідко потрібне, а також IMHO добре поєднується зі своїм загальним значенням (перемальовування / очищення екрана).
— tripleee

@tripleee: Мій .screenrc has escape ^@^@, який використовує нульовий символ, а не control-A. У більшості систем ви можете ввести нульовий символ як контрольний простір, який дуже легко набрати. (У мене в основному сеансі працює вкладений екранний сеанс, який працює всередині вікна; для цього я маю escape ^]^].)
— Кіт Томпсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.