Основы tmux#

Теперь, когда tmux установлен, рассмотрим основные его функции, начав с базового сеанса.

Запуск tmux#

Самый простой способ запуска tmux — ввести в терминале:

$ tmux

После этого окно терминала станет похоже на следующее изображение

Сеанс tmux по умолчанию

Рис. 2 Сеанс tmux по умолчанию#

Это «сеанс» (session) tmux, и он работает так же, как обычный терминальный сеанс. Можно ввести любую допустимую команду, и все будет работать, как ожидалось.

Чтобы закрыть сеанс tmux, нужно ввести

$ exit

в самом сеансе. Это приведет к закрытию tmux, и возврату к стандартному терминалу.

Однако, такой способ запуска tmux не очень удобен для продолжительной работы, и годится лишь для кратковременных сеансов. Если использовать tmux сколь-нибудь продолжительное время, лучше создать «именованные сеансы». Такой способ позволит легко идентифицировать сеансы, и свободно переключаться между ними в процессе работы.

Таким образом, можно запускать на одном компьютере столько, сколько необходимо, и при желании организовывать их по своему усмотрению. Например, один сеанс для рабочего проекта, другой — для собственного крутого сайд-проекта. Можно организовать эти сеансы, давая каждому собственное уникальное имя. Это очень просто. Следующая команда создаст именованный сеанс под названием «base»:

$ tmux new-session -s base

Более короткий вариант этой команды выглядит так:

$ tmux new -s base

Запуск любой из этих команд приведет к запуску «именованного сеанса» tmux.

Именованный сеанс base

Рис. 3 Именованный сеанс base#

Заметить различия, однако, по сравнению с предыдущим запуском, довольно сложно. Единственное различие — это имя сеанса в нижнем левом углу окна терминала.

Именованные сеансы удобны, когда есть необходимость оставлять tmux запущенным в фоне.

Особенности работы с сеансами tmux и способы запуска программ в фоновом режиме рассматриваются далее. А сейчас поговорим о том, как отправлять команды в tmux.

Префикс команд#

Поскольку консольные приложения выполняются внутри tmux, становиться необходим способ сообщить tmux, что команда, вводимая команда предназначена для него, а не для основного приложения. Это делается с помощью комбинации клавиш Ctrl-b, которая называется префиксом команд. Для ввода любой команды tmux необходимо предварительно использовать эту комбинацию. Важно отметить, что не следует удерживать все клавиши вместе. Вместо этого сначала одновременно нажмите Ctrl-b, отпустите эти клавиши, а затем сразу же нажмите клавишу связанную с командой, которую вы хотите передать tmux.

Чтобы понять, как это работает, снова запустите tmux командой

$ tmux

После этого, внутри tmux нажмите Ctrl-b, а затем — t. На экране появятся большие часы:

Часы в окне tmux

Рис. 4 Часы в окне tmux#

Нажмите клавишу Enter или Esc, чтобы закрыть часы, и выйдите из tmux, набрав exit.

Так как сочетание Ctrl-b набирать достаточно не удобно, разумным решением является назначить для префикса более простую комбинацию. Как это сделать будет показано в разделе «Настройка tmux». Поэтому в дальнейшем изложении вместо Ctrl-b будем использовать обозначение PREFIX, за которым следует горячая клавиша для команды tmux, например, PREFIX t для отображения часов, или PREFIX d для отсоединения (detaching) от сеанса.

Теперь давайте посмотрим, как запустить программы в фоновом режиме.

Работа с сеансами#

Отсоединение от сеанса#

Если закрыть обычный сеанс терминала, все программы, запущенные в этом сеансе, будут уничтожены. Одной из отличительной особенностью и преимуществом tmux в данном случае является то, что после запуска программ или процессов внутри него, можно оставить все это работающим в фоновом режиме, «отсоединившись» (detaching) от сеанса. Когда пользователь отсоединяется от сеанса tmux, он на самом деле не закрываете его. Любые программы, которые были запущены в этом сеансе будут продолжать работать в фоне. Позже, когда возникнет необходимость, пользователь может «присоединиться» (attach) к сеансу и продолжить работу с того места, на котором остановился. Для демонстрации этого, давайте создадим новый именованный сеанс tmux, запустим программу и отсоединимся от сеанса.

Сначала создадим сеанс:

$ tmux new -s first_session

Затем в сеансе tmux запустим приложение с именем top, которое отслеживает использование памяти и процессора:

$ top

В терминале отобразится что-то похожее на следующий рисунок.

Теперь отключимся от сеанса tmux, нажав PREFIX d. Это вернет обычный терминал. Теперь давайте посмотрим, как вернуться к тому сеансу tmux, который мы оставили запущенным. Но прежде чем мы это сделать, закроем окно терминала.

Повторное подключение к существующему сеансу#

Мы создали сеанс tmux, запустили программу внутри сеанса, отсоединились от него и закрыли окно терминала, но сеанс tmux все еще работает вместе с приложением, которое мы запустили.

Просмотреть список существующих сеансов tmux можно, используя команду

$ tmux list-session

или ее сокращенный вариант

$ tmux ls

в новом окне терминала.

Команда покажет, что в данный момент запущен один сеанс:

first_session: 1 windows (created Thu Jan 01 22:20:00 2024)

Для подключения к существующему сеансу используется команда attach. Так как у нас запущен только один сеанс, то, для присоединения к сеансу, можно использовать команду attach без параметров

$ tmux attach

Все становится сложнее, если будет запущено более одного сеанса. Отключимся от основного сеанса с помощью PREFIX d.

Теперь создадим новый сеанс tmux в фоновом режиме, без присоединения к нему, с помощью команды

$ tmux new -s second_session -d

После этого список запущенных сеансов будет выглядеть так

$ tmux ls
first_session: 1 windows (created Thu Jan 01 22:30:00 2024)
second_session: 1 windows (created Thu Jan 01 22:30:00 2024)

Подключиться к нужному сеансу, можно используя флаг -t, за которым следует имя сеанса. Запустим следующую команду:

$ tmux attach -t second_session

Это присоединит нас к сеансу tmux second_session. Отсоединимся от этого сеанса, используя PREFIX d, а снова присоединимся к первому сеансу.

А пока давайте удалим активные сеансы.

Закрытие сеанса#

Для закрытия активного сеанса достаточно ввести

$ exit

внутри него.

Другой способ закрытия сеанса — команда kill-session. Ее использование аналогично tmux attach:

$ tmux kill-session -t first_basic
$ tmux kill-session -t second_session

Это может быть полезно в ситуациях, когда программа в сеансе зависла.

При попытке снова получить список сеансов

$ tmux ls

получим следующее сообщение:

no server running on /tmp/tmux-1000/default

Поскольку сеансы tmux не существуют, то и сам tmux не работает, а следовательно, он не может обработать запрос.

Теперь, после знакомства с основами создания сеансов и работы с ними, давайте посмотрим, как можно организовать работу с несколькими программами в рамках одного сеанса.

Работа с окнами#

В рамках одного сеанса tmux можно одновременно работать с несколькими приложениями. И это наиболее часто используемый способ работы c tmux. Поддерживать порядок и организацию при этом можно с помощью окон, которые похожи на вкладки в современных эмуляторах графического терминала или веб-браузерах. Каждый раз когда запускается новый сеанс, tmux создает начальное окно.

Давайте создадим новый сеанс с двумя окнами. В первом окне будет обычный терминал, а во втором запустим команду top.

Создание и наименование окон#

Создадим именованный сеанс с именем «windows»:

$ tmux new -s windows -n shell

Используя флаг -n, можно задать имя первого окна, чтобы можно было легко его идентифицировать. Теперь давайте добавим еще одно окно в этот сеанс.

Чтобы создать окно в текущем сеансе, нажмите PREFIX c. Такой способ создание приводит к автоматическому переключению фокуса на новое окно. Давайте запустим top в этом новом окне.

$ top

Первое окно имеет, заданное при его создании, имя «shell», второе — «top». Так как имя второго окна не было задано при создании, оно будет меняться в зависимости от запущенного в данный момент приложения. Чтобы переименовать окно, достаточно нажать PREFIX , (запятая). После этого строка состояния изменится, позволяя переименовать текущее окно. Переименуем его в «processes».

В рамках одного сеанса tmux можно создавать столько окон, сколько необходимо. Но как только их становится больше одного, нужно иметь возможность переключаться между ними.

Переключение между окнами#

На данный момент у нас имеется два окна. Есть несколько способов переключения между ними. Если окон всего два, можно быстро переключаться между ними с помощью PREFIX n. Данная комбинация переключает на следующее окно (next window), позволяя циклически переключаться между окнами. Так как сейчас у нас есть только два окна такой способ позволит просто переключается между ними. Аналогично можно использовать PREFIX p для перехода к предыдущему окну (previous window).

По умолчанию каждое окно в tmux имеет номер, начинающийся с 0. Можно быстро перейти к первому окну используя PREFIX 0, ко второму — PREFIX 1 и т.д. Такая нумерация окон, начинающаяся с нуля, не всегда интуитивно понятна, поэтому в разделе «Настройка tmux», будет показано как сделать так, чтобы нумерация окон начиналась с единицы, а не с нуля.

Если создано больше десяти окон, можно использовать PREFIX w для отображения визуального меню со списком всех окон, чтобы выбрать то, которое необходимо в данный момент.

Также можно использовать PREFIX f , чтобы найти окно, содержащее строку текста (не обязательно в названии окна). Если ввести текст и нажать клавишу Enter, отобразится список окон, содержащих этот текст.

Если отсоединиться от своего сеанс и повторно подключиться позже, все окна сохранят свое состояние.

Чтобы закрыть окно, можно либо ввести exit в приглашение командной строки в окне, либо использовать PREFIX &, после чего отобразится подтверждающее сообщение в строке состояния перед закрытием окна. После подтверждения закрытия, активным станет предыдущее окно. Чтобы полностью закрыть сеанс tmux, достаточно закрыть все его.

Создание окон — это здорово, но можно сделать tmux еще более полезным, разбив окно на панели.

Работа с панелями#

Наличие программ в отдельных окнах подходит для случаев, которые есть возможность скрывать некоторые из них за ненадобностью. Но tmux позволяет разделить одно окно на панели.

Давайте создадим новый сеанс tmux под названием «panes», чтобы можно было поэкспериментировать с тем, как работают панели. Закройте все существующие сеансы tmux и создайте новый следующим образом:

$ tmux new -s panes

Окна можно делить окна по вертикали или по горизонтали.

Давайте сначала разделим окно пополам по вертикали, а затем по горизонтали, создав одну большую панель слева и две меньшие справа, как показано на рисунке.

В сеансе tmux нажмите PREFIX %, и окно разделится посередине, запустив второй сеанс терминала в новой панели. Кроме того, фокус переместится на эту новую панель. Нажатие PREFIX « (двойная кавычка) разделит эту новую панель пополам по горизонтали. По умолчанию новые панели разделяют существующую панель ровно пополам.

Для циклического переключения между панелями нажимайте PREFIX o. Также для переключения между панелями можете использовать PREFIX и клавиши со стрелками.

Всего парой нажатий клавиш удалось разделить одно окно на рабочую область с тремя панелями. Давайте посмотрим на то как можно переупорядочить эти панели с помощью макетов.

Макеты панелей#

Изменить размер панели можно либо с помощью постепенного изменения размера, либо с помощью шаблонов. Сочетание клавиш для постепенного изменения размера панелей по умолчанию довольно не удобное. В разделе «Настройка tmux» будут переопределены сочетания клавиш, чтобы упростить изменение размеров панелей. На данный момент будем использовать один из нескольких стандартных макетов панелей:

  • even-horizontal размещает все панели горизонтально, слева направо.

  • even-vertical размещает все панели вертикально сверху вниз.

  • main-horizontal создает одну большую панель вверху и меньшие панели внизу.

  • main-vertical создает одну большую панель в левой части экрана и остальные панели вертикально справа.

  • tiled упорядочивает все панели равномерно на экране.

Переключаться между этими раскладками можно нажимая PREFIX Пробел.

Закрытие панелей#

Закрытие панели происходит так же, как и закрытие сеанса или окна tmux: нужно просто ввести exit в панель, которую необходимо закрыть.

Еще можно закрыть панель с помощью сочетания PREFIX x, которое также закроет окно, если в нем только одна панель. Такое удаление панели отлично подходит для ситуации, когда приложение в панели зависло или вы больше не можете с ним взаимодействовать. При использовании комбинации клавиш необходимо будет подтвердить закрытие панели.

Теперь мы можем создавать новые сеансы, создавать окна, панели и перемещаться между ними. Прежде чем мы перейдем к более сложным темам, давайте рассмотрим некоторые дополнительные команды tmux.

Работа в командном режиме#

До сих пор мы использовали комбинации клавиш для создания окон и панелей, но эти комбинации клавиш на самом деле альтернативный вариант для команд tmux с некоторыми предустановленными параметрами. Команды tmux можно выполнять двумя способами: из самого терминала или из области команд в строке состояния tmux. Про то, как использовать команды tmux из терминала будет рассказано в разделе «Создание настраиваемых рабочих окружений в tmux», а пока давайте изучим командный режим tmux, используя его для создания новых окон и панелей в рабочей области.

Чтобы войти в командный режим, достаточно нажать PREFIX : (двоеточие) в активном сеансе tmux. Строка состояния изменит цвет, и будет выведена подсказка, указывающая, что можно ввести команду. Например, можно создать новое окно с помощью команды new-window. Используя команду, а не сочетание клавиш, можно создать новое окно и сразу дать ему имя, используя флаг -n:

: new-window -n console

Примечание

: обозначает символ приглашения ко вводу команд. Его набирать не нужно.

Давайте сделаем еще один шаг и сразу запустим программу top в новом окне при его создании. Для этого нужно войти в командный режим и ввести команду:

: new-window -n processes "top"

После нажатия ENTER, появится новое окно и запустится приложение top, показывающее запущенные процессы.

Указание команды для окна при его создании чрезвычайно удобно для краткосрочных задач, но есть небольшой нюанс; если выйти из приложения top, нажав q, созданное окно tmux также закроется. Можно использовать параметры конфигурации, чтобы обойти это, но если необходимо, сохранять окно после закрытия приложения, просто создайте его без указания начальной команды, а затем уже выполните эту команду новом окне.

Командный режим может использоваться для создания новых окон, новых панелей, новых сеансов или для установки других параметров окружения.

В разделе «Настройка tmux», будет показано, как создать несколько собственных сочетаний клавиш, чтобы сделать использование некоторых из этих команд еще проще.

Получение справочной информации#

Используя сочетание PREFIX ?, можно получить список всех предопределенных сочетаний клавиш tmux и связанных с ними команд.

Справочная информация#

Для дальнейшего использования#

Создание сеансов#

Команда

Описание

tmux new-session или tmux new -s или tmux

Создает новый сеанс без имени.

tmux new -s development

Создает новый сеанс под названием «development».

tmux new -s development -n editor

Создает сеанс с именем «development» и называет первое окно «editor».

tmux attach -t development

Подключается к сеансу под названием «development».

Команды по умолчанию для сеансов, окон и панелей#

Команда

Описание

PREFIX d

Отключение от сеанса, оставляя сеанс запущенным в фоновом режиме.

PREFIX :

Переход в командный режим.

PREFIX c

Создание нового окна в текущем сеансе tmux. Сокращение для new-window.

PREFIX n

Переход к следующему окну.

PREFIX p

Переход к предыдущему окну.

PREFIX 09

Выбор окна по номеру.

PREFIX w

Вывод списка окон текущего сеанса с возможность выбора окна.

PREFIX f

Поиск окна, содержащего указанный текст. Вывод списка окон текущего сеанса, содержащих этот текст.

PREFIX ,

Переименование окна.

PREFIX &

Закрытие текущего окна после подтверждения. Если окно единственное в сеансе, закроется и сеанс.

PREFIX %

Делит текущее окно пополам по вертикали.

PREFIX "

Делит текущее окно пополам по горизонтали.

PREFIX o

Циклическое перемещение по панелям окна.

PREFIX q

Отображает номера на каждой панели.

PREFIX x

Закрывает текущую панель после запроса подтверждения.

PREFIX Пробел

Циклическое перемещение по макетам панелей.