Консоль в маси. Перехід на світлу сторону. Частина перша



Вступ
Всім привіт! Дана серія статей — це текстовий варіант моєї доповіді на 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.

На цьому все. Дякую за увагу. Хто дочитав до кінця окреме спасибі. До зустрічі в наступній статті.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.