screen — возвращаемся в свою консоль

Очень удобно запустить задачу в консольке, закрыть окошко ssh клиента и иметь возможность вернуться к этой самой консольке, с сохранённой историей вводимых команд, контролировать происходящие процессы, будь то скачивание файлика, компиляция ядра или нечто другое подобное. Поэтому будем использовать screen на FreeBSD.
Ставим:
cd /usr/ports/sysutils/screen
make install clean

команды, freebsd, настройка, установка, сервер, server, ubuntu

rehash
cp /usr/local/etc/screenrc ~/.screenrc

Содержимое файла ~/.screenrc с небольшими пояснениями:
#
# This is an example for the global screenrc file.
# You may want to install this file as /usr/local/etc/screenrc.
# Check config.h for the exact location.
#
# Flaws of termcap and standard settings are done here.
#

#сообщение-приветствие выключено (off)
#startup_message off

#defflow on # will force screen to process ^S/^Q

deflogin on
#autodetach off

#сообщение бипера
vbell on
#текст сообщения бипера
vbell_msg » Wuff —- Wuff!! »

# all termcap entries are now duplicated as terminfo entries.
# only difference should be the slightly modified syntax, and check for
# terminfo entries, that are already corected in the database.
#
# G0 we have a SEMI-GRAPHICS-CHARACTER-MODE
# WS this sequence resizes our window.
# cs this sequence changes the scrollregion
# hs@ we have no hardware statusline. screen will only believe that
# there is a hardware status line if hs,ts,fs,ds are all set.
# ts to statusline
# fs from statusline
# ds delete statusline
# al add one line
# AL add multiple lines
# dl delete one line
# DL delete multiple lines
# ic insert one char (space)
# IC insert multiple chars
# nx terminal uses xon/xoff

termcap facit|vt100|xterm LP:G0
terminfo facit|vt100|xterm LP:G0

#the vt100 description does not mention «dl». *sigh*
termcap vt100 dl=5E[M
terminfo vt100 dl=5E[M

#facit’s «al» / «dl» are buggy if the current / last line
#contain attributes…
termcap facit al=E[LE[K:AL@:dl@:DL@:cs=E[%i%d;%dr:ic@
terminfo facit al=E[LE[K:AL@:dl@:DL@:cs=E[%i%p1%d;%p2%dr:ic@

#make sun termcap/info better
termcap sun ‘up=^K:AL=E[%dL:DL=E[%dM:UP=E[%dA:DO=E[%dB:LE=E[%dD:RI=E[%dC:IC=E[%d@:WS=1000E[8;%d;%dt’
terminfo sun ‘up=^K:AL=E[%p1%dL:DL=E[%p1%dM:UP=E[%p1%dA:DO=E[%p1%dB:LE=E[%p1%dD:RI=E[%p1%dC:IC=E[%p1%d@:WS=E[8;%p1%d;%p2%dt$<1000>’

#xterm understands both im/ic and doesn’t have a status line.
#Note: Do not specify im and ic in the real termcap/info file as
#some programs (e.g. vi) will (no,no, may (jw)) not work anymore.
termcap xterm|fptwist hs@:cs=E[%i%d;%dr:im=E[4h:ei=E[4l
terminfo xterm|fptwist hs@:cs=E[%i%p1%d;%p2%dr:im=E[4h:ei=E[4l

# Long time I had this in my private screenrc file. But many people
# seem to want it (jw):
# we do not want the width to change to 80 characters on startup:
# on suns, /etc/termcap has :is=E[rE[mE[2JE[HE[?7hE[?1;3;4;6l:
termcap xterm ‘is=E[rE[mE[2JE[HE[?7hE[?1;4;6l’
terminfo xterm ‘is=E[rE[mE[2JE[HE[?7hE[?1;4;6l’

#
# Do not use xterms alternate window buffer.
# This one would not add lines to the scrollback buffer.
#termcap xterm|xterms|xs ti=E7E[?47l
#terminfo xterm|xterms|xs ti=E7E[?47l

#make hp700 termcap/info better
termcap hp700 ‘Z0=E[?3h:Z1=E[?3l:hs:ts=E[62″pE[0$~E[2$~E[1$}:fs=E[0}E[61″p:ds=E[62″pE[1$~E[61″p:ic@’
terminfo hp700 ‘Z0=E[?3h:Z1=E[?3l:hs:ts=E[62″pE[0$~E[2$~E[1$}:fs=E[0}E[61″p:ds=E[62″pE[1$~E[61″p:ic@’

#wyse-75-42 must have defflow control (xo = «terminal uses xon/xoff»)
#(nowadays: nx = padding doesn’t work, have to use xon/off)
#essential to have it here, as this is a slow terminal.
termcap wy75-42 nx:xo:Z0=E[?3hE[31h:Z1=E[?3lE[31h
terminfo wy75-42 nx:xo:Z0=E[?3hE[31h:Z1=E[?3lE[31h

#удалить некоторые дурацие/опасные комбинации кнопок
#remove some stupid / dangerous key bindings
bind ^k
#bind L
bind ^
#make them better
bind \ quit
bind K kill
bind I login on
bind O login off
bind } history

сохраняем, закрываем.
Запускаем:
screen
Чтобы отключится от screen жмём ctrl+d
Для примера(возьмём простейший пример, только дабы рассмотреть основы) обьясню, как запустить закачку файлика, отключится от screen, а потом опять подключится и продолжить следить за качающимся файликом.

Итак после того как запустили screen, жмём
fetch ftp://ftp.ru.freebsd.org/pub/FreeBSD/ports/ports-stable/ports.tar.gz
далее ctrl+a
ctrl+d

Теперь подключимся к висящему в фоне screen
screen -rd
и видим наши процентики качающегося файлика, неправдали удобно 😉

Предположим вы запустили screen делали какие то дела там(копмилите ядро, к примеру) и вам надо ещё одна(или больше) такая же консоль, в которую можно вернуться. Вы сначала отключаетесь от первой консоли сочетанием сначала ctrl+a , потом ctrl+d , затем запускаете снова screen делаете и там дела свои, отключаетесь и от 2-ой консоли.
Надо вернуться в нужную нам консоль (например именно в ту, где копмилится ядро, проконтролировать процесс так сказать), но набрав screen -rd видим:
There are several suitable screens on:
643.ttyp0.v001 (Detached)
650.ttyp0.v001 (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

Сообщение говорит нам, что запущено 2-а screen’a, поэтому нам надо выбрать в какую именно консоль вернуться. Определитель номера консоли — его ID (цифра перед ttyp0). Соответственно для возврата в первую консоль, набираем:
screen -rd 643

А если во вторую, то:
screen -rd 650

Перед вводом какой то команды непосредственно screen’у, необходимо всегда сначала жать ctrl+a, а только потом горячую кнопку команды.

Ниже список команд и их горячих кнопок:
Crtl-A Crtl-A — перейти к предыдущему окну
Crtl-A Crtl-N — перейти к следующему окну
Crtl-A C — очистить текущее окно
Crtl-A Crtl-I — показать информацию о текущем окне
Crtl-A A — переименовать текущее окно
Crtl-A Crtl-B — послать в окно сигнал Break
Crtl-A k — убить текущее окно;
Crtl-A Crtl-M — показать последнее сообщение в строке статуса

screen’ы актуальны до перезагрузки сервера, но если вы таки перезагрузили сервер, сессии станут не активны, и дабы подчистить мусор, нужно очистить директорию /tmp/screens/S-username , где username-имя пользователя.

В общем то и всё, утилита действительно полезная, маленькая, советую всем!

Добавить комментарий