103.5 Урок 2
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
103 GNU та команди Unix |
Тема: |
103.5 Створення, моніторинг та зупинка процесів |
Урок: |
2 з 2 |
Вступ
Інструменти та утиліти, які ми бачили в попередньому уроці, дуже корисні для моніторингу процесів у цілому. Однак системному адміністратору може знадобитися зробити ще один крок. У цьому уроці ми обговоримо концепцію термінальних мультиплексорів і дізнаємося про GNU Screen і tmux, оскільки, незважаючи на сучасні та чудові емулятори терміналів, мультиплексори все ще зберігають деякі класні, потужні функції для продуктивності системного адміністратора.
Особливості термінальних мультиплексорів
В електроніці мультиплексор (або mux) — це пристрій, який дозволяє підключати кілька входів до одного виходу. Таким чином, термінальний мультиплексор дає нам можливість перемикатися між різними входами за потреби. screen
і tmux
хоча не одне й те саме, але мають ряд спільних функцій:
-
Будь-який успішний виклик призведе щонайменше до сеансу, який, у свою чергу, буде містити принаймні вікно. Вікна містять програми.
-
Вікна можна розділити на області або панелі, що може допомогти підвищити продуктивність під час роботи з різними програмами одночасно.
-
Простота керування: для виконання більшості команд вони використовують комбінацію клавіш – так званий префікс команди або командний ключ, за яким слідує інший символ.
-
Сеанси можна від’єднати від поточного терміналу (тобто програми відправляються у фоновий режим і продовжують працювати). Це гарантує повне виконання програм незалежно від того, чи ми випадково закриємо термінал, чи час від часу система зависає або навіть ми втрачаємо віддалене з’єднання.
-
Підключення сокету.
-
Режим копіювання.
-
Їх можна гнучко настроювати.
Екран GNU
У ранні часи Unix (1970-80-ті роки) комп’ютери в основному складалися з терміналів, підключених до центрального комп’ютера. Ось і все, жодних вікон чи вкладок. І це стало причиною створення Екрану GNU у 1987 році: емуляція кількох незалежних екранів VT100 на одному фізичному терміналі.
Вікна
Екран GNU викликається просто введенням screen
у терміналі. Спочатку ви побачите вітальне повідомлення:
GNU Screen version 4.05.00 (GNU) 10-Dec-16 Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 Juergen Weigert, Michael Schroeder Copyright (c) 1987 Oliver Laumann (...)
Натисніть пробіл або Enter, щоб закрити повідомлення, і вам буде показано командний рядок:
$
Може здатися, що нічого не сталося, але факт полягає в тому, що screen
вже створив і керує своїм першим сеансом і вікном. Префікс команди екрана – Ctrl+a. Щоб побачити всі вікна внизу дисплея терміналу, введіть Ctrl+a-w:
0*$ bash
Ось воно, наше єдине поки що вікно! Зауважте, що підрахунок починається з 0. Щоб створити інше вікно, введіть Ctrl+a-c. Ви побачите нову підказку. Давайте запустимо ps
у цьому новому вікні:
$ ps PID TTY TIME CMD 974 pts/2 00:00:00 bash 981 pts/2 00:00:00 ps
і знову введемо Ctrl+a-w:
0-$ bash 1*$ bash
У нас є два наші вікна (зверніть увагу на зірочку, яка вказує на те, яке показано в даний момент). Однак, оскільки вони були запущені з Bash, вони обидва отримали однакові імена. Оскільки ми викликали ps
у нашому поточному вікні, давайте перейменуємо його на таку саму назву. Для цього вам потрібно ввести Ctrl+a-A і написати нове ім’я вікна (ps
), коли з’явиться запит:
Set window's title to: ps
Тепер давайте створимо інше вікно, але з самого початку дамо йому назву: yetanotherwindow
. Це робиться шляхом виклику screen
за допомогою перемикача -t
:
$ screen -t yetanotherwindow
Переміщатися між вікнами можна в різний спосіб:
-
За допомогою Ctrl+a-n (перейти до наступного вікна) і Ctrl+a-p (перейти до попереднього вікна).
-
За допомогою Ctrl+a-number (перейти до вікна номер number).
-
Використовуйте Ctrl+a-", щоб побачити список усіх вікон. Ви можете рухатися вгору та вниз за допомогою клавіш зі стрілками та вибрати потрібне за допомогою Enter:
Num Name Flags 0 bash $ 1 ps $ 2 yetanotherwindow
Під час роботи з вікнами важливо пам’ятати про наступне:
-
Вікна запускають свої програми повністю незалежно одне від одного.
-
Програми продовжуватимуть працювати, навіть якщо їх вікно не видно (також коли екранний сеанс від’єднано, як ми побачимо незабаром).
Щоб видалити вікно, просто завершіть роботу програми (щойно буде видалено останнє вікно, screen
сам завершиться). Крім того, використовуйте Ctrl+a-k у вікні, яке потрібно видалити; у вас попросять підтвердження:
Really kill this window [y/n] Window 0 (bash) killed.
Області
screen
може розділити екран терміналу на кілька областей, у яких можна розмістити вікна. Цей розподіл може бути горизонтальним (Ctrl a-S) або вертикальним (Ctrl a-|).
Єдине, що буде показувати нова область, це просто знак --
внизу, який означає, що вона порожня:
1 ps --
Щоб перейти до нової області, введіть Ctrl+a-Tab. Тепер ви можете додати вікно будь-яким із методів, які ми вже бачили, наприклад: Ctrl+a-2. Тепер --
мав перетворитися на 2 yetanotherwindow
:
$ ps $ PID TTY TIME CMD 1020 pts/2 00:00:00 bash 1033 pts/2 00:00:00 ps $ screen -t yetanotherwindow 1 ps 2 yetanotherwindow
Важливими аспектами, які слід пам’ятати під час роботи з областями, є:
-
Ви можете переміщатися між областями, вводячи Ctrl+a-Tab.
-
Ви можете завершити роботу всіх областей, крім поточної, за допомогою Ctrl+a-Q.
-
Ви можете завершити поточну область за допомогою Ctrl+a-X.
-
Завершення області не завершує пов’язане з нею вікно.
Сесії
Поки що ми експериментували з кількома вікнами та областями, але всі вони належать до однієї та єдиної сесії. Настав час погратися із сесіями. Щоб переглянути список усіх сеансів, введіть screen -list
або screen -ls
:
$ screen -list There is a screen on: 1037.pts-0.debian (08/24/19 13:53:35) (Attached) 1 Socket in /run/screen/S-carol.
Поки що це наша єдина сесія:
- PID
-
1037
- Ім’я
-
pts-0.debian
(вказує термінал, у нашому випадку псевдотермінал slave, та ім’я хоста). - Статус
-
Attached
Давайте створимо новий сеанс, додавши йому більш описову назву:
$ screen -S "second session"
Дисплей терміналу буде очищено, і вам буде надано новий запит. Ви можете перевірити сеанси ще раз:
$ screen -ls There are screens on: 1090.second session (08/24/19 14:38:35) (Attached) 1037.pts-0.debian (08/24/19 13:53:36) (Attached) 2 Sockets in /run/screen/S-carol.
Щоб припинити сеанс, вийдіть з усіх його вікон або просто введіть команду screen -S SESSION-PID -X quit
(замість цього ви також можете вказати назву сеансу). Давайте позбудемося нашого першого сеансу:
$ screen -S 1037 -X quit
Ви повернетеся до терміналу за межами screen
. Але пам’ятайте, наша друга сесія все ще жива:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Detached) 1 Socket in /run/screen/S-carol.
Однак, оскільки ми припинили її батьківський сеанс, вона отримала нову мітку: Detached
.
Від’єднання сесії
З кількох причин ви можете відключити сеанс екрану від терміналу:
-
Щоб дозволити вашому комп’ютеру на роботі виконувати свої обов’язки, а потім віддалено підключатися з дому.
-
Щоб поділитися сеансом з іншими користувачами.
Від’єднайте сеанс за допомогою комбінації клавіш Ctrl+a-d. Ви повернетесь до свого терміналу:
[detached from 1090.second session] $
Щоб знову приєднатися до сеансу, використайте команду screen -r SESSION-PID
. Крім того, ви можете використати SESSION-NAME
, як ми бачили вище. Якщо є лише одна відокремлена сесія, жоден з них не є обов’язковим:
$ screen -r
Цієї команди достатньо, щоб повторно підключитися до нашого другого сеансу:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Attached) 1 Socket in /run/screen/S-carol.
Важливі параметри для повторного приєднання сеансу:
-d -r
-
повторно підключіть сеанс і, якщо необхідно, спочатку від’єднайте його.
-d -R
-
Те саме, що
-d -r
, алеscreen
також спочатку створить сеанс, якщо він не існує. -d -RR
-
Те саме, що
-d -R
. Однак використовуйте перший сеанс, якщо доступно більше одного. -D -r
-
Повторне приєднання сеансу. Якщо необхідно, спочатку від’єднайтеся та вийдіть із системи віддалено.
-D -R
-
Якщо сеанс запущено, підключіть його повторно (за потреби спочатку від’єднайте та вийдіть із системи віддалено). Якщо він не працював, створіть його та повідомте користувача.
-D -RR
-
Те саме, що
-D -R
— тільки сильніше. -d -m
-
Запустити
екран
у відокремленому режимі. Це створює новий сеанс, але не приєднується до нього. Це корисно для сценаріїв запуску системи. -D -m
-
Те саме, що й
-d -m
, але не розгалужує новий процес. Команда завершується, якщо сеанс завершується.
Прочитайте man-сторінки для screen
, щоб дізнатися про інші параметри.
Копіювати та вставити: режим прокрутки
Екран GNU містить копіювання або режим прокрутки. Після введення ви можете переміщати курсор у поточному вікні та переміщати вміст його історії за допомогою клавіш зі стрілками. Ви можете позначити текст і копіювати його між вікнами. Необхідно виконати наступні кроки:
-
Введіть режим копіювання/прокрутки: Ctrl+a-[.
-
Перейдіть до початку фрагмента тексту, який потрібно скопіювати, за допомогою клавіш зі стрілками.
-
Позначте початок фрагмента тексту, який потрібно скопіювати: Пробіл.
-
Перейдіть до кінця фрагмента тексту, який потрібно скопіювати, за допомогою клавіш зі стрілками.
-
Позначте кінець фрагмента тексту, який потрібно скопіювати: Пробіл.
-
Перейдіть до вибраного вікна та вставте фрагмент тексту: Ctrl+a-].
Налаштування екрану
Загальносистемним конфігураційним файлом для екрану є /etc/screenrc
. В якості альтернативи можна використовувати ~/.screenrc
рівня користувача. Файл містить чотири основні розділи конфігурації:
SCREEN SETTINGS
-
Ви можете визначити загальні налаштування, вказавши директиву і значення, розділивши їх пробілом, наприклад:
defscrollback 1024
. SCREEN KEYBINDINGS
-
Цей розділ досить цікавий, оскільки він дозволяє вам перевизначати прив’язки клавіш, які можуть заважати повсякденному використанню терміналу. Використовуйте ключове слово
bind
, за яким слідує пробіл, символ, який слід використовувати після префікса команди, інший пробіл і команду, наприклад:bind l kill
(це налаштування змінить стандартний спосіб знищення вікна на Ctrl+a-l).Щоб відобразити всі прив’язки екрану, введіть Ctrl+a-? або перегляньте man-сторінку.
TipЗвичайно, ви також можете змінити сам префікс команди. Наприклад, щоб перейти від Ctrl+a до Ctrl+b, просто додайте цей рядок:
escape ^Bb
. TERMINAL SETTINGS
-
Цей розділ, серед іншого, містить налаштування, пов’язані з розмірами вікон терміналу та буферами. Наприклад, щоб увімкнути неблокуючий режим для кращого вирішення проблем з нестабільними з’єднаннями ssh, використовується така конфігурація:
defnonblock 5
. STARTUP SCREENS
-
Ви можете включити команди, щоб різні програми запускалися під час запуску
screen
; наприклад:screen -t top top
(на екрані відкриється вікно з назвоюtop
зtop
всередині).
tmux
tmux
був випущений у 2007 році. Хоча він дуже схожий на screen
, він має кілька помітних відмінностей:
-
Модель клієнт-сервер: сервер забезпечує ряд сеансів, кожен з яких може мати певну кількість вікон, пов’язаних з ним, які, у свою чергу, можуть використовуватися різними клієнтами.
-
Інтерактивний вибір сеансів, вікон і клієнтів за допомогою меню.
-
Одне і те саме вікно можна зв’язати з кількома сесіями.
-
Наявність розкладки клавіш для vim і Emacs.
-
Підтримка UTF-8 і 256 кольорів у терміналі .
Вікна
tmux
можна викликати, просто ввівши tmux
у командному рядку. Вам буде показано підказку оболонки та рядок стану внизу вікна:
[0] 0:bash* "debian" 18:53 27-Aug-19
Окрім імені хосту, часу та дати, рядок стану містить таку інформацію:
- Назва сеансу
-
[0]
- Номер вікна
-
0:
- Ім’я вікна
-
bash*
. За замовчуванням це назва програми, що виконується у вікні, і, на відміну відscreen
,tmux
автоматично оновить її, щоб відображати поточну запущену програму. Зверніть увагу на зірочку, яка вказує, що це поточне видиме вікно.
Ви можете призначити імена сеансу та вікна під час виклику tmux
:
$ tmux new -s "LPI" -n "Window zero"
Рядок стану відповідно зміниться:
[LPI] 0:Window zero* "debian" 19:01 27-Aug-19
Префікс команди tmux – Ctrl+b. Щоб створити нове вікно, просто введіть Ctrl+b-c; ви перейдете до нової підказки, а в рядку стану відобразиться нове вікно:
[LPI] 0:Window zero- 1:bash* "debian" 19:02 27-Aug-19
Оскільки Bash є базовою оболонкою, новому вікну за замовчуванням присвоюється ця назва. Запустіть top
і подивіться, як назва змінюється на top
:
[LPI] 0:Window zero- 1:top* "debian" 19:03 27-Aug-19
У будь-якому випадку ви можете перейменувати вікно за допомогою Ctrl+b-,. Коли з’явиться запит, введіть нове ім’я та натисніть Enter:
(rename-window) Window one
Ви можете відображати всі вікна для вибору за допомогою Ctrl+b-w (використовуйте клавіші зі стрілками для переміщення вгору та вниз та enter для вибору):
(0) 0: Window zero- "debian" (1) 1: Window one* "debian"
Подібно до screen
, ми можемо перейти з одного вікна до іншого за допомогою:
- Ctrl+b-n
-
перехід до наступного вікна.
- Ctrl+b-p
-
перехід до попереднього вікна.
- Ctrl+b-number
-
перехід до вікна за номером.
Щоб позбутися вікна, використовуйте Ctrl+b-&. У вас попросять підтвердження:
kill-window Window one? (y/n)
Інші цікаві команди для вікна:
- Ctrl+b-f
-
знайти вікно за назвою.
- Ctrl+b-.
-
змінити номер індексу вікна.
Щоб прочитати весь список команд, перегляньте man-сторінку.
Панелі
Функція розділення вікон screen
також присутня в tmux
. Однак отримані поділи називаються не області, а панелі. Найважливіша відмінність між областями та панелями полягає в тому, що останні є повноцінними псевдотерміналами, пов’язаними з вікном. Це означає, що видалення панелі також знищить її псевдотермінал та будь-які пов’язані з ним програми.
Щоб розділити вікно по горизонталі, ми використовуємо Ctrl+b-":
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 4050960 total, 3730920 free, 114880 used, 205160 buff/cache KiB Swap: 4192252 total, 4192252 free, 0 used. 3716004 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1340 carol 20 0 44876 3400 2800 R 0.3 0.1 0:00.24 top 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 $ ─────────────────────────────────────────────────────────────────────────────────────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Щоб розділити його вертикально, використовуйте Ctrl+b-%:
│$ 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd │ │ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd │ │ 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 │ 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 │ 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H│ 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched │ 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh │ 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 │ │ 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drai│ n │ 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 │ │ 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 │ │ $ │ ───────────────────────────────────────────────────────────────────────────────┴─────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Щоб знищити поточну панель (разом із запущеним у ній псевдотерміналом разом із будь-якими пов’язаними програмами), використовуйте Ctrl+b-x. У рядку стану буде запропоновано підтвердження:
kill-pane 1? (y/n)
Важливі команди панелі:
- Ctrl+b-↑,↓,←,→
-
переміщення між панелями.
- Ctrl+b-;
-
перейти до останньої активної панелі.
- Ctrl+b-Ctrl+arrow key
-
змінити розмір панелі на один рядок.
- Ctrl+b-Alt+arrow key
-
змінити розмір панелі на п’ять рядків.
- Ctrl+b-{
-
поміняти місцями панелі (поточну на попередню).
- Ctrl+b-}
-
поміняти місцями панелі (з поточної на наступну).
- Ctrl+b-z
-
збільшити/зменшити масштаб панелі.
- Ctrl+b-t
-
tmux
відображає фантастичний годинник всередині панелі (знищити його, натиснувшиq
). - Ctrl+b-!
-
перетворити панель на вікно.
Щоб прочитати весь список команд, перегляньте man-сторінку.
Сесії
Щоб переглянути сеанси в tmux
, ви можете використовувати Ctrl+b-s:
(0) + LPI: 2 windows (attached)
Крім того, ви можете використовувати команду tmux ls
:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39] (attached)
Існує лише один сеанс (LPI
), який містить два вікна. Давайте створимо новий сеанс із нашого поточного сеансу. Цього можна досягти, використовуючи Ctrl+b, введіть :new
у підказці, а потім натисніть Enter. Ви перейдете до нового сеансу, як це видно в рядку стану:
[2] 0:bash* "debian" 19:15 27-Aug-19
За замовчуванням tmux
назвав сеанс 2
. Щоб перейменувати його, використовуйте Ctrl+b-$. Коли з’явиться запит, введіть нове ім’я та натисніть Enter:
(rename-session) Second Session
Ви можете перемикати сеанси за допомогою Ctrl+b-s (використовуйте клавіші зі стрілками та enter):
(0) + LPI: 2 windows (1) + Second Session: 1 windows (attached)
Щоб припинити сеанс, ви можете використовувати команду tmux kill-session -t SESSION-NAME
. Якщо ви введете команду з поточного, приєднаного сеансу, ви будете вилучені з tmux
і повернетеся до початкового термінального сеансу:
$ tmux kill-session -t "Second Session" [exited] $
Від’єднання сесій
Знищивши Second Session
, ми були викинуті за межі tmux
. Проте у нас ще активна сесія. Запитайте tmux
про перелік сеансів, і ви напевно знайдете її там:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39]
Однак цей сеанс відокремлений від терміналу. Ми можемо приєднати його за допомогою tmux attach -t SESSION-NAME
(attach
можна замінити на at
або просто a
). Якщо є лише один сеанс, специфікація імені необов’язкова:
$ tmux a
Тепер ви повернулися до свого сеансу; щоб від’єднатися від нього, натисніть Ctrl+b-d:
[detached (from session LPI)] $
Tip
|
Один і той самий сеанс може бути приєднаний до кількох терміналів. Якщо ви хочете приєднати сеанс, переконавшись, що він спочатку від’єднаний від будь-яких інших терміналів, використовуйте |
Важливі команди для приєднання/від’єднання сеансу:
- Ctrl+b-D
-
обрати, який клієнт від’єднати.
- Ctrl+b-r
-
оновити термінал клієнта.
Щоб прочитати весь список команд, перегляньте man-сторінку.
Копіювання та вставка: режим прокрутки
tmux
також має режим копіювання в основному так само, як і screen
(не забувайте використовувати префікс команди tmux, а не screen!). Єдина відмінність команди полягає в тому, що ви використовуєте Ctrl + пробіл, щоб позначити початок виділення, і Alt+w, щоб скопіювати виділений текст.
Налаштування tmux
Файли конфігурації для tmux
зазвичай знаходяться в /etc/tmux.conf
і ~/.tmux.conf
. Після запуску tmux
отримує ці файли, якщо вони існують. Також є можливість запустити tmux
за допомогою перемикача -f
для надання альтернативного файлу конфігурації. Ви можете знайти приклад файлу конфігурації tmux
за адресою /usr/share/doc/tmux/example_tmux.conf
. Рівень налаштування, якого ви можете досягти, дійсно високий. Деякі з речей, які ви можете зробити, включають:
-
Зміна ключа префіксу
# Change the prefix key to C-a set -g prefix C-a unbind C-b bind C-a send-prefix
-
Встановлення додаткових прив’язок клавіш для вікон вище 9
# Some extra key bindings to select higher numbered windows bind F1 selectw -t:10 bind F2 selectw -t:11 bind F3 selectw -t:12
Щоб отримати повний список усіх прив’язок, введіть Ctrl+b-? (натисніть q
, щоб вийти) або перегляньте man-сторінку.
Вправи до посібника
-
Вкажіть, чи відповідають наступні оператори/функції GNU Screen, tmux або обом:
Характеристика/Твердження GNU Screen tmux Префікс команди за замовчуванням – Ctrl+a
Модель клієнт-сервер
Панелі є псевдотерміналами
Знищення області не знищує пов’язані з ним вікна
Сеанси містять вікна
Сеанси можуть бути відокремлені
-
Встановіть екран GNU на свій комп’ютер (назва пакета:
screen
) і виконайте такі завдання:-
Запустіть програму. Яку команду ви використовуєте?
-
Запустіть
top
: -
Використовуючи префікс клавіші екрана, відкрийте нове вікно; потім відкрийте
/etc/screenrc
за допомогоюvi
: -
Перелік вікон у нижній частині екрану:
-
Змініть назву поточного вікна на
vi
: -
Змініть назву вікна, що залишився, на
top
. Для цього спочатку відобразіть список усіх вікон, щоб ви могли рухатися вгору і вниз і вибрати потрібне: -
Перевірте, чи змінилися назви, знову відобразивши назви вікон у нижній частині екрану:
-
Тепер від’єднайте сеанс і вкажіть
screen
створити новий із назвоюssh
: -
Від’єднайтеся також від
ssh
іscreen
відображатиме список сеансів: -
Тепер підключіться до першого сеансу, використовуючи його PID:
-
Ви повинні повернутися до вікна, що відображає
top
. Розділіть вікно по горизонталі та перейдіть до нової порожньої області: -
Вкажіть
screen
вивести перелік всіх вікон та виберітьvi
для відображення в новій порожній області: -
Тепер розділіть поточну область по вертикалі, перейдіть до щойно створеної порожньої області та зв’яжіть її з абсолютно новим вікном:
-
Завершіть усі області, крім поточної (запам’ятайте, хоча ви знищуєте область, вікна все ще існують). Потім вийдіть з усіх вікон поточного сеансу, доки сам сеанс не завершиться:
-
Нарешті, вкажіть
screen
перерахувати його сеанси ще раз, припиніть сеансssh
, що залишився за PID і перевірте, чи насправді не залишилося сеансів:
-
-
Встановіть
tmux
на свій комп’ютер (ім’я пакета:tmux
) і виконайте такі завдання:-
Запустіть програму. Яку команду ви використовуєте?
-
Почніть з
top
(зверніть увагу, як, за пару секунд, назва вікна змінюється наtop
у рядку стану): -
Використовуючи префікс ключа tmux, відкрийте нове вікно; потім створіть
~/.tmux.conf
за допомогоюnano
: -
Розділіть вікно по вертикалі та зменшіть розмір щойно створеної панелі кілька разів:
-
Тепер змініть назву поточного вікна на
text editing
; потім вкажітьtmux
відобразити список з усіма його сесіями: -
Перейдіть до вікна, що запускається вгорі, і поверніться до поточного, використовуючи ту саму комбінацію клавіш:
-
Від’єднайтеся від поточного сеансу та створіть новий з ім’ям
ssh
і ім’ям вікнаssh window
: -
Також від’єднайтеся від сеансу
ssh
і вкажітьtmux
знову відобразити список сеансів:NoteЗ цього моменту вправа вимагає, щоб ви використовували віддалену машину для з’єднань
ssh
з вашим локальним хостом (віртуальна машина цілком дійсна і може виявитися дійсно зручною). Переконайтеся, що на вашій локальній машині встановлено та запущеноopenssh-server
і що на віддаленій машині встановлено принаймніopenssh-client
. -
Тепер запустіть віддалену машину та підключіться через
ssh
з локальним хостом. Після встановлення з’єднання перевірте наявність сеансівtmux
: -
На віддаленому хості підключіться до сеансу
ssh
за назвою: -
Повернувшись на локальну машину, підключіться до сеансу
ssh
за ім’ям, переконавшись, що з’єднання з віддаленим хостом спочатку розірвано: -
Відобразіть усі сеанси для вибору та перейдіть до свого першого сеансу (
[0]
). Опинившись там, знищіть сесіюssh
за назвою: -
Нарешті, від’єднайтеся від поточного сеансу та знищіть його за ім’ям:
-
Дослідницькі вправи
-
І
screen
, іtmux
можуть увійти в режим командного рядка через префікс команди + : (ми вже бачили короткий приклад зtmux
). Виконайте деякі дослідження та виконайте такі завдання в режимі командного рядка:-
Вкажіть
screen
увійти до режиму копіювання: -
Вкажіть
tmux
перейменувати поточне вікно: -
Вкажіть
screen
закрити всі вікна та завершити сеанс: -
Вкажіть
tmux
розділити панелі на дві частини: -
Вкажіть
tmux
знищити поточне вікно:
-
-
Коли ви входите до режиму копіювання через
screen
, ви можете використовувати не лише клавіші зі стрілками та PgUP або PgDown для навігації поточним вікном і буфером прокрутки. Також є можливість використання повноекранного редактора, схожого на vi. За допомогою цього редактора виконайте такі завдання:-
Виведіть
supercalifragilisticexpialidocious
у вашому терміналіscreen
: -
Тепер скопіюйте п’ять послідовних символів (зліва направо) у рядку прямо над курсором:
-
Нарешті, вставте виділення (
stice
) назад у командний рядок:
-
-
Припустимо, ви хочете поділитися сеансом
tmux
(our_session
) з іншим користувачем. Ви створили сокет (/tmp/our_socket
) з потрібними дозволами, щоб і ви, і інший користувач могли читати та писати. Які ще дві умови мають бути виконані, щоб інший користувач міг успішно підключити сеанс черезtmux -S /tmp/our_socket a -t our_session
?
Підсумки
У цьому уроці ви дізналися про термінальні мультиплексори загалом та GNU Screen і tmux зокрема. Важливі поняття, які слід запам’ятати:
-
Префікс команди:
screen
використовує Ctrl+a + символ;tmux
, Ctrl+b + символ. -
Структура сеансів, вікон і розділів вікон (області або панелі).
-
Режим копіювання.
-
Від’єднання сесій: одна з найпотужніших функцій мультиплексорів.
Команди, задіяні на цьому уроці:
screen
-
Запускає screen сеанс.
tmux
-
Запускає сеанс
tmux
.
Відповіді на вправи до посібника
-
Вкажіть, чи відповідають наступні оператори/функції GNU Screen, tmux або обом:
Характеристика/Твердження GNU Screen tmux Префікс команди за замовчуванням – Ctrl+a
х
Модель клієнт-сервер
x
Панелі є псевдотерміналами
x
Знищення області не знищує пов’язані з нею вікна
х
Сеанси містять вікна
х
x
Сеанси можуть бути відокремлені
х
x
-
Встановіть екран GNU на свій комп’ютер (назва пакета:
screen
) і виконайте такі завдання:-
Запустіть програму. Яку команду ви використовуєте?
screen
-
Запустіть
top
:top
-
Використовуючи префікс клавіші екрана, відкрийте нове вікно; потім відкрийте
/etc/screenrc
за допомогоюvi
:Ctrl+a-c
sudo vi /etc/screenrc
-
Перелік вікон у нижній частині екрану:
Ctrl+a-w
-
Змініть назву поточного вікна на
vi
:Ctrl+a-A. Потім нам потрібно ввести
vi
і натиснути enter. -
Змініть назву вікна, що залишився, на
top
. Для цього спочатку відобразіть список усіх вікон, щоб ви могли рухатися вгору і вниз і вибрати потрібне:Спочатку ми вводимо Ctrl+a-". Потім ми використовуємо клавіші зі стрілками, щоб позначити те, на якому написано
0 bash
, і натискаємо enter. Нарешті, ми вводимо Ctrl+a-A, потімtop
і натискаємо enter. -
Перевірте, чи змінилися назви, знову відобразивши назви вікон у нижній частині екрану:
Ctrl+a-w
-
Тепер від’єднайте сеанс і вкажіть
screen
створити новий із назвоюssh
:Ctrl+a-d
screen -S "ssh"
і натисніть enter. -
Від’єднайтеся також від
ssh
іscreen
відображатиме список сеансів:Ctrl+a-d
screen -list
абоscreen -ls
. -
Тепер підключіться до першого сеансу, використовуючи його PID:
screen -r PID-OF-SESSION
-
Ви повинні повернутися до вікна, що відображає
top
. Розділіть вікно по горизонталі та перейдіть до нової порожньої області:Ctrl+a-S
Ctrl+a-Tab
-
Вкажіть
screen
вивести перелік всіх вікон та виберітьvi
для відображення в новій порожній області:Ми використовуємо Ctrl+a-", щоб усі вікна відображалися для виділення, позначте
vi
і натисніть enter. -
Тепер розділіть поточну область по вертикалі, перейдіть до щойно створеної порожньої області та зв’яжіть її з абсолютно новим вікном:
Ctrl+a-|
Ctrl+a-Tab
Ctrl+a-c
-
Завершіть усі області, крім поточної (запам’ятайте, хоча ви знищуєте область, вікна все ще існують). Потім вийдіть з усіх вікон поточного сеансу, доки сам сеанс не завершиться:
Ctrl+a-Q.
exit
(щоб вийти з Bash). Shift+:, потім ми вводимоquit
і натискаємо enter (щоб вийти зvi
). Після цього ми вводимоexit
(щоб вийти з базової оболонки Bash)q
(для завершенняtop
); потім ми вводимоexit
(щоб вийти з базової оболонки Bash). -
Нарешті, вкажіть
screen
перерахувати його сеанси ще раз, припиніть сеансssh
, що залишився за PID і перевірте, чи насправді не залишилося сеансів:screen -list
абоscreen -ls
screen -S PID-OF-SESSION -X quit
screen -list
абоscreen -ls
-
-
Встановіть
tmux
на свій комп’ютер (ім’я пакета:tmux
) і виконайте такі завдання:-
Запустіть програму. Яку команду ви використовуєте?
tmux
-
Почніть з
top
(зверніть увагу, як, за пару секунд, назва вікна змінюється наtop
у рядку стану):top
-
Використовуючи префікс ключа tmux, відкрийте нове вікно; потім створіть
~/.tmux.conf
за допомогоюnano
:Ctrl+b-c
nano ~/.tmux.conf
-
Розділіть вікно по вертикалі та зменшіть розмір щойно створеної панелі кілька разів:
Ctrl+b-"
Ctrl+b-Ctrl+↓
-
Тепер змініть назву поточного вікна на
text editing
; потім вкажітьtmux
відобразити список з усіма його сесіями:Ctrl+b-,. Потім ми вводимо нове ім’я та натискаємо enter. Ctrl+b-s або
tmux ls
. -
Перейдіть до вікна, що запускається вгорі, і поверніться до поточного, використовуючи ту саму комбінацію клавіш:
Ctrl+b-n або Ctrl+b-p
-
Від’єднайтеся від поточного сеансу та створіть новий з ім’ям
ssh
і ім’ям вікнаssh window
:Ctrl+b-d
tmux new -s "ssh" -n "ssh window"
-
Також від’єднайтеся від сеансу
ssh
і вкажітьtmux
знову відобразити список сеансів:Ctrl+b-d
tmux ls
NoteЗ цього моменту вправа вимагає, щоб ви використовували віддалену машину для з’єднань
ssh
з вашим локальним хостом (віртуальна машина цілком дійсна і може виявитися дійсно зручною). Переконайтеся, що на вашій локальній машині встановлено та запущеноopenssh-server
і що на віддаленій машині встановлено принаймніopenssh-client
. -
Тепер запустіть віддалену машину та підключіться через
ssh
з локальним хостом. Після встановлення з’єднання перевірте наявність сеансівtmux
:На віддаленому хості:
ssh local-username@local-ipaddress
. Після підключення до локальної машини:tmux ls
. -
На віддаленому хості підключіться до сеансу
ssh
за назвою:tmux a -t ssh
(a
можна замінити наat
абоattach
). -
Повернувшись на локальну машину, підключіться до сеансу
ssh
за ім’ям, переконавшись, що з’єднання з віддаленим хостом спочатку розірвано:tmux a -d -t ssh
(a
можна замінити наat
абоattach
). -
Відобразіть усі сеанси для вибору та перейдіть до свого першого сеансу (
[0]
). Опинившись там, знищіть сесіюssh
за назвою:Ми вводимо Ctrl+b-s, використовуємо клавіші зі стрілками, щоб позначити сеанс
0
і натискаємо entertmux kill-session -t ssh
. -
Нарешті, від’єднайтеся від поточного сеансу та знищіть його за ім’ям:
Ctrl+b-d
tmux kill-session -t 0
.
-
Відповіді до дослідницьких вправ
-
І
screen
, іtmux
можуть увійти в режим командного рядка через префікс команди + : (ми вже бачили короткий приклад зtmux
). Виконайте деякі дослідження та виконайте такі завдання в режимі командного рядка:-
Вкажіть
screen
увійти до режиму копіювання:Ctrl+a-: — потім ми набираємо
copy
. -
Вкажіть
tmux
перейменувати поточне вікно:Ctrl+b-: — потім ми набираємо
rename-window
. -
Вкажіть
screen
закрити всі вікна та завершити сеанс:Ctrl+a-: — потім ми набираємо
quit
. -
Вкажіть
tmux
розділити панелі на дві частини:Ctrl+b-: — потім ми набираємо
split-window
. -
Вкажіть
tmux
знищити поточне вікно:Ctrl+b-: — потім ми набираємо
kill-window
.
-
-
Коли ви входите до режиму копіювання через
screen
, ви можете використовувати не лише клавіші зі стрілками та PgUP або PgDown для навігації поточним вікном і буфером прокрутки. Також є можливість використання повноекранного редактора, схожого на vi. За допомогою цього редактора виконайте такі завдання:-
Виведіть
supercalifragilisticexpialidocious
у вашому терміналіscreen
:echo supercalifragilisticexpialidocious
-
Тепер скопіюйте п’ять послідовних символів (зліва направо) у рядку прямо над курсором:
Переходимо в режим копіювання: Ctrl+a-[ або Ctrl+a-:, а потім вводимо
copy
. Потім ми переходимо до рядка вище за допомогоюk
і натискаємо пробіл, щоб позначити початок виділення. Нарешті, ми рухаємося вперед на чотири символи за допомогоюl
і знову натискаємо пробіл, щоб позначити кінець виділення. -
Нарешті, вставте виділення (
stice
) назад у командний рядок:Ctrl+a-]
-
-
Припустимо, ви хочете поділитися сеансом
tmux
(our_session
) з іншим користувачем. Ви створили сокет (/tmp/our_socket
) з потрібними дозволами, щоб і ви, і інший користувач могли читати та писати. Які ще дві умови мають бути виконані, щоб інший користувач міг успішно підключити сеанс черезtmux -S /tmp/our_socket a -t our_session
?Обидва користувачі повинні мати спільну групу, наприклад,
multiplexer
. Потім ми також повинні змінити сокет на цю групу:chgrp multiplexer /tmp/our_socket
.