screen и tmux: основы
Очень коротко
Если работаешь на удаленных серверах по ssh и еще не используешь ни screen
, ни tmux
– изучи эти программы (или одну из них) и попробуй использовать.
Станет удобнее!
Что делают и зачем нужны screen и tmux
Программы screen
и tmux
выполняют такие главные работы:
- Из одного текстового окна терминала делают несколько.
- (самое главное) Поддерживают сессию, от которой можно отключиться и подключиться заново, и которая продолжит существовать, даже если отлогиниться от машины.
- scrollback: сохраняют историю вывода команд и позволяют ее просматривать (в этой заметке скроллбек рассматривать не будем).
Если по этому описанию не очень понятно, что все-таки происходит – попробуй инструкцию из раздела “Понаблюдать поведение”, должно стать яснее.
screen
и tmux
полезны и для интерактивного использования, и для скриптов.
В первую очередь они хороши для работы на удаленных серверах, но и на локальных машинах тоже пригождаются.
Сущности и команды внутри screen и tmux
Сущности:
- сессия – то, что занимает один терминал
- на одной машине (сервере) может быть запущено много
screen
- и/илиtmux
-сессий - внутри одной сессии много окон
- в каждом окне запускается свой шелл
Команды:
внутри screen
-а и tmux
-а действуют команды в духе Ctrl-A c
.
Такая запись означает: нажать Ctrl
, нажать a
, отпустить Ctrl
и a
; потом нажать c
.
У screen
команды по умолчанию начинаются с Ctrl-A
, у tmux
– с Ctrl-B
. Это называется “управляющая комбинация”.
Управляющую комбинацию можно поменять в конфиге (но в этой заметке конфигурирование не рассматриваем).
Понаблюдать поведение
tmux локально
- Запусти
tmux
:tmux
- Переименуй окно:
Ctrl-B ,
(Ctrl-B
и потом запятая)
Появится приглашение ввести новое имя окна. Введи небольшую строку, напримерFirst
, и затемEnter
. - Запусти какую-нибудь команду:
ls -l /
- Создай второе окно:
Ctrl-B c
Обрати внимание, что в нижней строке теперь видно 2 окна - Переименуй второе окно:
Ctrl-B ,
- Запусти какую-нибудь другую команду:
ps auxww
- Переключись на первое (нулевое) окно:
Ctrl-B 0
- Посмотри список окон:
Ctrl-B w
- Отсоединись от сессии:
Ctrl-B d
- Посмотри список
tmux
-сессий, запущенных на машине:tmux ls
- Подключиcь к сессии по ее имени (см. в списке в предыдущем пункте):
tmux attach -t <name>
tmux на удаленной машине
- Зайди ssh-ем на удаленную машину
- Запусти
tmux
- Запусти какую-нибудь команду, например
top
- Отсоединись от сессии (
Ctrl-B d
) - Закрой соединение с сервером
- Снова зайди ssh-ем на ту же машину
- Посмотри список
tmux
-сессий, найди свою из п. 2 - Подключись к
tmux
-сессии (tmux attach -t <name>
)
Обрати внимание, что команда из п.3 продолжала выполняться несмотря на то, что твое соединение с сервером прекращалось.
Эта персистентность сессии – главное удобство, которое приносят tmux
и screen
при работе на удаленных серверах.
screen локально
- Подготовь конфиг: запиши в файл
~/.screenrc
настройки:hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<" defscrollback 500000 vbell off
- Запусти
screen
:screen
- Переименуй окно:
Ctrl-A Shift-A
- Запусти какую-нибудь команду:
ls -l /
- Создай второе окно:
Ctrl-A c
- Переименуй второе окно:
Ctrl-A Shift-A
- Запусти какую-нибудь другую команду:
ps auxww
- Переключись на первое (нулевое) окно:
Ctrl-A 0
- Посмотри список окон:
Ctrl-A "
- Отсоединись от сессии:
Ctrl-A d
- Посмотри список
screen
-сессий на машине:screen -list
- Подключись к сессии по имени (см. в списке в предыдущем пункте):
screen -r <name>
screen на удаленной машине
Аналогично локальной машине, а входы-выходы на удаленную машину – аналогично примеру с tmux
.
Типичное использование
Заходим на удаленный сервер, запускаем tmux
или screen
, работаем, отключаемся от tmux
/screen
сессии, закрываем соединение с сервером.
Снова подключаемся к серверу, подключаемся к tmux
/screen
сессии, продолжаем работать.
И так далее.
В чем разница между screen и tmux
screen
появился на 20 лет раньше tmux
-а: 1987 год против 2007.
tmux
удобнее использовать в скриптах, умолчальные настройки у него приятнее (например, показывает список окон),
распространяется под более разрешающей лицензией.
screen
доступен для экзотических платформ вроде HP-UX;
а из-за того, что появился раньше, может быть шире распространился по дистрибутивам и серверам (но статистики у меня нет).
Ссылки
- https://tmuxcheatsheet.com/ – шпаргалка по командам
tmux
(англ.) - https://kapeli.com/cheat_sheets/screen.docset/Contents/Resources/Documents/index – шпаргалка по командам
screen
(англ.) - https://newbedev.com/tmux-vs-gnu-screen – сравнение
screen
иtmux
(англ.)