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

tmux example

Вступ
Досить довгий час я використав в своїй роботі screen. Але з часом він мене перестав влаштовувати. Я почав шукати альтернативи. Такою альтернативою є tmux. На багатьох порталах його описують так: «Це той-же screen, тільки на стероїдах». Спочатку я не міг зрозуміти чому таке порівняння поки не спробував. Скажу чесно, я на нього не з першого разу перейшов. Три-чотири рази пробував, повертався до screen'у. Але tmux все ж переміг.

Важливий момент. До попередньої статті я отримав чимало коментарів з альтернативами screen і tmux. Тут, як мовиться, на смак і колір олівці різні. Другий момент, на який хотів звернути увагу, передбачається, що у читача немає доступу до графічної оболонки. Все що є в його арсеналі — термінал (CLI) і набір команд, якими він може скористатися.

Установка
Ну що ж, перейдемо до встановлення tmux. Досить виконати першу команду, щоб його встановити. Після цього можна буде запустити його, набравши команду
tmux
в терміналі.

Для більш досвідчених користувачів є можливість зібрати tmux з репозиторію або завантажити архів собі на комп'ютер. Як це зробити описано тут.

Базові поєднання клавіш
Тут як і у випадку з screen'ом, додам тільки посилання. Далі беремо і починаємо використовувати. Заучувати, запам'ятовувати не потрібно. Єдиний нюанс, комбінації клавіш відрізняються, але це легко можна поправити через файл налаштувань.

Налаштування
За замовчуванням, tmux, що називається «з коробки», налаштований досить якісно. Вам не потрібно налаштовувати положення панелі з вкладками, яким кольором їх виділяти, і інші налаштування як це було в screen. Але якщо раптом вам знадобиться конфігураційний файл, то візьміть собі на замітку: називатися він повинен
.tmux.conf
; помістити його потрібно в домашню директорію користувача.

Хочу поділитися корисною налаштуванням, без якої мені доводилося створювати заново сесію tmux. Опишу її більш докладно. Робоча машина у мене під управлінням ОС Windows. Для підключення до віддаленого сервера використовується putty і pagent (для додавання ключів). Коли додаєш ключ в pagent потрібно вводити пароль (passphrase ви вказуєте при створенні ключів ssh). У putty для кожного з'єднання встановлена ось ця галочка:

PuTTY Configuration sshТакі особливості роботи windows + putty + віддалене з'єднання по ssh. Ця галочка потрібна, щоб працював SSH-agent forwarding.

Так от, повернемося до проблеми. Якщо ви раптом втратили зв'язок з мережею або в офісі раптово відключили електрику, то tmux, звичайно ж, збереже сесію. І при повторному підключенні до цієї сесії ввічливо попросить ввести пароль для ключа. Так буде кожен раз. Тобто перестане працювати SSH-agent forwarding. Це можна поправити, якщо завершити поточну сесію tmux і перепідключитися до віддаленого сервера. З одного боку це не так критично.

Але з часом ця проблема приносить досить багато незручностей і хочеться її вирішити раз і назавжди. Щоб вирішити цю проблему потрібно додати налаштування в файл
.bashrc
, який перебуває в домашній директорії користувача:

Спробую описати, що відбувається, коли ви підключаєтеся до віддаленого сервера з включеним SSH-agent forwarding. Коли ssh-клієнт (в даному випадку putty), з включеним SSH-agent forwarding, під'єднується до сервера, то він створює сокет, через який можна отримати цей самий ключ. Також він створює змінну
$SSH_AUTH_SOCK
, яка посилається на цей сокет. Цю змінну успадковує запущений shell (оболонка, яка обробляє команди користувача) у рамках поточної сесії. Крім цієї змінної, створюються ще декілька змінних:
$SSH_CLIENT, $SSH_CONNECTION, $SSH_TTY
, в яких зберігається інформація про поточний ssh-з'єднання. Коли відбувається обрив зв'язку, то менеджер терміналів, в даному випадку tmux, збереже сесію зі старими значеннями цих змінних. І коли ми знову будемо підключатися до віддаленого сервера, то буде створений новий сокет з новими значеннями. Але вони не потраплять в стару сесію менеджера терміналів. Тому нам потрібно дати зрозуміти shell, що ми хочемо, щоб він зберігав ці значення і використовував їх при повторному підключенні, якщо вони є.

tmux у справі
Прийшов час перевірити tmux в роботі. Ми вже знаємо як його запустити. Досить набрати
tmux
.

tmux first start example

  1. Робоча область. Панель (pane — з документації до tmux).
  2. Рядок стану. На ній розміщуються вкладки і інші елементи.
  3. Вкладка з ім'ям за замовчуванням.
Ми розглянули початкову стан tmux. Якщо ви читали попередню статті, то ви могли помітити, що початковий стан, так і взагалі зовнішній вигляд tmux, не дуже то й відрізняється від screen. За винятком того, що статусна рядок спочатку нам доступна. Давайте тепер розглянемо tmux на прикладі більш складної задачі.



