К основному контенту

Screen

Screen
Содержание
Screen
Введение
Запуск и основы работы Screen
Работа с несколькими скринами
Запуск скрина в свернутом виде
Прочие возможности
Ссылки
Введение
Данная утилита GNU Screen имеет множество функций. Очень удобно использовать эту утилиту при удаленном подключении к системе по ssh. Но наиболее частое ее применение - сворачивание в фон программ, которые сами этого не умеют, с возможностью последюущего возврата к ним. это может быть полезно при работе с программами, которые реализованы не в виде «демон+клиент», а единым целым, и не работают без запуска интерфейса. Типичный пример - rtorrent, который при всех своих преимуществах запускается только в виде консольного интерфейса, а в фон уходить не умеет, можно только «выйти вообще». Его и возьмем в качестве примера.
Запуск и основы работы Screen
Screen создает отдельные объекты, называемые иногда «скринами». Каждый скрин - это что-то вроде окна, которое можно свернуть-развернуть, если проводить аналогию с графическим интрефейсом. Только вместо окна вы получаете виртуальную консоль, которую можно отправить в фон или вывести на передний план, и в которой запускается указанное приложение.
Простейший запуск осуществляется командой:
screen
При запуске в таком виде, т.е. без параметров, программа создаст новый скрин, в котором откроет сессию командной оболочки, как если бы вы залогинились в tty-консоли или открыли новую вкладку в графическом терминале, для наглядности выполните что-нибудь в командной строке - например, ls.
Теперь о том, как свернуть запущенный скрин вместе со всем, что в нем работает. Для этого нужно нажать Ctrl+A, после чего нажать D. в принципе, это единственная комбинация, которую простому пользователю стоит запомнить. Сtrl+A переведет screen в командный режим. клавиша D даст команду свернуть текущий скрин. Теперь вы можете закрыть терминал или разлогиниться с tty-консоли - запущенный в свернутом скрине процесс продолжит работу в фоне.
Для того, чтобы вернуться к свернутому скрину, достаточно запустить:
screen -r
Ключ -r как раз и укажет программе, что нужно развернуть свернутый скрин (если таковой, конечно, имеется). Перед вами должна предстать та самая сессия в консоли, которую вы свернули, со всем, что в ней было.
Теперь выйдете из сессии с помощью команды exit. Screen сообщит о завершении своей работы. Таким образом, вам достаточно выйти из запущенного в скрине процесса, а screen выключится сама.
Далее запустим вышеупомянутый rtorrent. Делается это предельно просто - нужно указать screen команду для запуска. Тогда вместо командной оболочки откроется указанная программа:
screen rtorrent
Перед вами открылся rtorrent, его можно свернуть, а потом вернуться к нему, как описано выше. Rtorrent будет качать/раздавать в фоне, избавляя вас от необходимости держать ради него открытую вкладку терминала или tty-консоль (что еще и небезопасно).
Работа с несколькими скринами
Eсли вам нужно запустить лишь одну программу - вышеописанного более чем достаточно, но в случае если таких программ несколько - скринам нужно будет раздать имена, чтобы screen знала, к какому именно свернутому скрину вы хотите вернуться. Имя создаваемого скрина задается с помощью ключа -S:
screen -S rtor rtorrent
Cверните скрин с rtorrent'ом и запустите еще что-нибудь, к примеру nano:
screen -S nano nano
Этот скрин также сверните. Теперь можно вернуться к любому из двух скринов аналогично вышеописанному, только с указанием имени скрина, который вы хотите развернуть, например:
screen -r nano
Список запущенных скринов можно посмотреть с помощью:
screen -list
или
screen -ls
Возможно так-же вернуться к уже развернутому в ином терминале скрину:
screen -x nano
Запуск скрина в свернутом виде
Программу можно запустить сразу в свернутом скрине. Это полезно в случае с автозапуском, или когда вы знаете, что программа сама все сделает (установит соединение и продолжит закачку/раздачу в нашем примере с rtorrent), и смотреть там не на что. Делается все опять же просто. Команда на запуск будет такой:
screen -dmS rtor rtorrent
Ключ -d укажет, что скрин нужно свернуть, а ключ -m - что его нужно для начала создать. Процесс «усложняется» по той причине, что ключ -d по умолчанию используется для сворачивания ранее запущенного скрина, развернутого на другой консоли или в соседней вкладке, с той целью, чтобы развернуть его в текущем месте (ибо если одна и та же программа управляется из двух мест - это может и к конфузу привести). Таким образом нужная программа запустится сразу в фоне, а screen лишь выведет сообщение о том, что программа запущена, и скрин свернут.
Прочие возможности
Данная статья описывает лишь основы. На самом деле утилита screen обладает массой возможностей, например: можно разбить экран пополам, отобразив несколько скринов с разными программами; можно задать множество разных параметров, настроить под разные типа терминалов. Во всем этом поможет разобраться screen –help или man screen. Также есть еще одна полезная комбинация клавиш. Как сказано в мануале, «если вам лень читать кучу текста - запомните эту комбинацию» - Ctrl+A и затем ? 1). Вам будет выведен список доступных сочетаний клавиш и команд, которые они выполняют. Все это нажимается также после Ctrl+A.

