...

Очень коротко

Если работаешь на удаленных серверах по ssh и еще не используешь ни screen, ни tmux – изучи эти программы (или одну из них) и попробуй использовать. Станет удобнее!

Что делают и зачем нужны screen и tmux

Программы screen и tmux выполняют такие главные работы:

  1. Из одного текстового окна терминала делают несколько.
  2. (самое главное) Поддерживают сессию, от которой можно отключиться и подключиться заново, и которая продолжит существовать, даже если отлогиниться от машины.
  3. scrollback: сохраняют историю вывода команд и позволяют ее просматривать (в этой заметке скроллбек рассматривать не будем).

Если по этому описанию не очень понятно, что все-таки происходит – попробуй инструкцию из раздела “Понаблюдать поведение”, должно стать яснее.

screen и tmux полезны и для интерактивного использования, и для скриптов. В первую очередь они хороши для работы на удаленных серверах, но и на локальных машинах тоже пригождаются.

Сущности и команды внутри screen и tmux

Сущности:

  • сессия – то, что занимает один терминал
  • на одной машине (сервере) может быть запущено много screen- и/или tmux-сессий
  • внутри одной сессии много окон
  • в каждом окне запускается свой шелл

Команды: внутри screen-а и tmux-а действуют команды в духе Ctrl-A c. Такая запись означает: нажать Ctrl, нажать a, отпустить Ctrl и a; потом нажать c.

У screen команды по умолчанию начинаются с Ctrl-A, у tmux – с Ctrl-B. Это называется “управляющая комбинация”. Управляющую комбинацию можно поменять в конфиге (но в этой заметке конфигурирование не рассматриваем).

Понаблюдать поведение

tmux локально

  1. Запусти tmux: tmux
  2. Переименуй окно: Ctrl-B , (Ctrl-B и потом запятая)
    Появится приглашение ввести новое имя окна. Введи небольшую строку, например First, и затем Enter.
  3. Запусти какую-нибудь команду: ls -l /
  4. Создай второе окно: Ctrl-B c
    Обрати внимание, что в нижней строке теперь видно 2 окна
  5. Переименуй второе окно: Ctrl-B ,
  6. Запусти какую-нибудь другую команду: ps auxww
  7. Переключись на первое (нулевое) окно: Ctrl-B 0
  8. Посмотри список окон: Ctrl-B w
  9. Отсоединись от сессии: Ctrl-B d
  10. Посмотри список tmux-сессий, запущенных на машине: tmux ls
  11. Подключиcь к сессии по ее имени (см. в списке в предыдущем пункте): tmux attach -t <name>

tmux на удаленной машине

  1. Зайди ssh-ем на удаленную машину
  2. Запусти tmux
  3. Запусти какую-нибудь команду, например top
  4. Отсоединись от сессии (Ctrl-B d)
  5. Закрой соединение с сервером
  6. Снова зайди ssh-ем на ту же машину
  7. Посмотри список tmux-сессий, найди свою из п. 2
  8. Подключись к tmux-сессии (tmux attach -t <name>)

Обрати внимание, что команда из п.3 продолжала выполняться несмотря на то, что твое соединение с сервером прекращалось. Эта персистентность сессии – главное удобство, которое приносят tmux и screen при работе на удаленных серверах.

screen локально

  1. Подготовь конфиг: запиши в файл ~/.screenrc настройки:
    hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"
    defscrollback 500000
    vbell off
    
  2. Запусти screen: screen
  3. Переименуй окно: Ctrl-A Shift-A
  4. Запусти какую-нибудь команду: ls -l /
  5. Создай второе окно: Ctrl-A c
  6. Переименуй второе окно: Ctrl-A Shift-A
  7. Запусти какую-нибудь другую команду: ps auxww
  8. Переключись на первое (нулевое) окно: Ctrl-A 0
  9. Посмотри список окон: Ctrl-A "
  10. Отсоединись от сессии: Ctrl-A d
  11. Посмотри список screen-сессий на машине: screen -list
  12. Подключись к сессии по имени (см. в списке в предыдущем пункте): screen -r <name>

screen на удаленной машине

Аналогично локальной машине, а входы-выходы на удаленную машину – аналогично примеру с tmux.

Типичное использование

Заходим на удаленный сервер, запускаем tmux или screen, работаем, отключаемся от tmux/screen сессии, закрываем соединение с сервером. Снова подключаемся к серверу, подключаемся к tmux/screen сессии, продолжаем работать. И так далее.

В чем разница между screen и tmux

screen появился на 20 лет раньше tmux-а: 1987 год против 2007.

tmux удобнее использовать в скриптах, умолчальные настройки у него приятнее (например, показывает список окон), распространяется под более разрешающей лицензией.

screen доступен для экзотических платформ вроде HP-UX; а из-за того, что появился раньше, может быть шире распространился по дистрибутивам и серверам (но статистики у меня нет).

Ссылки