tmux

Multiplekser terminala pozwalający prowadzić wiele sesji i okien w jednym terminalu oraz odłączać i wznawiać sesje. Niezbędny przy długich zadaniach na zdalnych serwerach.

tmux (skrót od terminal multiplexer) to program, który pozwala uruchomić wiele wirtualnych terminali wewnątrz jednego okna terminala oraz, co najważniejsze, odłączyć (detach) działającą sesję i wrócić do niej później — nawet po zamknięciu emulatora terminala czy rozłączeniu SSH. Procesy uruchomione w sesji nie giną, bo tmux trzyma je w tle jako oddzielny serwer.

Działa to tak: tmux startuje proces-serwer, który zarządza Twoimi sesjami. Każda session może zawierać wiele windows (jak zakładki), a każde okno można podzielić na panes (kafelki widoczne jednocześnie na jednym ekranie). Klient tmux jedynie wyświetla to, co dzieje się na serwerze, więc gdy go odłączysz i podłączysz ponownie, wszystko czeka w tym samym stanie. Sterujesz tym przez tzw. prefix — domyślnie Ctrl+b, po którym wciskasz kolejny klawisz (np. c tworzy okno, " dzieli pane poziomo, % pionowo).

Po co Ci to w praktyce

Klasyczny scenariusz: logujesz się przez SSH na serwer i odpalasz długą migrację bazy albo build, który trwa 40 minut. Bez tmux wystarczy, że padnie Wi-Fi, a proces zginie razem z sesją SSH. Z tmux robisz tmux new -s deploy, uruchamiasz zadanie, a potem odłączasz sesję skrótem Ctrl+b d. Możesz spokojnie zamknąć laptopa. Po powrocie logujesz się znowu i wpisujesz tmux attach -t deploy — proces dalej mieli, a Ty widzisz cały jego output. Listę sesji sprawdzisz przez tmux ls.

Częste pułapki

  • Mit „tmux zachowa procesy po restarcie serwera”. Nie. Restart maszyny zabija serwer tmux i wszystkie sesje. Trwałość dotyczy tylko rozłączenia klienta, nie wyłączenia sprzętu.
  • Mylenie z screen. To starszy, podobny multiplekser. tmux jest aktywniej rozwijany, ma czytelniejszą konfigurację (~/.tmux.conf) i lepszy podział na panes.
  • Prefix to nie skrót. Ctrl+b sam nic nie robi — to sygnał „uwaga, następny klawisz jest dla tmux”. Wielu początkujących wkleja komendy w panikę, bo zapomina puścić prefiksu.
  • Zagnieżdżanie. tmux w tmux (np. lokalny i zdalny) potrafi namieszać z prefiksem — wtedy używasz Ctrl+b Ctrl+b, by trafić do wewnętrznej sesji.

Pojęcia powiązane: screen (alternatywny multiplekser), SSH (zdalny dostęp), nohup i disown (inny sposób na odporność procesów na rozłączenie), session, window, pane, tmuxinator (zarządzanie predefiniowanymi układami sesji).