Выделю несколько полезных комбинаций:
Ctrl+A затем «c» — создать окно screen
Ctrl+A затем «p» — переключиться к предыдущему окну screen
Ctrl+A затем «n» — переключиться к следующему окну screen
Ctrl+A затем «d» — отключиться от screen оставив сеансы работающими
Ctrl+D — выйти из всех сеансов screen
Ctrl+A затем «H» — записывать в журнал

Комментарии

Популярные сообщения из этого блога

How to do Arithmetic Operations in Ansible

You can use arithmetic calculations in Ansible using the Jinja syntax. This is helpful in many situations where you have stored the output of an operation, and you need to manipulate that value. All usual operation like addition, subtraction, multiplication, division, and modulo are possible. Let us start with an example. We will be using the  debug module  to print the out the result. The following tasks show all the basic arithmetic operations. The output is given in comments. Ansible arithmetic operation example - hosts: loc tasks: - debug: msg: "addition{{ 4 +3 }}" #Ansible addition 7 - debug: msg: "substraction {{ 4 - 3 }}" #Ansible arithmetic substraction 1 - debug: msg: "multiplication {{ 4 * 3 }}" #multiplication 12 - debug: msg: "Modulo operation {{ 7 % 4}}" #ansible Modulo operation - find remainder 3 - debug: msg: "floating division {{ 4 / 3}}" #ansible floating divisio...

ubuntu/debian ipmi

#install ipmitool (this is for debian) apt-get install ipmitool #insert the kernel modules needed for ipmi modprobe ipmi_devintf modprobe ipmi_si modprobe ipmi_msghandler #get the current mode (01 00 is dedicated mode) ipmitool raw 0x30 0x70 0x0c 0 #send the raw command to enable dedicated lan ipmitool raw 0x30 0x70 0xc 1 1 0
Ansible - Appending to lists and dictionaries  n this blog post I'll show how to add items to lists and dictionaries, when using loops, and across tasks. Normally when trying to add a new item to the variable, while in the loop, or between tasks, Ansible will ovewrite the values, keeping the result of the last iteration. For example, let's see what will be the result of running the following playbook: --- - name: Append to list hosts: localhost vars: cisco: - CiscoRouter01 - CiscoRouter02 - CiscoRouter03 - CiscoSwitch01 arista: - AristaSwitch01 - AristaSwitch02 - AristaSwitch03 tasks: - name: Add Cisco and Airsta devices to the list set_fact: devices: "{{ item }}" with_items: - "{{ cisco }}" - "{{ arista }}" - name: Debug list debug: var: devices verbosity: 0 [przemek@quasar blog]$ ansible-playbook append_list.yml PLAY [Append to list] ****************...