Вступление
Всем привет! Данная серия статей — это текстовый вариант моего доклада на WSD в Киеве 26 ноября. Решил написать, чтобы дать более развернутое описание темам, которые были затронуты, а некоторые моменты уточнить. Кроме того, есть возможность рассмотреть больше примеров, услышать мнение от тебя, уважаемый читатель. И, конечно же, поделиться информацией с более широкой аудиторией.
План побега
- Менеджеры терминалов. Часть первая
- Менеджеры терминалов. Часть вторая
- Скрипты на bash
- Автоматизация рутинных задач
Важный момент. Предполагается, что читатель уже имеет опыт работы с терминалом на *nix OS. В примерах используется много утилит, таких как grep, find, xargs, echo, sed
, и другие. На этих утилитах я не буду останавливаться подробно. Также нет задачи рассмотреть все и вся.
У нас большая команда и я часто вижу как одну и ту же задачу люди выполняют по-разному. Это также касается и работы в терминале. Знакомьтесь — это IE6.
Представьте себе ситуацию, что ваш любимый браузер не умеет работать с вкладками. Более того, когда он закрывается в самый неподходящий момент, вы не можете восстановить сессию и продолжить работу.
А вот так большинство пользователей представляют себе терминал. Черный экран, белые символы.
А теперь представьте, что в ваш любимый браузер добавили возможность работать в терминале. В нем вы можете выполнять команды git, npm, node
и многие другие. Звучит как что-то нереальное из будущего. А вот и нет.
И в этой серии статей я хочу показать, что терминал может быть удобным и многофункциональным, только нужно знать как это все приготовить.
И так, приступим. Какие темы рассмотрим? Рассмотрим менеджеры терминалов. Потом скрипты на bash. И последнее, это как автоматизировать рутину с помощью скриптов на bash.
Репозиторий
Для удобства я создал репозиторий на github со всеми примерами и темами, которые будем рассматривать на протяжении всей серии статей. Так что можно скачать и попрактиковаться.
Слайды
Доступны по этой ссылке. Презентация сделана на движке shower.
Где это все работает
Это все работает на Windows 10 stable, Mac OS X, Ubuntu. Предпочтение отдается Ubuntu. Все примеры я буду показывать в Ubuntu. Также есть классный эмулятор терминала — это ConEmu. Правда, в нем не получится попробовать менеджеры терминалов.
Менеджеры терминалов. Часть первая. Screen
Начнем со screen’а. Познакомился я с ним совершенно случайно. Коллега помогал мне в решении одной задачи. И он увидел, что я не пользуюсь менеджером терминалов. Тогда он сказал: «Хм, давай поправим это.» Установил мне screen, помог настроить и показал парочку базовых сочетаний клавиш.
Установка
Чтобы установить screen достаточно выполнить первую команду. После этого можно будет его запустить, набрав команду screen в терминале.
Базовые сочетания клавиш
Почему я не выводил весь список в статью, а добавил ссылку?! Все просто. Во-первых, они есть в мануале (man screen
). Во-вторых, их не нужно учить, запоминать или еще что-то там, просто нужно начать использовать.
Настройки
По умолчанию screen настроен не очень удобно. У него даже нет строки состояния. Выводится сообщение о лицензии и еще некоторые неудобства. Все это можно поправить с помощью файла конфигураций. Разместить его нужно в домашней директории пользователя.
screen в деле
Давайте рассмотрим screen в работе. Как его запустить мы уже знаем. Достаточно набрать screen. Перед этим не забудьте поместить файл настроек в домашнюю директорию пользователя.
- Рабочая область. Layout.
- Строка состояния. На ней размещаются вкладки и другие элементы.
- Вкладка с именем по умолчанию.
Мы рассмотрели начальное состояние screen’а. Давайте теперь рассмотрим его на примере более сложной задачи.
Для этого нам понадобится репозиторий, о котором я упоминал выше. Давайте его склонируем себе на компьютер:
git clone https://github.com/var-bin/terminalForCoder__WSD.git
Далее запустите screen. Нам понадобится 2 — 3 вкладки. Чтобы создать новую вкладку нужно нажать следующие сочетания клавиш:
Ctrl + a, c - создать новую вкладку
Следующим шагом будет переименование вкладок. Для этого используйте:
Ctrl + a, A - переименовать вкладку
Чтобы переключаться между вкладками воспользуйтесь этими клавишами:
Ctrl + a, int - переключиться на нужную вкладку (int - номер вкладки 0 - 9)
Или
Ctrl + a, " - интерактивное переключение вкладок
С вкладками немного попрактиковались. Теперь давайте разобьем наш текущий регион на два независимых региона. Делается это с помощью сочетания клавиш:
Ctrl + a, | - разбить текущий регион на два новых по вертикали
Чтобы во втором регионе была возможность работать, в него нужно перейти и активировать явно. Сделать это можно с помощью:
Ctrl + a, Tab - переключить фокус на следующий регион Ctrl + a, c - создать новую вкладку
Теперь давайте запустим в том регионе, что слева, к примеру, midnight commander (любую другую утилиту) с помощью команды:
mc
А в том регионе, что справа, запустим наше тестовое приложение. Это простой чат, написанный на node.js и socket.io. Этот пример взят с официального сайта socket.io. Единственное, что я добавил — это немного логирования, чтобы мы видели что оно работает. Для этого нужно перейти в директорию %repoName%/screen/chat-example
. И выполнить команды:
npm i node index.js
%repoName%
— имя директории в которую был склонирован репозитой.
Если все хорошо, то вы должны увидеть на экране строку:
listening on localhost:3000
После этого запустите браузер и в новой вкладке перейдите по адресу localhost:3000
. Наберите любое сообщение в строке ввода и нажмите Enter
. Как видите, все работает и вы видите это сообщение также и в терминале. В том регионе, где выполняли команду node index.js
.
И теперь, самое интересное. Давайте сымитируем обрыв связи. Закроем терминал через крестик. Но при этом не закрывайте браузер. И попробуйте отправить еще несколько сообщений. Как видите, все продолжает работать. Это при том, что мы только что закрыли терминал.
Это говорит о том, что screen сохранил сессию и все процессы, которые были запущены. Давайте подключимся к этой сессии обратно. Запустите терминал и выполните команду:
screen -r
Как вы могли заметить, тот layout, который мы создавали раньше, он не сохранился. Это довольно неприятный сюрприз. В настройках screen’a есть команды, которые позволяют настроить сохранение ранее созданного layout’а. Но сколько я не пробовал у меня не завелось. И это ситуация когда у нас две-три вкладки. А представьте себе картину, когда у нас шесть-десять вкладок. Layout разбит на регионы как по вертикали так и по горизонтали. И в самый неподходящий момент у нас происходит обрыв связи. Единственный плюс — это то, что все запущенные процессы сохранятся.
Я долгое время работал без менеджеров терминалов по одной простой причине. Я о них не знал! Считал, что это нормально открывать несколько окон putty (windows + подключение к удаленному серверу) и переключаться между ними с помощью сочетания клавиш Alt + Tab
. И как-то пытаться во всем этом хаосе работать.
Теперь о плохом. screen не умеет создавать layout для каждой вкладки. Также screen не умеет сохранять layout, если оборвалась связь или еще что-то там. До версии 4.1 не умел делать разбивку по вертикали (для меня это критично). Когда вы создаете новый регион, то в нем отдельно нужно создавать новое окно (Ctrl+a, c
), выполнить переход в нужную директорию и т.д. Чтобы удалить регион тоже нужно помучиться Ctrl+a :remove
. Для меня screen был как глоток свежего воздуха посреди мегаполиса. Но чтобы его настроить «под себя», нужно потратить немало времени. И некоторые хотелки так и не получилось запилить в виду ограниченности реализации screen.
Подведем краткий итог. Мы рассмотрели один из популярных менеджеров терминалов, а именно screen. Также мы рассмотрели как его установить, настроить. На примере рассмотрели screen в работе. Еще раз хочу напомнить: если нужно посмотреть какие сочетания клавиш за что отвечают, какие настройки можно еще задать для screen’а, какие можно передавать опции в качестве аргументов screen’у, и многое другое, то выполните команду:
man screen
Забегая немного наперед, в следующей статье мы рассмотрим более продвинутый менеджер терминалов, а именно tmux. Также сравним screen и tmux.
На этом все. Спасибо за внимание. Кто дочитал до конца отдельное спасибо. До встречи в следующей статье.
ссылка на оригинал статьи https://habrahabr.ru/post/317534/
Добавить комментарий