tmux есть мултиплексор терминалов. Не понятно? Да мне тоже не понятно. Короче, человеческим языком, tmux используется для того, чтобы внутри одного терминала вы могли пользоваться несколькими терминалами (что-то вроде эмуляции). Мы поставили тебе терминал внутрь терминала, чтобы ты мог пользоваться терминалом, пока пользуешься терминалом. Простите.

Когда такое бывает полезно, спросите вы? Например, когда вы коннектитесь к удаленной машине по SSH, с мультиплексором можно вполне так эмулировать многозадачность, утилизируя только одно SSH-соединение.

Но, это еще не все. tmux внутри каждого своего терминала полностью помнит состояние. И если у вас вдруг произошел разрыв с ноября прошлого года, то с tmux вам не придется подключаться снова к серверу в 10 вкладках и в 10 вкладках снова запускать прибитые процессы, вроде mc, less, какого-нибудь консольного клиента mongo… да что угодно. При разрыве все так и останется крутиться в tmux.

Особо матерые батьки вспомнят тут screen, да, была такая штука. Но tmux посовременнее и обладает более богатой функциональностью, поэтому лучше трогать будем его.

Ставим-пробуем

Давайте сходим на свой любимый сервер и поставим там tmux:

ssh detr.us
sudo apt-get install tmux

Далее для тренировки давайте запустим tmux, сделаем в нем что-то, просимулируем разрыв, перезайдем на сервер и подцепимся к tmux обратно. Начнем:

tmux

Быстрый старт tmux + iTerm2

Мы видим нечто, что называется tmux. Давайте запустим что-то бесполезное.

watch date

Итак, мы смотрим время (бред какой). Теперь закроем терминал, будто у нас все пропало, открываем новый терминал и делаем следующее:

ssh detr.us
tmux attach

Быстрый старт tmux + iTerm2

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

В общем, самым простым вещам мы научились. Добавлю лишь, что детач от текущего tmux можно еще делать комбинацией Ctrl + b, d. Дальше – больше.

Оооо, iTerm2, великий!

Да, iTerm2 в этой заметке неспроста. Дело в том, что iTerm2 умеет просто ну очень круто интегрироваться с tmux. Чем же это поможет? Тем, что окна (в терминологии мультиплексора) tmux можно отображать как вкладки в iTerm2. Помимо этого у вас пропадают проблемы со скроллом и появляется очень легкая возможность создавать новые окна tmux простым нажатием Cmd + t (то есть как вкладки).

Предварительно я бы рекомендовал настроить iTerm2 следующим образом (обратите внимание на раздел tmux справа внизу):

Быстрый старт tmux + iTerm2

Итак, пробуем интеграцию iTerm2 с tmux командой:

tmux -CC attach

Быстрый старт tmux + iTerm2

И вот мы снова видим нашу пресловутую дату. Нажмем Cmd + t и откроем какой-нибудь мануал в другом tmux-окне.

man find

Повторяем симуляцию разрыва: безжалостно закрываем iTerm2. Снова идем на сервер и коннектимся к существующей сессии tmux:

ssh detr.us
tmux -CC attach

Символ стрелочки, расположенный на вкладках iTerm2 говорит нам о том, что эти вкладки – окна tmux.

Быстрый старт tmux + iTerm2

И видим, что наша рабочая сессия на удаленном сервере полностью восстановлена. По-моему, это просто прекрасно!

tmux cheat sheet и горячие клавиши

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

Сессии

Действие Команда
Новая сессия tmux
Список сессий tmux ls
Приаттачиться к сессии tmux attach
Приаттачиться к сессии с детачем других коннектов tmux attach -d
Детач от сессии Ctrl + b, d

Окна

Действие Команда
Новое окно Ctrl + b, c
Список окон Ctrl + b, w
Перейти к окну номер 0-9 Ctrl + b, 0-9
Переименовать окно Ctrl + b, ,
Закрыть окно Ctrl + b, x

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

На этом, наверное, все. Дай бог вам ни единого разрыва!

Ссылки

  1. Сайт tmux
  2. Сайт iTerm2
  3. Страница о состоянии интеграции iTerm с tmux