Artykuł Serwery

tmux - co to jest, komendy i zarządzanie sesjami (cheatsheet)

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.