Быстрый старт tmux + iTerm2
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
. Давайте запустим что-то бесполезное.
watch date
Итак, мы смотрим время (бред какой). Теперь закроем терминал, будто у нас все пропало, открываем новый терминал и делаем следующее:
ssh detr.us
tmux attach
И вот, мы подцепились к своей существующей tmux
-сессии и снова наблюдаем время… То есть буквально полностью восстановили свое рабочее окружение, бесцеремонно закрытое нами же выше.
В общем, самым простым вещам мы научились. Добавлю лишь, что детач от текущего tmux
можно еще делать комбинацией Ctrl + b, d. Дальше – больше.
Оооо, iTerm2, великий!
Да, iTerm2 в этой заметке неспроста. Дело в том, что iTerm2 умеет просто ну очень круто интегрироваться с tmux
. Чем же это поможет? Тем, что окна (в терминологии мультиплексора) tmux
можно отображать как вкладки в iTerm2. Помимо этого у вас пропадают проблемы со скроллом и появляется очень легкая возможность создавать новые окна tmux
простым нажатием Cmd + t (то есть как вкладки).
Предварительно я бы рекомендовал настроить iTerm2 следующим образом (обратите внимание на раздел tmux
справа внизу):
Итак, пробуем интеграцию iTerm2 с tmux
командой:
tmux -CC attach
И вот мы снова видим нашу пресловутую дату. Нажмем Cmd + t и откроем какой-нибудь мануал в другом tmux
-окне.
man find
Повторяем симуляцию разрыва: безжалостно закрываем iTerm2. Снова идем на сервер и коннектимся к существующей сессии tmux
:
ssh detr.us
tmux -CC attach
Символ стрелочки, расположенный на вкладках iTerm2 говорит нам о том, что эти вкладки – окна tmux
.
И видим, что наша рабочая сессия на удаленном сервере полностью восстановлена. По-моему, это просто прекрасно!
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. Да и управлять ими через горячие клавиши – сущий ад. Поэтому рассказ про панели я опущу.
На этом, наверное, все. Дай бог вам ни единого разрыва!