▍Шпаргалка по работе с Tmux¶
Tmux (терминальный мультиплексор) позволяет работать с несколькими сессиями в 1 окне. Вместо нескольких окон терминала к серверу — вы можете использовать одно. Позволяет подключаться/отключаться к текущему состоянию сессии. Запущенные программы и процессы продолжают работать. (Можно использовать вместо nohup, dtach).
Например, на работе правим файлы в Vim. Окно терминала с открытыми файлами, процессами. Отключаемся от сессии. Далее подключаемся к этой сессии из дома и получаем те же окна с открытыми файлами в Vim, процессами и т.д. Можно продолжить работу с того же момента, на котором остановились. Также удобно при разрыве связи. Дополнительно можно работать совместно с другими в терминале, если подключены к одной сессии. Каждый видит, что делает другой.
Установка¶
CentOS (нужен подключенный репо EPEL)
# yum install tmux
Fedora
# dnf install tmux
Ubuntu/Debian
# apt-get install tmux
Конфигурационные файлы¶
(пользователя, системный):
Для включения режима мыши (скролл, изменение размера панели, выбор панели и др.) нужно добавить:
Также полезно будет задать следующие переменные:
set -g default-terminal "xterm"
set-option -g default-command zsh
bind-key -n Home send Escape "OH"
bind-key -n End send Escape "OF"
Работа с Tmux¶
Старт
tmux
//без параметров будет создана сессия 0
tmux new -s session1
//новая сессия session1. Название отображается снизу-слева в квадратных скобках в статус строке. Далее идет перечисление окон. Текущее окно помечается звездочкой.
Префикс (с него начинаются команды)
<C-b> (CTRL + b)
Новое окно (нажать CTRL+b, затем нажать с)
<C-b c>
Список окон
<C-b w>
// переключиться курсором вверх-вниз
Переключение
Окна можно делить на панели (Panes) Как в тайловых (мозаичных) оконных менеджерах.
Деление окна горизонтально
Деление окна вертикально
Переход между панелей
<C-b стрелки курсора>
// либо режим мыши
Изменение размеров панелей
<C-b c-стрелки>
// либо режим мыши
Закрытие окон
Отключение от сессии
Список сессий
tmux ls
Подключиться к работающей сессии
tmux attach
//подключение к сессии, либо к единственной, либо последней созданной
tmux attach -t session1
// подключение к сессии session1
Выбрать сессию
<C-b s>
Завершение сессии
tmux kill-session -t session1
Завершить все сессии
tmux kill-server
Список поддерживаемых комманд
tmux list-commands
Сохранение сессии¶
#!/usr/bin/env bash
# Save and restore the state of tmux sessions and windows.
# TODO: persist and restore the state & position of panes.
set -e
dump() {
local d=$'\t'
tmux list-windows -a -F "#S${d}#W${d}#{pane_current_path}"
}
save() {
dump > ~/.tmux-session
}
terminal_size() {
stty size 2>/dev/null | awk '{ printf "-x%d -y%d", $2, $1 }'
}
session_exists() {
tmux has-session -t "$1" 2>/dev/null
}
add_window() {
tmux new-window -d -t "$1:" -n "$2" -c "$3"
}
new_session() {
cd "$3" &&
tmux new-session -d -s "$1" -n "$2" $4
}
restore() {
tmux start-server
local count=0
local dimensions="$(terminal_size)"
while IFS=$'\t' read session_name window_name dir; do
if [[ -d "$dir" && $window_name != "log" && $window_name != "man" ]]; then
if session_exists "$session_name"; then
add_window "$session_name" "$window_name" "$dir"
else
new_session "$session_name" "$window_name" "$dir" "$dimensions"
count=$(( count + 1 ))
fi
fi
done < ~/.tmux-session
echo "restored $count sessions"
}
case "$1" in
save | restore )
$1
;;
* )
echo "valid commands: save, restore" >&2
exit 1
esac
Чтобы сохранить сессию нужно выполнить:
Данные будут писаться в файл ~/.tmux-session
Восстановить сессию: