Команда Linux tmux виступає в ролі мультиплексора терміналу, аналогічного за функціоналом до screen. Серед користувачів Linux існують численні прихильники tmux, тому виникає питання, чи дійсно він перевершує screen, або це просто питання звички?
tmux проти screen: Основні відмінності
І tmux, і GNU screen є термінальними мультиплексорами, що дозволяють користувачам працювати з кількома вікнами в межах одного термінального сеансу. Вони надають можливість перемикатися між цими вікнами, а також поділяти їх на панелі, створюючи незалежні командні рядки в межах одного термінального вікна.
Обидва інструменти дозволяють від’єднати сеанс, перетворюючи його на фоновий процес, який продовжує виконуватись навіть після закриття терміналу. Коли виникає потреба, можна відкрити новий термінал і відновити роботу з від’єднаним сеансом. Це можливо навіть при підключенні через SSH.
Завдяки цій функціональності, ви можете розпочати сеанс на одному комп’ютері, від’єднати його, а потім повернутися додому і продовжити роботу, підключившись до віддаленого сервера та відновивши від’єднаний сеанс.
Що таке команда screen?
Команда screen також є мультиплексором терміналу з широким спектром можливостей. Для глибшого розуміння її функціоналу, радимо ознайомитися з відповідною статтею. В даному огляді ми зосередимося на tmux, але згадуватимемо аналогічні можливості screen.
В процесі тестування screen виявився один недолік. Про нього ми згадаємо згодом, і розглянемо, чи є tmux більш зручним.
Встановлення tmux
На відміну від screen, який часто встановлюється за замовчуванням в багатьох дистрибутивах Linux, tmux потребує окремої інсталяції. Для встановлення tmux на Ubuntu скористайтесь командою:
sudo apt-get install tmux
Для Manjaro використовуйте pacman:
sudo pacman -Sy tmux
У Fedora 31 tmux вже встановлений.
Початок роботи з tmux
Для запуску tmux введіть команду в терміналі:
tmux
Після цього у вікні терміналу з’явиться рядок стану, який вказує на те, що ви перебуваєте в сеансі tmux.
У правій частині рядка стану ви побачите ім’я хоста, а також час і дату. Ліворуч відображається інформація, пов’язана з сеансом:
[0]: Назва сеансу. За замовчуванням сесії нумеруються, починаючи з нуля. Пізніше ми розглянемо, як можна давати сесіям більш змістовні імена.
0:bash*: 0 вказує на те, що це перше вікно в даному сеансі. Єдиний процес, що виконується в даний момент, – це bash. Якщо запустити іншу програму, тут відобразиться її назва. Зірочка * вказує, що це вікно є активним.
Кожного разу, коли ви створюєте нове вікно в сеансі tmux, його номер та назва запущеної програми додаються до рядка стану.
У команді screen відсутній рядок стану. Користувачу потрібно покладатися на власну пам’ять, щоб орієнтуватися в сеансі. Хоча, звичайно, ряд вікон терміналу, що розширюються, не є великою проблемою, і втрата одного рядка для рядка стану не є критичною.
Команди tmux активуються за допомогою комбінацій клавіш. Спочатку потрібно натиснути Ctrl+B, щоб tmux був готовий приймати команди. Потім потрібно швидко натиснути додаткову клавішу, щоб відправити команду. Команди можуть бути представлені літерами, цифрами, розділовими знаками або клавішами зі стрілками.
У команді screen все аналогічно, але для активації використовується комбінація Ctrl+A.
Щоб закрити вікно, натисніть Ctrl+B, а потім швидко X. Рядок стану стане жовтим, і вам буде запропоновано підтвердити закриття вікна.
Натисніть Y для підтвердження закриття або N для скасування. Натискати Enter після цього не потрібно, Y або N достатньо для виконання дії.
Якщо ви натиснете Y, вікно закриється. Якщо це було єдине вікно в сеансі, сеанс буде завершено. Ви повернетеся до командного рядка, з якого був запущений tmux. В терміналі буде відображено ” [exited]”.
Запуск іменованого сеансу tmux
Якщо ви регулярно працюєте з кількома сеансами tmux, ви швидко оціните можливість присвоєння кожному з них значущої назви. Screen також дозволяє називати сесії, але ці назви не відображаються у вікнах сеансів.
tmux new -s geek-1
Щоб запустити tmux із заданою назвою сеансу, скористайтеся командою `new` (новий сеанс) з параметром `-s` (назва сеансу). В цьому прикладі сеанс буде називатися `geek-1`:
Робота з вікнами в tmux
Для створення нового вікна в поточному сеансі, натисніть Ctrl+B, а потім C. В результаті буде створено нове порожнє вікно терміналу. Щоб протестувати його, запустімо команду dmesg з опцією -w:
dmesg -w
Тепер у сеансі є два вікна: одне з top, а інше з dmesg. Однак, за раз ми можемо бачити лише одне вікно.
Подивіться на ліву частину рядка стану. Ми все ще в сеансі tmux “geek-1”. У вікні нуль запущено top, а у вікні 1 – dmesg. Зірочка (*) біля dmesg показує, яке вікно є активним.
Для переходу між вікнами натисніть Ctrl+B, а потім одну з наступних клавіш:
N: перейти до наступного вікна.
P: перейти до попереднього вікна.
Від 0 до 9: перейти до вікна з вказаним номером.
Також можна вибрати вікно зі списку. Для цього натисніть Ctrl+B, а потім W, і з’явиться список вікон.
Вибір вікон
Ви можете переміщати жовту смугу виділення за допомогою клавіш зі стрілками вгору і вниз, а також Home або End. В нижній частині екрана відображається попередній перегляд вмісту обраного вікна.
Натисніть Enter для переходу до виділеного вікна, або Esc, щоб залишити список вікон без перемикання.
Від’єднання та підключення сеансів
Якщо натиснути Ctrl+B, а потім D, сеанс буде від’єднано. Він продовжить працювати у фоновому режимі, але ви не зможете його бачити або взаємодіяти з ним.
У нас був запущений процес top, щоб продемонструвати цю функціональність. Після натискання Ctrl+B, а потім D сеанс стає фоновим.
Ми повертаємось до початкового вікна терміналу. tmux сповіщає, що сеанс було від’єднано. В повідомленні є нагадування про назву сесії, яку ми задали. Це дуже зручно, оскільки ця назва використовується для повторного підключення до фонового сеансу.
tmux attach-session -t geek-1
Щоб під’єднатися до від’єднаного сеансу, використовується команда `attach-session` з параметром `-t` (цільовий сеанс). Необхідно також вказати назву сеансу, який потрібно відновити.
Вводимо наступну команду:
Наш сеанс знову стає видимим інтерактивним сеансом.
Фонові процеси
Всі тривалі або безперервні процеси, які були запущені до від’єднання сеансу, продовжать працювати у фоновому режимі (якщо вони не були завершені) після підключення сеансу.
screen може виконувати цю функцію, але не так інтуїтивно.
tmux new -s geek-2
Робота з кількома сеансами
dmesg -w
Відкриємо інше вікно терміналу і запустимо новий сеанс tmux з назвою «geek-2»:
В цьому сеансі запустимо dmesg:
Тепер у нас є оригінальний сеанс tmux «geek-1» і новий сеанс під назвою «geek-2».
Рядок стану вказує, що поточний сеанс має назву “geek-2” і в ньому запущено dmesg.
Натиснувши Ctrl+B, а потім D, ми від’єднаємо цей сеанс.
Повернувшись до сеансу tmux “geek-1”, натискаємо Ctrl+B, а потім S, щоб переглянути список сеансів tmux.
Зверніть увагу, це список сеансів. Попередній список був списком вікон в межах одного сеансу.
Жовту смугу виділення можна переміщати за допомогою стрілок вгору і вниз, а також клавіш Home і End. Внизу відображається попередній перегляд вмісту обраного сеансу.
Якщо натиснути стрілку вправо, відобразяться вікна виділеного сеансу.
Натисніть Enter для переходу до обраного сеансу або вікна, або Esc, щоб залишити список сеансів без перемикання. Якщо ви оберете новий сеанс, поточний буде від’єднано, а новий буде підключено.
Спільний доступ до сеансів
Ми від’єднали сеанс “geek-2”. Але ви також можете працювати з сеансами, які підключені до початкових терміналів. Зміни, внесені в одному сеансі, будуть відображатися в іншому сеансі tmux.
screen також може це робити за допомогою аналогічного набору команд.
Робота з панелями
Натиснувши Ctrl+B, а потім подвійні лапки (“”), ви розділите поточне вікно по горизонталі на дві панелі.
Це впливає лише на поточне вікно. Інші вікна в сесії залишаться без змін. В верхній панелі ми використали команду `tmux ls`, щоб відобразити список вікон в сеансі. Їх два, і рядок стану показує, що ми знаходимось в першому вікні. Якщо ми перейдемо до нульового вікна, натиснувши Ctrl+B, а потім 0, побачимо, що воно залишилося без змін.
Ці панелі є незалежними командними рядками, а не просто двома відображеннями одного вікна. Це окремі оболонки, що можна продемонструвати, запустивши різні команди на кожній панелі.
Введемо наступне:
uname -a
ls -hl
Для переходу між панелями, натисніть Ctrl+B, а потім клавішу стрілки вгору, вниз, вліво або вправо.
Якщо натиснути Ctrl+B, а потім знак відсотка (%), поточна панель розділиться по вертикалі.
Натисніть Ctrl+B, а потім Q, щоб tmux на короткий час відобразив номери кожної панелі.
Ці номери використовуються у підказках tmux. Натисніть Ctrl+B, а потім X, щоб закрити поточну панель. Рядок стану зміниться на жовтий, і вам буде запропоновано підтвердити, що ви бажаєте закрити обрану панель. Натисніть Y, щоб видалити панель, або N, щоб залишити все без змін.
Закриття панелі
Натискання Y призведе до видалення панелі.
screen також підтримує панелі, але їх використання менш інтуїтивно. І головним недоліком є те, що при від’єднанні сеансу, всі панелі зникають при повторному підключенні. Це є досить суттєвим недоліком.
Короткий довідник Ctrl+B
Нижче наведено короткий довідник з різними командами, які ви можете використовувати в tmux:
Команди для сеансу:
- S: Список сеансів.
- $: Перейменувати поточний сеанс.
- D: Від’єднати поточний сеанс.
- Ctrl+B, а потім ?: Відобразити сторінку довідки в tmux.
Команди для вікна:
- C: Створити нове вікно.
- ,: Перейменувати поточне вікно.
- W: Переглянути список вікон.
- N: Перейти до наступного вікна.
- P: Перейти до попереднього вікна.
- Від 0 до 9: перейти до вікна з відповідним номером.
Команди для панелі:
- %: Створити горизонтальний поділ.
- “”: Створити вертикальний поділ.
- H або стрілка вліво: Перейти до панелі ліворуч.
- I або стрілка вправо: Перейти до панелі праворуч.
- J або стрілка вниз: Перейти до нижньої панелі.
- K або стрілка вгору: Перейти до верхньої панелі.
- Q: Коротко показати номери панелей.
- O: Переміщення панелей по порядку. Кожне натискання переносить вас до наступної панелі.
- }: Поміняти положення поточної панелі на наступну.
- {: Поміняти положення поточної панелі на попередню.
- X: Закрити поточну панель.
Порівняння функціональності
З точки зору функціональності, screen і tmux виконують схожі завдання і пропонують аналогічні основні можливості. Ключова відмінність полягає в способі доступу до цих функцій. tmux пропонує більш елегантний та інтуїтивний інтерфейс користувача, проте це не єдина перевага.
Можливість перейменування сеансів та вікон в tmux є дійсно корисною, а збереження панелей після повторного підключення сеансу є значною перевагою.
screen, натомість, повністю втрачає панелі після від’єднання та повторного підключення сеансу, що створює незручності.
tmux пропонує набагато ширші можливості, включаючи гнучкі можливості для написання скриптів. Рекомендуємо ознайомитися з ними.