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+bsam 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).