Для цього нам знадобитися репозиторій. Якщо ви його собі не клонували на комп'ютер, виконайте наступну команду:

git clone https://github.com/var-bin/terminalForCoder__WSD.git

Далі запустіть tmux. Для початку, попрацюємо з вкладками. Нам знадобиться 2 — 3 вкладки. Щоб створити нову вкладку потрібно натиснути наступні комбінації клавіш:

Ctrl + b, c - створити нову вкладку

Наступним кроком буде перейменування вкладок. Для цього використовуйте:

Ctrl + b, , - перейменувати вкладку

Для того, щоб перемикатися між вкладками, скористайтеся цими клавішами:

Ctrl + b, int перейти на вкладку (int - номер вкладки 0 - 9)

Або

Ctrl + b, w - інтерактивне перемикання вкладок

З вкладками трохи попрактикуватися. Тепер давайте розіб'ємо нашу поточну панель на дві незалежні панелі. Зверніть увагу на те, що даний layout не буде збережуться для всіх інших вкладок. Для кожної вкладки tmux створює свій незалежний layout. Робиться це за допомогою комбінації клавіш:

Ctrl + b, % - розбити поточну панель на дві нових по вертикалі

Тепер давайте запустимо в тій панелі, що зліва, якусь утиліту. Наприклад, midnight commander (будь-яку іншу утиліту) за допомогою команди:

mc

Для переміщення між панелями, використовуйте ці сполучення клавіш:

Ctrl + b, ← ↑ → ↓ - переміщення між панелями 

А в тій панелі, що праворуч, запустимо наш тестове додаток. Це простий чат, написаний на node.js і socket.io. Цей приклад взятий з офіційного сайту socket.io. Єдине, що я додав — це трохи логування, щоб ми бачили, що воно працює. Для цього потрібно перейти в директорію
%repoName%/tmux/chat-example
. І виконати команди:

npm i
node index.js

%repoName%
— ім'я директорії в яку був склонирован репозитой.

Якщо все добре, то ви повинні побачити на екрані рядок:

listening on localhost:3000

Після цього запустіть браузер і в новій вкладці перейдіть за адресою
localhost:3000
. Наберіть будь-яке повідомлення в рядку введення і натисніть
Enter
. Як бачите, все працює і ви можете прочитати це повідомлення також і в терміналі. В тому регіоні, де виконували команду
node index.js
.

example tmux with node.js, socket.io, mc

А тепер настав час зробити те, що ми робили і в попередній статті. Зімітуємо обрив зв'язку. Потрібно закрити термінал через хрестик. Але при цьому не закривайте браузер. І спробуйте відправити ще кілька повідомлень. Всі продовжує працювати. Це при тому, що ми тільки що закрили термінал.

example tmux. Chat is still working

Сесію і всі процеси, які були запущені tmux зберіг. Як ми знаємо з попередньої статті, screen теж вміє так робити. Давайте підключимося назад до сесії tmux. Запустіть термінал і виконайте команду:

tmux attach

example tmux. tmux attach

Як ви могли помітити, той layout, який ми створювали раніше (розбивку панелей по вертикалі), tmux зберіг. Це величезний плюс в порівнянні з тим же screen'ом.

Корисні посилання
  1. Хороша шпаргалка по tmux
  2. Хороша шпаргалка по tmux (habr версія)
  3. Офіційний сайт tmux
  4. man tmux
    =)
screen vs. tmux
Настав час порівняти screen і tmux. За час роботи зі screen'ом і c tmux'ом (приблизно 2,5 року), я прийшов до висновку, що screen'ом якщо і варто користуватися, то тільки в тому випадку, якщо вам недоступний tmux. Тобто ви не можете встановити собі tmux або зібрати його з вихідного коду. У всіх інших випадках краще відразу починати з tmux'а.



screen tmux Не вміє створювати layout для кожної вкладки
Не вміє зберігати layout, якщо обірвався зв'язок або ще щось там
До версії 4.1 не вмів робити розбивку по вертикалі
Коли ви створюєте новий регіон, то в ньому окремо потрібно створювати нове вікно
(Ctrl+a, c)
, виконати перехід в потрібну директорію і т. д.
Щоб видалити регіон теж потрібно помучатся
Ctrl+a :remove

+
«з коробки» налаштований досить якісно
+
Не потрібно налаштовувати положення панелі з вкладками, як їх підсвічувати
+
Уміє ділити екран на панелі, як по вертикалі, так і по горизонталі
+
Щоб закрити панель, достатньо набрати
exit

+
Вміє тримати віддалене з'єднання
*


* потрібна додаткова магія
Давайте підсумуємо. Ми розглянули ще один з менеджерів терміналів, а саме tmux. Попрактикувалися в установці, налаштуванні. Використовували деякі гарячі клавіші. Спробували tmux на прикладі. Побачили його переваги у порівнянні з тим же screen'ом.

Крім screen і tmux є досить широкий вибір менеджерів терміналів для різних ОС, ваші особисті уподобання і побажання.

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

0 коментарів

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