tmux to terminalowy multiplekser - program, który w jednym oknie terminala trzyma wiele sesji, okien i paneli, a przede wszystkim pozwala odłączyć się od uruchomionego procesu i wrócić do niego później. Najważniejsza zaleta: zamykasz laptopa albo rozłączasz SSH, a program dalej działa na serwerze. Podstawa: tmux new -s praca tworzy sesję, Ctrl-b d ją odłącza, tmux attach -t praca wraca do niej.
Do czego służy tmux
tmux rozwiązuje trzy konkretne problemy, które zna każdy, kto pracuje w terminalu na serwerze.
Pierwszy to trwałość sesji. Uruchamiasz długi proces - backup, migrację bazy, trening modelu, npm run build - i nie chcesz, żeby padł, gdy zerwie się połączenie SSH albo uśpisz komputer. W tmux proces żyje w sesji na serwerze, niezależnie od Twojego terminala. Odłączasz się, łączysz z innego miejsca i podpinasz z powrotem do tej samej pracy.
Drugi to podział ekranu. Zamiast otwierać pięć zakładek terminala, dzielisz jedno okno na panele: w lewym edytor, w prawym logi, na dole serwer deweloperski. Wszystko w jednej sesji, którą można zapisać układem.
Trzeci to praca zdalna wielu osób lub agentów. Do jednej sesji tmux może podpiąć się kilka klientów naraz - widzą to samo. To standardowy sposób na pokazanie komuś terminala albo na monitorowanie procesu, który steruje sam sobą.
tmux jest następcą starszego GNU Screena - robi to samo, ale ma czytelniejszą konfigurację, panele i aktywny rozwój. Jeśli znasz screen, przesiadka jest kwestią jednego wieczoru.
Instalacja
tmux jest w repozytoriach każdej popularnej dystrybucji i w Homebrew na macOS.
| System | Komenda |
|---|---|
| Debian / Ubuntu | sudo apt install tmux |
| Fedora / RHEL | sudo dnf install tmux |
| Arch | sudo pacman -S tmux |
| macOS (Homebrew) | brew install tmux |
Wersję sprawdzisz przez tmux -V. Na Windowsie tmux nie działa natywnie - używasz go wewnątrz WSL (Windows Subsystem for Linux) albo przez SSH na serwerze z Linuksem.
Model tmux: sesje, okna, panele i prefiks
Zanim przejdziesz do komend, musisz zrozumieć hierarchię - inaczej skróty się nie ułożą w głowie.
- Sesja to najwyższy poziom. Jedna sesja = jeden zestaw pracy, który możesz odłączyć i przywrócić. Nazywasz ją, żeby łatwo wracać (
praca,backup,serwer). - Okno to jak zakładka wewnątrz sesji. Jedna sesja ma wiele okien, przełączasz się między nimi.
- Panel to podział pojedynczego okna na kafle. W jednym oknie możesz mieć edytor obok logów.
Kluczowa rzecz, która myli początkujących: prawie każda komenda w tmux zaczyna się od prefiksu. Domyślnie to Ctrl-b. Naciskasz Ctrl-b, puszczasz, a potem wciskasz kolejny klawisz. Zapis Ctrl-b c znaczy: Ctrl-b, puść, potem c. To nie jest akord trzymany jednocześnie.
Wielu użytkowników zmienia prefiks na Ctrl-a (jak w Screenie), bo jest wygodniejszy pod lewym kciukiem - pokażę to niżej w konfiguracji.
Zarządzanie sesjami
Sesje to serce tmux - reszta to szczegóły. Te komendy wpisujesz w zwykłym terminalu ($) albo w trybie komend tmux (:).
| Akcja | Komenda |
|---|---|
| Nowa sesja | tmux lub tmux new |
| Nowa sesja z nazwą | tmux new -s praca |
| Nowa albo podłącz istniejącą | tmux new-session -A -s praca |
| Odłącz się od sesji | Ctrl-b d |
| Lista sesji | tmux ls |
| Podłącz do ostatniej sesji | tmux attach |
| Podłącz do konkretnej sesji | tmux attach -t praca |
| Zmień nazwę sesji | Ctrl-b $ |
| Podgląd wszystkich sesji | Ctrl-b s |
| Zabij sesję | tmux kill-session -t praca |
| Zabij wszystkie oprócz bieżącej | tmux kill-session -a |
Typowy przepływ pracy wygląda tak: tmux new -s deploy, uruchamiasz długą komendę, wciskasz Ctrl-b d żeby się odłączyć, wylogowujesz z SSH. Proces działa dalej. Wracasz następnego dnia, ssh serwer, tmux attach -t deploy i widzisz wynik. Nic nie przepadło.
Jeśli chcesz, żeby jedna komenda zawsze trafiała do tej samej sesji niezależnie od tego, czy już istnieje, użyj tmux new-session -A -s nazwa - podłączy istniejącą albo utworzy nową.
Okna
Okna to zakładki wewnątrz sesji. Zarządzasz nimi prefiksem.
| Akcja | Skrót |
|---|---|
| Nowe okno | Ctrl-b c |
| Następne okno | Ctrl-b n |
| Poprzednie okno | Ctrl-b p |
| Okno po numerze | Ctrl-b 0 ... Ctrl-b 9 |
| Lista okien | Ctrl-b w |
| Zmień nazwę okna | Ctrl-b , |
| Zamknij okno | Ctrl-b & |
| Ostatnie aktywne okno | Ctrl-b l |
W praktyce dzielisz pracę na okna tematycznie: okno edytor, okno serwer, okno git. Nazwane okna (Ctrl-b ,) czytają się w pasku na dole dużo lepiej niż numery.
Panele
Panele dzielą jedno okno na kafle - najbardziej efektowna część tmux.
| Akcja | Skrót |
|---|---|
| Podział pionowy (obok siebie) | Ctrl-b % |
| Podział poziomy (jeden pod drugim) | Ctrl-b " |
| Przejdź do panelu w danym kierunku | Ctrl-b ↑ ↓ ← → |
| Następny panel | Ctrl-b o |
| Pokaż numery paneli | Ctrl-b q |
| Powiększ / przywróć panel (zoom) | Ctrl-b z |
| Zamień panel na osobne okno | Ctrl-b ! |
| Zamknij panel | Ctrl-b x |
| Przełącz układ paneli | Ctrl-b Spacja |
Dwie sztuczki, których używam codziennie. Ctrl-b z powiększa bieżący panel na całe okno i tym samym skrótem wraca do układu - świetne, gdy chcesz na chwilę rozwinąć logi. A Ctrl-b q pokazuje numery paneli, więc od razu wiesz, gdzie jesteś.
Uwaga na setw synchronize-panes on - włącza wysyłanie tych samych klawiszy do wszystkich paneli w oknie naraz. Bywa przydatne przy zarządzaniu kilkoma serwerami jednocześnie, ale łatwo o pomyłkę, więc wyłączaj je od razu po użyciu (setw synchronize-panes off).
Tryb kopiowania (copy mode)
Domyślnie w tmux nie przewiniesz ekranu myszką tak, jak w zwykłym terminalu - trzeba wejść w tryb kopiowania.
| Akcja | Skrót |
|---|---|
| Wejdź w tryb kopiowania | Ctrl-b [ |
| Wyjdź z trybu | q |
| Rozpocznij zaznaczanie | Spacja |
| Skopiuj zaznaczenie | Enter |
| Wklej bufor | Ctrl-b ] |
| Tryb klawiszy vi w buforze | setw -g mode-keys vi |
W trybie kopiowania przewijasz strzałkami i PgUp/PgDn, a jeśli włączysz mode-keys vi, poruszasz się jak w Vimie. To ratuje, gdy chcesz wrócić do wyniku komendy, który zniknął za ekranem.
Konfiguracja: plik .tmux.conf
Domyślny tmux jest surowy. Kilka linii w pliku ~/.tmux.conf zmienia go w wygodne narzędzie. Po edycji przeładuj konfigurację przez Ctrl-b : i source-file ~/.tmux.conf.
# Zmień prefiks z Ctrl-b na Ctrl-a (wygodniejszy)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Włącz obsługę myszy (przewijanie, klikanie w panele)
set -g mouse on
# Numeruj okna i panele od 1, nie od 0
set -g base-index 1
setw -g pane-base-index 1
# Więcej historii przewijania
set -g history-limit 10000
# Klawisze vi w trybie kopiowania
setw -g mode-keys vi
# Szybkie przeładowanie konfiguracji: prefiks + r
bind r source-file ~/.tmux.conf \; display "Przeładowano ~/.tmux.conf"
Te ustawienia to rozsądny start. mouse on jest największym ułatwieniem dla początkujących - pozwala przewijać i zmieniać rozmiar paneli myszką, zanim opanujesz skróty.
tmux cheatsheet - najważniejsze komendy w jednym miejscu
Ściąga do wydrukowania albo przypięcia obok terminala. Prefiks to domyślnie Ctrl-b.
Sesje
tmux new -s nazwa |
nowa nazwana sesja |
|---|---|
Ctrl-b d |
odłącz sesję |
tmux attach -t nazwa |
podłącz sesję |
tmux ls |
lista sesji |
tmux kill-session -t nazwa |
zabij sesję |
Okna
Ctrl-b c |
nowe okno |
|---|---|
Ctrl-b n / Ctrl-b p |
następne / poprzednie |
Ctrl-b , |
zmień nazwę |
Ctrl-b w |
lista okien |
Panele
Ctrl-b % |
podział pionowy |
|---|---|
Ctrl-b " |
podział poziomy |
Ctrl-b o |
następny panel |
Ctrl-b z |
zoom panelu |
Ctrl-b x |
zamknij panel |
Reszta
Ctrl-b [ |
tryb kopiowania |
|---|---|
Ctrl-b : |
tryb komend |
Ctrl-b ? |
lista wszystkich skrótów |
tmux -V |
wersja tmux |
Pełną listę skrótów w każdej chwili wyświetli Ctrl-b ? - to najlepsza ściąga, bo zawsze aktualna wobec Twojej konfiguracji.
Typowe zastosowania
Długie procesy przez SSH. Najczęstszy powód, dla którego ludzie sięgają po tmux. Backup, rsync dużego katalogu, migracja bazy - wszystko, co trwa dłużej niż sesja SSH. Uruchamiasz w tmux, odłączasz, śpisz spokojnie.
Środowisko deweloperskie. Jedna sesja, kilka paneli: serwer aplikacji, watcher testów, konsola bazy, wolny terminal na komendy. Zamykasz laptopa, rano tmux attach i wszystko stoi tam, gdzie było.
Monitoring i praca z agentami. Do jednej sesji można podpiąć kilku klientów, a proces w panelu można obserwować z zewnątrz przez tmux capture-pane. To standardowy sposób na nadzorowanie długo działających skryptów albo automatyzacji, które trzeba doglądać.
FAQ
Czym różni się tmux od GNU Screen? Robią to samo - trzymają sesje niezależne od terminala. tmux jest nowszy, ma panele, czytelniejszą konfigurację i aktywny rozwój. Screen bywa domyślnie obecny na starszych serwerach, ale nowe projekty stawiają na tmux.
Jak wyjść z tmux, nie zabijając procesu?
Ctrl-b d - to odłączenie (detach). Sesja i procesy działają dalej, Ty wracasz do zwykłego terminala. tmux attach podpina z powrotem.
Czym różni się detach od kill?
Detach (Ctrl-b d) odłącza Cię, ale sesja żyje. Kill (tmux kill-session) niszczy sesję razem z procesami. Do codziennej pracy używasz detach.
Prefiks Ctrl-b jest niewygodny - da się zmienić?
Tak. W ~/.tmux.conf przemapujesz go na Ctrl-a (jak w Screenie) trzema liniami z sekcji o konfiguracji wyżej.
Czy tmux działa na Windowsie? Nie natywnie. Używasz go w WSL albo przez SSH na Linuksie. Alternatywą na czysty Windows jest Windows Terminal z zakładkami, ale nie daje trwałości sesji.
Nie mogę przewinąć ekranu myszką - dlaczego?
Domyślnie mysz jest wyłączona. Wejdź w tryb kopiowania (Ctrl-b [) i przewijaj strzałkami, albo dodaj set -g mouse on do konfiguracji.