Как использовать tmux в Linux (и почему он лучше экрана)
Опубликовано: 2022-01-29 Команда Linux tmux
— это терминальный мультиплексор, как и screen
. Его сторонников много, и мы решили сравнить их. Действительно ли tmux
лучше, или это просто случай предпочтения того, что вы знаете?
tmux против экрана
Обе команды screen
tmux
и GNU являются терминальными мультиплексорами. Они позволяют вам иметь несколько окон в одном окне терминала и переключаться между ними. Окно можно разделить на панели, каждая из которых дает вам независимую командную строку.
Вы также можете отключить сеанс, и он станет безголовым объектом, работающим в фоновом режиме — вы даже можете закрыть окно терминала, которое его запустило. Когда вы будете готовы, вы можете открыть новое окно терминала и повторно подключить все еще работающий сеанс. Вы также можете сделать это через SSH-соединение.
Вы можете отключить сеанс на одном компьютере, вернуться домой и войти на удаленный компьютер. При повторном подключении вы можете повторно подключить фоновый сеанс и снова использовать его в интерактивном режиме.
Что за экранная команда?
Команда screen
также является терминальным мультиплексором и содержит множество параметров. Чтобы узнать обо всем, что вы можете с ним сделать, ознакомьтесь с нашей подробной статьей.
На этот раз мы сосредоточимся на tmux
. По мере продвижения мы будем упоминать, как screen
обрабатывает одну и ту же функцию или функцию.
Только одно нас раздражало в screen
. Мы расскажем об этом, когда доберемся до этого, и посмотрим, станет ли tmux
лучше.
СВЯЗАННЫЕ С: Как использовать экранную команду Linux
Установка tmux
В то время как screen
обычно устанавливается по умолчанию в популярных дистрибутивах Linux, tmux
— нет. Чтобы установить tmux
в Ubuntu, введите следующее:
sudo apt-get установить tmux
В Manjaro вы можете использовать pacman
:
sudo pacman -Sy tmux
В Fedora 31 уже установлен tmux
.
Запуск сеанса tmux
Чтобы запустить tmux
, просто введите его и нажмите Enter:
tmux
В окне терминала будет отображаться строка состояния, когда вы находитесь в сеансе tmux
.
В правой части строки состояния отображается имя хоста, а также время и дата. В левой части отображается следующая информация, относящаяся к сеансу:
- [0]: это имя сеанса. По умолчанию они нумеруются, начиная с нуля. Ниже мы рассмотрим, как вы можете давать осмысленные имена сеансам.
- 0:bash*: 0 указывает, что это первое окно в этом сеансе. В этом сеансе работает только один процесс —
bash
. Если вы запустите программу, здесь появится ее имя. Звездочка (*) означает, что это окно, на которое вы смотрите. Каждый раз, когда вы создаете новое окно в сеансеtmux
, его номер окна и имя запущенной в нем программы добавляются в строку состояния.
Команда screen
по умолчанию не отображает строку состояния. Вы должны летать вслепую и полагаться на свой ум, чтобы понять, что происходит, что требует некоторой практики. (Если вы не настроите свою собственную строку состояния.)
Положительным моментом является то, что вы не потеряете ни строчки окна терминала. Конечно, вы обычно расширяете окно терминала, чтобы использовать терминальный мультиплексор. В этом случае потеря одной строки для строки состояния не является большой проблемой. Мы оставили здесь изображения окон терминала с размером по умолчанию, чтобы вы могли видеть информацию.
Команды передаются tmux
с помощью клавиш, и это состоит из двух частей. Сначала вы нажимаете Ctrl+B, чтобы привлечь внимание tmux
. Затем вы быстро нажимаете следующую клавишу, чтобы отправить команду tmux
. Команды подаются нажатием букв, цифр, знаков препинания или клавиш со стрелками.
В screen
то же самое, за исключением того, что вы нажимаете Ctrl+A, чтобы привлечь его внимание.
Чтобы закрыть окно, нажмите Ctrl+B, а затем быстро нажмите X. Строка состояния станет желтой. Затем вам будет предложено подтвердить, что вы хотите убить окно.
Нажмите Y, чтобы закрыть окно, или N, если передумаете. Вам не нужно нажимать Enter после этого; Y или N достаточно, чтобы зарегистрировать свой выбор.
Если вы нажмете Y, окно закроется. Поскольку это единственное окно в этом сеансе, сеанс завершается.
Сеанс tmux
закрывается, и вы возвращаетесь в командную строку, из которой запустили tmux
. Вы увидите «[выход]» в окне терминала.
Это может показаться очевидным, но это подтверждение того, что вы закрыли сеанс, а не оставили его отключенным и работающим. Мы обсудим сеансы отсоединения ниже.
Запуск именованного сеанса tmux
Если вы регулярно запускаете несколько сеансов tmux
, вы быстро оцените функциональность присвоения каждому из них осмысленного имени. Вы также можете называть сеансы в screen
, но они нигде не отображаются в окнах сеансов.
Чтобы запустить tmux
с именем сеанса, используйте команду new
(новый сеанс) и параметр -s
(имя сеанса). Наш сеанс будет называться «geek-1», поэтому мы набираем следующее:
tmux новый -s выродок-1
Когда сеанс tmux
загружается, «geek-1» отображается как первая запись в строке состояния в крайнем левом углу.
Добавление дополнительных окон
Чтобы создать новое окно в текущем сеансе, нажмите Ctrl+B, а затем C. Вы получите пустое окно терминала в текущем сеансе. Итак, у нас будет что-то работать в этом новом окне, давайте запустим команду dmesg
с параметром -w
(follow):
dmesg -w
Теперь у нас есть два окна в сеансе; один работает top
, а другой dmesg
. Однако мы можем видеть только по одному (подробнее об этом чуть позже).
Взгляните на левую часть строки состояния. Мы все еще находимся в сеансе tmux
«geek-1». В нулевом окне работает top, а в первом — dmesg
. Звездочка (*) после dmesg
говорит нам, какое окно видимо.
Чтобы переключаться между окнами, нажмите Ctrl+B, а затем одну из следующих клавиш:
- N : Показать следующее окно.
- P: Показать предыдущее окно.
- От 0 до 9: отображение окна с номером от 0 до 9.
Вы также можете выбрать окно из списка. Если нажать Ctrl+B, а затем W, появится список окон.
Чтобы переместить янтарную полосу выделения, нажимайте стрелки вверх или вниз, Home или End. В нижней части дисплея отображается предварительный просмотр содержимого в выделенном окне.
Нажмите Enter, чтобы перейти к выделенному окну, или Esc, чтобы выйти из списка окон без переключения.
Отсоединение и присоединение сеансов
Если вы нажмете Ctrl+B, а затем D, вы отсоедините сеанс. Он будет продолжать работать в фоновом режиме, но вы не сможете его видеть или взаимодействовать с ним.
Мы начали сеанс с top
, поэтому у нас есть работающий процесс для демонстрации. Затем мы нажимаем Ctrl+B, а затем D. Сеанс исчезает и становится фоновым сеансом.
Возвращаемся к исходному окну терминала. Есть сообщение от tmux
о том, что сеанс отключен. Это также напоминает нам о названии, которое мы дали сеансу. Это удобно, потому что это то, что мы используем для подключения к фоновому сеансу, а затем восстанавливаем его до интерактивного.
Чтобы присоединить отсоединенный сеанс, мы будем использовать не требующую пояснений команду attach-session
с параметром -t
(целевой сеанс). Мы также укажем название сеанса, который хотим вызвать.
Набираем следующее:
tmux attach-session -t geek-1
Наш сеанс возвращается и снова становится видимым интерактивным сеансом.
Любые длительные или непрерывные процессы, которые вы запустили перед отсоединением сеанса, будут по-прежнему работать в фоновом режиме (если они не завершены) при присоединении сеанса.
screen
может это сделать, но не так интуитивно.
Обработка нескольких сеансов
Давайте откроем другое окно терминала и запустим новый сеанс tmux
под названием «geek-2»:
tmux новый -s выродок-2
В этом сеансе мы запустим dmesg
:
dmesg -w
Теперь у нас есть исходный сеанс 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
также имеет панели, но, опять же, они менее интуитивно понятны в использовании. Что нас раздражает в 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
есть гораздо больше, включая невероятно гибкие возможности сценариев. Вы обязаны проверить это ради себя.
Команды Linux | ||
Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
Процессы | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · тайм-аут · стена · да · убить · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · дата · bg · fg | |
Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов