Pull to refresh

Консоль в массы. Переход на светлую сторону. Часть первая

Reading time5 min
Views24K


Вступление


Всем привет! Данная серия статей — это текстовый вариант моего доклада на WSD в Киеве 26 ноября. Решил написать, чтобы дать более развернутое описание темам, которые были затронуты, а некоторые моменты уточнить. Кроме того, есть возможность рассмотреть больше примеров, услышать мнение от тебя, уважаемый читатель. И, конечно же, поделиться информацией с более широкой аудиторией.

План побега


  1. Менеджеры терминалов. Часть первая
  2. Менеджеры терминалов. Часть вторая
  3. Скрипты на bash
  4. Автоматизация рутинных задач

Важный момент. Предполагается, что читатель уже имеет опыт работы с терминалом на *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. Перед этим не забудьте поместить файл настроек в домашнюю директорию пользователя.



  1. Рабочая область. Layout.
  2. Строка состояния. На ней размещаются вкладки и другие элементы.
  3. Вкладка с именем по умолчанию.

Мы рассмотрели начальное состояние 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.

На этом все. Спасибо за внимание. Кто дочитал до конца отдельное спасибо. До встречи в следующей статье.
Tags:
Hubs:
+15
Comments42

Articles

Change theme settings