Перейти к содержанию

▍Шпаргалка по работе с Tmux

Tmux

Tmux (терминальный мультиплексор) позволяет работать с несколькими сессиями в 1 окне. Вместо нескольких окон терминала к серверу — вы можете использовать одно. Позволяет подключаться/отключаться к текущему состоянию сессии. Запущенные программы и процессы продолжают работать. (Можно использовать вместо nohup, dtach).

Например, на работе правим файлы в Vim. Окно терминала с открытыми файлами, процессами. Отключаемся от сессии. Далее подключаемся к этой сессии из дома и получаем те же окна с открытыми файлами в Vim, процессами и т.д. Можно продолжить работу с того же момента, на котором остановились. Также удобно при разрыве связи. Дополнительно можно работать совместно с другими в терминале, если подключены к одной сессии. Каждый видит, что делает другой.

Установка

CentOS (нужен подключенный репо EPEL)
# yum install tmux 

Fedora
# dnf install tmux

Ubuntu/Debian
# apt-get install tmux

Конфигурационные файлы

(пользователя, системный):

~/.tmux.conf
/etc/tmux.conf

Для включения режима мыши (скролл, изменение размера панели, выбор панели и др.) нужно добавить:

nano ~/.tmux.conf
set -g mouse on

Также полезно будет задать следующие переменные:

nano ~/.tmux.conf
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> // переключиться курсором вверх-вниз

Переключение

<C-b n> // следующее окно
<C-b p> // предыдущее окно
<C-b 0> // переключиться на номер окна

Окна можно делить на панели (Panes) Как в тайловых (мозаичных) оконных менеджерах.

Деление окна горизонтально

<C-b ">
либо команда
tmux split-window -h

Деление окна вертикально

<C-b %>
либо команда
tmux split-window -v

Переход между панелей

<C-b стрелки курсора> // либо режим мыши

Изменение размеров панелей

<C-b c-стрелки> // либо режим мыши

Закрытие окон

<C-b x> // нужно подтвердить y
либо
exit

Отключение от сессии

<C-b d>
либо
tmux detach

Список сессий

tmux ls

Подключиться к работающей сессии

tmux attach //подключение к сессии, либо к единственной, либо последней созданной

tmux attach -t session1 // подключение к сессии session1

Выбрать сессию

<C-b s>

Завершение сессии

tmux kill-session -t session1

Завершить все сессии

tmux kill-server

Список поддерживаемых комманд

tmux list-commands

Сохранение сессии

nano ~/bin/tmux-session
#!/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 save

Данные будут писаться в файл ~/.tmux-session

Восстановить сессию:

tmux-session restore

Улучшения

https://github.com/gpakosz/.tmux

К началу