Slovník pojmů

tmux

tmux organizuje několik textových programů v sessions, windows a panes a odděluje jejich běh od jednoho připojeného terminálu. Hodí se pro interaktivní práci a diagnostiku, nikoli jako správce produkčních služeb.

Stručná definice

Terminálový multiplexer mezi uživatelem a spuštěnými programy

tmux běží na počítači, kde jsou spuštěné také shelly a další programy v jeho panes. Jeden klient zobrazuje vybranou session ve vnějším terminálu a předává jí vstup. tmux není shell: shell interpretuje příkazy, zatímco tmux spravuje pseudo-terminály, rozložení a připojené klienty.

Při práci na vzdáleném Linuxovém serveru se tmux často kombinuje s SSH. Odpojení nebo výpadek SSH ukončí vnějšího klienta, ale tmux server a session na vzdáleném stroji mohou pokračovat. Tato odolnost platí jen po dobu běhu stroje a tmux serveru; neznamená zachování procesů po restartu systému.

Jaký problém řeší

Více programů v jednom terminálu a návrat k rozpracované relaci

Bez multiplexeru je každý interaktivní program úzce spojený s konkrétním terminálovým připojením. tmux mezi ně vloží vlastní server, takže klient lze odpojit a později připojit znovu, případně zobrazit několik programů současně.

  • sledování aplikačního logu vedle stavu služby a fronty zpráv
  • oddělení editoru, testů a vývojového serveru do samostatných windows
  • návrat k dlouhému interaktivnímu příkazu po krátkém výpadku SSH spojení
  • rozdělení jedné obrazovky do panes bez otevírání dalších terminálových oken
  • vědomé připojení více klientů ke stejné session při společné diagnostice

Praktický příklad

Tři pohledy na stav vzdálené aplikace

Vývojář se připojí přes SSH a příkazem new-session s volbou -A vytvoří session support, nebo se připojí k již existující. V prvním pane sleduje log PHP-FPM. Výchozím prefixem Ctrl-b a klávesou % rozdělí okno pro stav workeru; Ctrl-b c vytvoří další window pro kontrolu fronty.

Názvy služeb a dostupné Symfony příkazy jsou pouze dokumentační příklad a musí odpovídat konkrétnímu projektu. Ctrl-b d odpojí klienta bez ukončení session. Později lze použít tmux attach -t support. Worker samotný má stále spravovat service manager nebo kontejnerová vrstva, ne ručně otevřený pane.

Shell

ssh deploy@app.example.cz
tmux new -As support

# pane 1: průběžný log
journalctl -u php8.4-fpm -f

# další pane: průběžný stav workeru
watch -n 5 'systemctl --no-pager --full status app-worker.service'

# další window: stav fronty aplikace
cd /srv/app
php bin/console messenger:stats

Jak funguje

Klient zobrazuje stav, který spravuje tmux server

Textový diagram: terminál nebo SSH klient → tmux klient → tmux server → session → windows → panes → shell či jiný program. Odpojení klienta přeruší první část řetězce, ne automaticky programy spravované serverem.

  1. Vnější terminál a klient Příkaz tmux spustí klienta, který převezme aktuální terminál, připojí se k tmux serveru přes lokální socket a zobrazí jednu session.
  2. tmux server Proces na daném stroji drží stav sessions, windows a panes, spravuje pseudo-terminály a uchovává jejich výstup nezávisle na jednom klientovi. Více pojmenovaných socketů může představovat více samostatných tmux serverů.
  3. Session Pojmenovaná relace sdružuje seznam windows a může být připojená k jednomu, více nebo žádnému klientovi. Detach z ní neudělá systémovou službu; pouze ji ponechá bez zobrazení.
  4. Window Window je virtuální obrazovka session. Uživatel se mezi windows přepíná a každé může mít vlastní jméno, rozložení a spuštěné programy.
  5. Pane a program Pane je obdélníková část window s vlastním pseudo-terminálem. Běžně v něm běží shell, ale lze přímo spustit editor, logovací příkaz nebo jiný textový program.

Hlavní části a ovládání

Session, window a pane popisují tři různé úrovně

Přesná terminologie usnadňuje cílit příkazy a pochopit, co se při zavření nebo odpojení skutečně ukončí.

Server a socket

tmux server se obvykle spustí automaticky s první session a klienti s ním komunikují lokálním Unix socketem. Výchozí socketový adresář je chráněný pro konkrétního uživatele; přístup k socketu znamená možnost ovládat příslušné sessions.

Session

Session má unikátní jméno a vlastní aktuální window. Příkaz tmux new -As support se k existující session support připojí, nebo ji vytvoří. tmux ls vypíše dostupné sessions.

Window

Window sdružuje jeden nebo více panes a obvykle zabírá celou plochu klienta. Výchozí Ctrl-b c vytvoří nové window, Ctrl-b n a Ctrl-b p přepínají na následující a předchozí.

Pane

Každý pane má vlastní pseudo-terminál a program. Výchozí Ctrl-b % rozdělí plochu na levou a pravou část, Ctrl-b s dvojitou uvozovkou na horní a dolní část. Rozdělení nemění povahu procesů uvnitř.

Prefix

Výchozí Ctrl-b říká tmux, že další klávesa patří multiplexeru, ne programu v aktivním pane. Konfigurace může prefix změnit, proto týmový návod nemá bez ověření předpokládat vlastní zkratky autora.

Attach a detach

Ctrl-b d odpojí aktuální klient. tmux attach -t support se k session znovu připojí. Odpojení nezastaví programy, dokud jejich pane, window, session nebo celý tmux server neskončí.

tmux, shell a terminál

Terminál zobrazuje textový vstup a výstup, shell interpretuje příkazy a tmux multiplexuje několik pseudo-terminálů do jednoho klienta. V běžném použití jsou zanořené, ale nejde o tři názvy stejné věci.

Výhody a omezení

Pohodlná interaktivní relace nenahrazuje provozní dohled

Přínosy

  • více shellů a textových programů lze organizovat bez dalších grafických oken
  • rozpracovaná session běžně pokračuje po odpojení nebo výpadku SSH klienta
  • windows a panes dovolují sledovat několik částí diagnostiky současně
  • pojmenovanou session lze znovu najít a připojit z jiného terminálu
  • ovládání a rozložení lze přizpůsobit verzovanou konfigurací

Omezení a časté chyby

  • restart stroje, ukončení tmux serveru nebo hostitelská politika může ukončit všechny sessions a procesy
  • tmux neposkytuje restart policy, health check, řízené oprávnění služby ani centralizované logování
  • příliš mnoho dlouho otevřených sessions zhoršuje orientaci a může držet zastaralé proměnné prostředí
  • uživatel s přístupem k session může vidět výstup a ovládat programy včetně citlivých příkazů
  • vlastní prefix a množství zkratek mohou ztížit práci na cizím stroji nebo ve vnořeném tmuxu

Praktické použití

Interaktivní vývoj a diagnostika, ne životní cyklus služby

tmux se hodí při práci přes SSH, při lokálním vývoji v terminálu a při krátkodobé diagnostice, kdy je užitečné mít vedle sebe log, stav procesu a kontrolní příkaz. Session má mít srozumitelné jméno a po dokončení zásahu nemá zůstat bez vlastníka s citlivým výstupem nebo zbytečně běžícími programy.

Dlouhodobý PHP worker, fronta nebo webový proces má běžet jako řízená služba či kontejner. Docker může procesu zajistit izolované prostředí a restart policy platformy, zatímco systemd spravuje systémovou službu; tmux pouze poskytuje interaktivní terminály. Ani jeden z těchto nástrojů sám nenahrazuje monitoring a správný návrh aplikace.

Bezpečnost a provoz

Session je živé pracovní prostředí se stejnými právy jako její uživatel

V historii obrazovky, shellu i proměnných procesu mohou zůstat citlivé údaje. Připojení dalšího klienta proto není jen sdílení obrazovky, ale také přístup k ovládání běžících programů.

  • nesdílet tmux socket ani uživatelský účet s lidmi, kteří nemají mít stejná oprávnění
  • nevypisovat secrets do příkazové řádky, logu nebo dlouho uchovávané historie pane
  • před připojením ke sdílené session ověřit její účel a počítat se společným vstupem do aktivního pane
  • produkční služby spouštět přes service manager nebo kontejnerovou platformu, ne přes ručně odpojenou session
  • po restartu neočekávat automatické pokračování procesů; případné nástroje pro obnovu rozložení nejsou obnovou aplikačního stavu
  • nepotřebné sessions ukončit řízeně a před ukončením zkontrolovat, které programy a windows zaniknou

Časté otázky

tmux při vývoji a práci na serveru

Je tmux shell?

Ne. tmux spravuje pseudo-terminály, sessions, windows a panes. Shell je jeden z programů, které může uvnitř spustit, stejně jako editor, monitorovací nástroj nebo jiný příkaz.

Přežije tmux odpojení SSH?

Obvykle ano. Odpojí se SSH a tmux klient, zatímco server a session dál běží na vzdáleném stroji. Záleží však také na provozní politice hostitele a na tom, zda někdo tmux server nebo session neukončí.

Přežije tmux restart celého serveru?

Ne sám o sobě. Restart ukončí tmux server i programy v panes. Doplňky mohou obnovit část rozložení nebo spouštěných příkazů, ale nezachovají automaticky skutečný stav procesů.

Kdy použít systemd místo tmux?

Pro dlouhodobé produkční služby, které potřebují automatický start, restart policy, omezená oprávnění, logování a dohled. tmux je určený hlavně pro interaktivní práci a dočasnou diagnostiku.

Lze jednu tmux session sdílet?

Ano, k jedné session se může připojit více klientů. Je to vhodné jen vědomě, protože připojení lidé mohou vidět výstup a podle přístupového režimu ovládat stejné programy.

Jak pracuji v terminálu

Interaktivní diagnostiku odděluji od trvalého běhu aplikace.

tmux používám jako pracovní prostředí pro přehlednou práci na serveru, zatímco služby, workery a jejich obnovu nechávám řízené provozní vrstvě.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.