Видео ролики бесплатно онлайн

Смотреть с сюжетом видео

Официальный сайт mixzona 24/7/365

Смотреть видео бесплатно

23.09.09 18:11 LeniH

Жизнь в консолиScreen — текстовый оконный менеджер

Screen - это оконный менеджер с эмуляцией терминала VT100/ANSI. Другими словами, это консоль в консоли, т.е. запуская одну терминальную сессию мы можем запустить параллельно несколько команд и наблюдать за их работой. Конечно многие могут сказать, мол зачем нужен какой-то там консольный оконный менеджер, когда уже есть gnome-terminal, konsole и прочие графические эмуляторы терминала, поддерживающие вкладки?



Рассмотрим ситуацию, когда Screen реально необходим. Предположим, что на Вас возложена обязанность удаленно управлять Linux сервером. Тогда, как и всякий другой админ, вы подключаетесь к серверу через SSH и выполняете различные команды. Если вам нужно еще одно окно, то вы создаете еще одно SSH подключение. И все идет хорошо до тех пор, пока сеть нормально функционирует, но однажды может случиться что-то непредвиденное и сеть упадет, причем и ваш локальный компьютер и удаленный сервер будут нормально функционировать, но все удаленные сессию будут потеряны, запущенный программы - убиты, несохраненные скрипты придется писать заново (особенно непрятно когда идет достаточно долгий процесс, который обваливается на самом последнем этапе и все приходится начинать сначала).

Screen

При использовании Screen-а мы не только избавляемся от проблемы создания нескольких SSH соединений с сервером, но и в случае сбоя в сети мы можем легко переподключиться и все запущенные программы продолжат свое функционирование. Для решения проблемы достаточно заново создать SSH-соединение и набрать в консоли команду

screen -dr

Еще одной интересной особенностью Screen-а о которой я недавно узнал, является запись всего вывода консоли в текстовый файл, обычно bash ведет запись списка команд (history), а screen может записывать и вывод который был получен в результате выполнения этих команд. Для того чтобы включить запись нужно нажать в запущенном screen-е Ctrl-a H, а для завершения записи достаточно повторно нажать данное сочетание клавиш. Screen запишет все в файл screenlog.n, где n - целое число соответствующее номеру окна Screen. Обычно я проигрываю полученную "демку" таким набором команд (предположим, что запись происходила с окна под номером 1):

time=0.1
rows=`wc -l screenlog.1 | awk '{print $1}'`
for i in `seq 1 $rows`; do head -$i screenlog.1 | tail -1; sleep $time; done ;
reset


Здесь time - время задержки (чем больше это время, тем медленнее будет происходить вывод "демки")

Рассмотрим основные (повседневные) команды Screen. Для того, чтобы запустить Screen необходимо в терминале набрать команду screen. После чего терминал внешне не изменится (только может быть появится текст с лицензией Screen-а. Для того, чтобы исполнять специальные команды screen-а нужно сначала нажать клавижи Ctrl-a (это некоторый префикс перед всеми командами, его можно изменить с помощью файла конфигурации, но в статье я буду придерживаться идеи то, что именно сочетание клавиш Ctrl-a это префикс для команд Screen-а). Приведем некоторый список часто используемых команд:

Ctrl-a c - создать новое окно Screen
Ctrl-a n - переместиться в следующее окно
Ctrl-a p - переместиться в предыдущее окно
Ctrl-a d - отключиться от текущей сессии screen, при этом все команды продолжат свое выполнение
Ctrl-a K - "убить" выбранное окно (нужно если программа в окне зависла и не хочет умирать самостоятельно)
Ctrl-a " - вывести список всех окон
Ctrl-a A - изменить название текущего окна (удобно, чтобы различать окна между собой, например поставить названия "localhost", "ssh 1.2.3.4" и т.п.

Для того чтобы получить полный список команд можно воспользоваться этим руководством.

Рассмотрим еще одну интересную особенность Screen, а именно назначением "биндингов" на различные сочетания клавиш. Для начала, скажу, что мне казалась нудобной привязка клавиш Ctrl-a как некого префикса, намного лучше будет сделать этим префиксом сочетание клавиш Ctrl-\. Для этого в конфигурационном файле .screenrc необходимо добавить следующую строку:

escape \034\034

Еще мне казалось неудобным каждый раз набирать Ctrl-a n и Ctrl-a p для перемещения по окнам, лучше если это действие будет назначено на функциональные клавиши F1 и F2 соответственно. Для этого в конфиг файл добавляем:

bindkey -k k1 prev
bindkey -k k2 next

Еще было бы интересно назначить на определенные клавиши запуск определенной программы в новом окне. Рассмотрим, как пример запуск Vim-а в окне №5 по комбинации клавиш Ctrl-a e. Для этого нужно добавить в конфиг следующее:

bind e screen -t 'Vim' 5 vim

Еще одной особенностью Screen-а является возможность мониторинга отдельных окон на активность или неактивность. Такая функциональность удобна когда идет длительный процесс компиляции в одном окне а пользователь занимается чем-то в другом и хочет узнать когда компиляция закончится (мониторинг на неактивность) или же когда в одном окне идет наблюдение за выполнением программы (например find) и пользователь хочет узнать когда программа выдаст какие-нибудь строки на терминал (наблюдение за активностью). Для включения этого функционала необходимо нажать следующую комбинацию клавиш:

Ctrl-a M (для слежения за активность)
Ctrl-a _ (для сдежения за неактивность)

Описаны далеко не все возможности программы Screen, но и описанный функционал достаточен для полноценной работы. И в заключении хочу сказать, что Screen - это очень функциональная находка для всех пользователей Linux, работающих с консолью.



muhas 23.09.09 18:18 # +3
А про разбиение на регионы? это же делает скрин реальным тайловым манагером для консоли.
Хорошо написал
m0nhawk 23.09.09 21:56 # +1
Использую его в основном на сервере. Что бы компиляция не прервалось, иль ещё что-то.

И вот встал вопрос. Можно ли как-то казать скрину, что бы он в случае одного события при загрузке открывал новое окно и в нем запускал, к примеру, mcabber?
muhas 24.09.09 09:14 # +0
чесно говоря не понял вопроса. но включая режим телепатии думаю в конфиге что-то вроде screen -t mcabber mcabber
m0nhawk 24.09.09 17:12 # +0
Точнее. Я хочу, что бы скрин, если есть инет - в новом окне скрина запускается тот же mcabber.
muhas 24.09.09 17:37 # +0
exec [[fdpat] newcommand [args ...]]
может поможет, не знаю правда.

Я бы скрипт написал запуска скрина, и если есть инет запускаем screen -t mcabber mcabber
а если нет то просто screen $@ ($ для параметров мало ли параметры какие)
Astramak 23.09.09 22:12 # +0
Только сегодня коллега мне рассказывал про Screen, чудеса )
Спасибо за статью. Буду активно юзать.
or10n 24.09.09 00:48 # +0
а мы под ним microdc2 запускаем по удаленке (само оно в фоне не запускаетццо :( )
andy_shev 24.09.09 12:23 # +2
Как-то страшненько:
1
2
3
4
5


for i in `seq 1 $rows`; do head -$i screenlog.1 | tail -1; sleep $time; done ;

 


Лучше хотя бы так:
1
2
3
4
5


cat screenlog.1 | while read x; do echo $x; sleep $time; done;

 


Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 79)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 1636 из 131 города)
            Топ пользователей Топ блогов
            В сети: bosha, Lost

            Новенькие: divius, xel, ser_dm, ruz, afiskon
            welinux.ru

            В хорошем качестве hd видео

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн