Вопрос или проблема
Я использую tmux
на EC2 AWS, но хочу увидеть, что происходит в одной из созданных мной сессий.
Я использую Ctrl+b, а затем d, чтобы выйти из сессии.
Я хочу увидеть, что происходит в одной из созданных мной сессий.
Насколько я знаю, вы можете просмотреть список ваших сессий tmux
, используя
tmux list-sessions
, чтобы увидеть, какие сессии в данный момент запущены в tmux
.
Чтобы фактически увидеть, что выполняется в этих сессиях, вы должны присоединиться к конкретной сессии, для этого у вас есть два варианта (из опыта).
-
Если вы в данный момент не запустили сессию
tmux
(или не находитесь в сессииtmux
), вы присоединяетесь, запустивtmux attach -t n
(где -t обозначает целевую сессию, а n — номер этой сессии). -
Если вы запустили другую сессию tmux, вы получите ошибку при попытке подключиться к другой сессии, поэтому самый простой способ увидеть, что там выполняется, — это использовать команду
tmux list-windows -a
, а затем переместить любую панель/окно, в котором выполняется задача.
Перемещение окна
Используя tmux move-window -s n1 -t n2
(-s == исходное окно, -t == целевое окно, куда вы перемещаете исходное окно. n1 == номер окна, которое вы хотите переместить, и n2 — номер целевого окна).
Формат
Числа n1 и n2 упорядочены/отформатированы как sessionNumb:windowNumb
.
Таким образом, первая сессия в первом окне будет 0:1, а вторая сессия в первом окне будет 1:1.
Примечание: n2 должен быть доступной сессией с ещё не созданным окном. Если вы перемещаете окно в уже созданное окно, вы получите ошибку «Целевое окно не пусто», и при перемещении в не созданную сессию получите ошибку “нельзя найти сессию n”.
Перемещение панели
Иногда в одном окне может быть много панелей, и вам нужно переместить только одну панель, это полезно, если вам нужно переместить только эту панель в текущее окно (так как вы не можете переместить окно в другое окно).
Вы используете почти такую же синтаксическую структуру, как при перемещении окна, но вы используете tmux move-pane -s *n1* -t *n2*
.
Где n1 теперь отформатировано как sessionNumb:windowNumb.paneNumb
, и так же, как n2.
Примеры
После tmux list-windows -a
вы получите что-то вроде этого
0:1: Project- (4 panes) [177x48]
0:2: Mirror (3 panes) [177x48]
0:3: Chat! (1 panes) [177x48]
0:4: ssh* (1 panes) [177x48]
1:1: zsh (2 panes) [176x45]
1:2: zsh* (1 panes) [176x45]
1:3: zsh- (1 panes) [176x45]
Теперь, чтобы переместить окно “Chat” из первой сессии во вторую сессию, мне нужно будет запустить tmux move-window -s 0:3 -t 1:4
(помните, что нельзя переместить окно в уже созданное окно).
Перемещение панели
Если вам нужно переместить только одну панель, то вам нужно выполнить tmux list-panes -a
, или если вы уже знаете, из какого окна она, вы можете использовать tmux list-panes -t 0:1
См. объяснение формата выше.
Результат показывает, что сессия 0 окно 1 (-s 0:1) имеет такие панели.
1: [177x34] [history 3/10000, 4119 bytes] %7 (active)
2: [88x13] [history 541/10000, 231972 bytes] %8
3: [88x13] [history 2/10000, 1541 bytes] %9
что просто неприемлемо, но если вам нужно больше информации, чтобы понять, какая панель вам действительно нужна, вы можете выполнить
tmux list-panes -F "#{pane_current_command}" -t 0:1
Что отобразит текущие команды, выполняемые на каждой панели.
В моем случае
vim
zsh
python (к сожалению, запускается `ranger`)
Итак, после идентификации нужной панели (скажем, той, где vim) вам нужно ее переместить.
tmux move-pane -s 0:1.1 -t 1:1.2
для перемещения в конкретную панель в данном случае 2
Если в целевом окне есть только одна панель, вы можете использовать tmux move-pane -s 0:1.1 -t 1:1.
без указания целевой панели, и это всё равно сработает.
Следуя ответу выше, вы можете попробовать:
tmux ls
, чтобы получить номер сессии. А затем
tmux attach-session -t <номер_сессии>
Если у вас есть единственная сессия tmux, используйте:
tmux a
чтобы получить к ней доступ
Если вы хотите привязать это к клавише в вашей оболочке (чтобы сделать возврат в tmux из другого терминала максимально простым), вы могли бы сделать что-то подобное. Это для zsh
.
Я полагаю, только формы function
и bindkey
немного изменятся для других оболочек.
В моем ~/.zshrc
:
function tmux_last_session(){
LAST_TMUX_SESSION=$(tmux list-sessions | awk -F ":" '{print$1}' | tail -n1);
tmux attach -t $LAST_TMUX_SESSION
}
bindkey -s '^s' 'tmux_last_session ^M'
Активируйте это. source ~/.zshrc
Ctrl+s
теперь открывает последнюю отсоединенную сессию tmux.
Обычно выбор из списка привязан к prefix s
, поэтому если ваш префикс — C-b, тогда C-b s
.
Ответ или решение
Когда вы работаете на AWS EC2 и используете tmux
, вы можете столкнуться с ситуацией, когда вам нужно повторно подключиться к ранее созданной сессии, чтобы просмотреть выполняющийся в ней процесс. Давайте рассмотрим, как это сделать эффективно и профессионально, учитывая все ключевые аспекты работы с tmux
.
Теория
tmux
— это терминальный мультиплексор, который позволяет управлять несколькими терминальными сессиями из одного окна терминала. Это особенно полезно при работе с удалёнными серверами, где важно поддерживать активное состояние терминалов даже после отключения клиента.
Когда вы запускаете tmux
-сессию, она работает в фоновом режиме. Вы можете отключаться от этой сессии, не влияя на её работу, и подключаться к ней повторно, чтобы продолжить работу с того момента, на котором вы её оставили. Это достигается с помощью команд, которые позволяют управлять сессиями, окнами и панелями внутри tmux
.
Пример
-
Список сессий: Для просмотра всех активных
tmux
-сессий используйте команду:tmux list-sessions
Это выдаёт список всех запущенных сессий с уникальными идентификаторами, которые могут быть использованы для подключения к нужной сессии.
-
Подключение к сессии: Если вы не находитесь в
tmux
, используйте следующую команду для подключения к нужной сессии:tmux attach-session -t <session_name>
Здесь
<session_name>
— это идентификатор сессии, который вы получили с помощью командыlist-sessions
. -
Подключение из другой
tmux
-сессии: Если вы уже работаете внутриtmux
, можно столкнуться с ошибкой при попытке подключиться к другой сессии. В этом случае более эффективным будет использование команд для управления окнами или панелями. -
Управление окнами и панелями: Если у вас есть потребность в перемещении окон или панелей между сессиями, вы можете использовать команды:
-
Для перемещения окна:
tmux move-window -s <source_window> -t <target_window>
Здесь
<source_window>
и<target_window>
— это идентификаторы окон в форматеsession_number:window_number
. -
Для перемещения панели:
tmux move-pane -s <source_pane> -t <target_pane>
Формат для идентификаторов:
session_number:window_number.pane_number
.
-
Применение
Практическое использование tmux
требует определённого уровня минимальной настройки для упрощения работы. Например, вы можете настроить свою оболочку (например, zsh
), чтобы быстро подключаться к последней активной сессии tmux
.
Для этого можно добавить в ~/.zshrc
следующее:
function tmux_last_session(){
LAST_TMUX_SESSION=$(tmux list-sessions | awk -F ":" '{print$1}' | tail -n1);
tmux attach -t $LAST_TMUX_SESSION
}
bindkey -s '^s' 'tmux_last_session ^M'
После добавления этого кода, не забудьте выполнить:
source ~/.zshrc
Теперь вы можете использовать комбинацию клавиш Ctrl+s
для быстрого подключения к последней отсоединённой сессии tmux
.
Заключение
Использование tmux
позволяет гораздо эффективнее управлять терминальными сессиями, особенно в удалённой среде, такой как AWS EC2. Знания о том, как правильно включаться и переключаться между сессиями, а также возможности тонкой настройки tmux
, значительно улучшат ваши рабочие процессы и продуктивность в ИТ-среде. Эти инструменты обеспечат бесперебойный доступ к важной информации и поддержание процессов независимо от вашего текущего физического присутствия у системы.