Ein Terminal-Multiplexer ist ein virtueller Manager, der mehrere Terminal-Sitzungen innerhalb einer einzigen Verbindung bündelt. Drei Eigenschaften machen das Konzept unverzichtbar: persistente Sessions, die einen abgerissenen SSH-Login überleben, mehrere Windows und Panes in einem einzigen Fenster und das saubere Detach/Attach zwischen Clients. Wer einmal stundenlange Builds, lange Migrationen oder mehrere parallele Logs auf einem Remote-Server begleitet hat, will nie wieder ohne tmux oder screen arbeiten — eine wackelige WLAN-Verbindung kostet sonst die ganze Sitzung.
Was ein Terminal-Multiplexer macht
Ein Terminal-Multiplexer schiebt sich zwischen deinen lokalen Terminal-Emulator und die Shells, die darauf laufen. Statt dass jede Shell direkt am Terminal-Device haengt, sprechen alle Shells mit dem Multiplexer — und der Multiplexer entscheidet, welche davon gerade angezeigt wird. Das öffnet drei Killer-Features auf einen Schlag.
Persistente Sessions sind der wichtigste Gewinn. Der Multiplexer-Prozess läuft als eigener Daemon weiter, auch wenn dein SSH-Client sich verabschiedet — sei es durch Netzwerkabbruch, geschlossenen Laptop oder absichtliches exit. Beim nächsten Login attachst du dich an die laufende Session zurück, und alles ist wie zuvor: laufende Prozesse, Editor-Buffer, halbgetippte Befehle.
Mehrere Windows und Panes ersetzen den Trick, drei oder vier SSH-Sitzungen parallel offen zu halten. In einer einzigen Verbindung hast du nummerierte Windows (wie Browser-Tabs) und kannst Windows in mehrere Panes splitten, um etwa Code-Editor, Logs und einen freien Prompt nebeneinander zu sehen.
Detach und Attach loesen das Sitzungs-Eigentum von der Verbindung. Eine Session läuft erst lokal, dann attachst du sie an einen anderen Client, dann zwei Personen gleichzeitig — die Shell merkt davon nichts.
tmux vs. screen
Beide Werkzeuge loesen dieselbe Aufgabe, sind aber aus verschiedenen Epochen. screen ist der GNU-Veteran von 1987 — auf vielen aelteren Distributionen und manchen kommerziellen Unixen ist er der vorinstallierte Default. tmux kam 2007 dazu, mit klareren Konzepten, BSD-Lizenz und aktiver Pflege.
| Eigenschaft | screen | tmux |
|---|---|---|
| Erstes Release | 1987 | 2007 |
| Konzepte | Windows, weniger strukturiert | Session, Window, Pane (klare Hierarchie) |
| Status-Bar | Optional, sparsam | Integriert, gut konfigurierbar |
| Splits | Vertikal, eingeschraenkt | Horizontal und vertikal, frei kombinierbar |
| Konfiguration | ~/.screenrc | ~/.tmux.conf |
| Plugin-Oekosystem | Klein | Gross (TPM, resurrect, continuum) |
| Default-Prefix | Ctrl+a | Ctrl+b |
| Aktive Entwicklung | Sehr langsam | Aktiv |
Empfehlung für neue Setups ist eindeutig tmux — bessere Konzepte, breitere Plugin-Auswahl, lebendige Community. screen lernst du dann, wenn du auf einem System landest, das tmux nicht mitbringt und du nichts nachinstallieren darfst — etwa eingeschraenkte Jump-Hosts oder alte Enterprise-Boxen.
tmux-Konzepte
tmux ordnet alles in drei Ebenen. Eine Session ist die oberste Einheit — sie überlebt Detach/Attach und enthaelt typischerweise einen kompletten Arbeitskontext (z. B. ein Projekt). Innerhalb einer Session liegen Windows, vergleichbar mit Tabs im Browser. Jedes Window kann in mehrere Panes gesplittet werden, die nebeneinander im Bild stehen und je eine eigene Shell betreiben.
Alle tmux-Tasten gehen über einen Prefix-Key. Default ist Ctrl+b — du druckst zuerst Ctrl+b, lässt los, dann den eigentlichen Befehl. Das verhindert Konflikte mit Shell-Shortcuts, kostet aber zwei Anschlaege pro Aktion. Viele User binden den Prefix in ihrer ~/.tmux.conf auf Ctrl+a (kompatibel zu screen-Gewohnheit) oder auf einen freien Key.
| Ebene | Was es ist | Befehl |
|---|---|---|
| Session | Persistenter Container | tmux new -s name |
| Window | Tab innerhalb der Session | Prefix c |
| Pane | Split innerhalb eines Windows | Prefix " oder Prefix % |
tmux-Basics
Ein erster Durchgang durch die wichtigsten Tasten reicht, um produktiv zu werden. In der folgenden Tabelle steht Prefix jeweils für Ctrl+b (oder den von dir gesetzten Prefix).
| Tasten | Wirkung |
|---|---|
tmux | Neue Session starten |
tmux a | Letzte Session attachen |
Prefix d | Detach — Session läuft im Hintergrund weiter |
Prefix c | Neues Window erstellen |
Prefix , | Window umbenennen |
Prefix n / Prefix p | Nächstes / vorheriges Window |
Prefix 0..9 | Direkt zu Window-Nummer springen |
Prefix " | Pane horizontal splitten (übereinander) |
Prefix % | Pane vertikal splitten (nebeneinander) |
Prefix Pfeil | Fokus zwischen Panes wechseln |
Prefix z | Aktuellen Pane zoomen / wieder verkleinern |
Prefix x | Aktuellen Pane schliessen (mit Bestaetigung) |
Prefix [ | Copy-Mode (Scrollback, Vi-Bindings) |
Prefix ? | Hilfe mit allen aktiven Bindings |
Prefix :kill-session | Aktuelle Session beenden |
Der Reflex Prefix d (Detach) ist der wichtigste Handgriff: Er legt die Session schlafen, aber lässt alles drin laufen. Mit tmux a holst du sie zurück — egal ob aus derselben Shell oder von einer anderen Maschine via SSH.
tmux-Sessions verwalten
Sobald du mehr als eine Session laufen hast, brauchst du Namen. Eine namenlose Session bekommt eine Nummer, eine benannte kannst du gezielt wieder finden. Klassischer Workflow: pro Projekt oder pro Server eine eigene Session.
tmux new -s projekt-a
tmux ls
tmux a -t projekt-a
tmux kill-session -t projekt-atmux new -s NAME startet eine Session unter dem angegebenen Namen. tmux ls listet alle laufenden Sessions mit Name, Window-Anzahl und Attach-Status. tmux a -t NAME (oder tmux attach -t NAME) holt eine bestimmte Session in den Vordergrund. tmux kill-session -t NAME beendet sie endgueltig — alle Shells in der Session werden mit SIGHUP weggeraeumt.
screen-Basics
screen arbeitet mit demselben Grundprinzip, aber anderem Vokabular und anderer Tasten-Konvention. Der Prefix ist Ctrl+a — was sich oft mit dem Bash-Shortcut Ctrl+a (Cursor an Zeilenanfang) beisst. Wer screen taeglich nutzt, lernt damit zu leben oder mappt den Prefix in ~/.screenrc um.
| Tasten | Wirkung |
|---|---|
screen | Neue Session starten |
screen -S name | Neue Session mit Namen |
screen -ls | Sessions auflisten |
screen -r | Letzte Session reattachen |
screen -r name | Bestimmte Session reattachen |
Ctrl+a c | Neues Window |
Ctrl+a n / Ctrl+a p | Nächstes / vorheriges Window |
Ctrl+a " | Window-Liste anzeigen |
Ctrl+a A | Window umbenennen |
Ctrl+a d | Detach |
Ctrl+a k | Aktuelles Window beenden |
Ctrl+a [ | Scrollback-Mode |
Ctrl+a ? | Hilfe |
Splits sind in screen schwerfaelliger: Ctrl+a S teilt horizontal, Ctrl+a | vertikal, der Fokus wechselt mit Ctrl+a Tab, und in jeden neuen Bereich muss erst per Ctrl+a c ein neues Window gelegt werden, bevor er nutzbar ist. tmux nimmt einem das ab.
Konfiguration
Beide Werkzeuge sind kuendelfrisch nur eingeschraenkt produktiv — eine kleine Config macht den Alltag deutlich angenehmer. Bei tmux liegt die Konfiguration in ~/.tmux.conf, bei screen in ~/.screenrc.
# Prefix auf Ctrl+a (screen-kompatibel)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Maus-Mode: scrollen, Panes anklicken, Splits ziehen
set -g mouse on
# Splits in aktuellem Pfad oeffnen
bind '"' split-window -v -c "#{pane_current_path}"
bind '%' split-window -h -c "#{pane_current_path}"
# Mehr Scrollback
set -g history-limit 50000
# 256 Farben + truecolor
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",xterm-256color:RGB"
# Window-Numbering ab 1
set -g base-index 1
setw -g pane-base-index 1
# Status-Bar dezent
set -g status-bg colour234
set -g status-fg colour248Das ist eine schmale, aber ausreichende Basis: screen-kompatibler Prefix, Maus-Mode (sehr empfehlenswert ab tmux 2.1), grosser Scrollback-Buffer und brauchbare Farben. Splits öffnen im aktuellen Verzeichnis — sonst landest du bei jedem Split wieder in $HOME. Prefix r zum Reload-Binding ist ebenfalls verbreitet: bind r source-file ~/.tmux.conf \; display "Reloaded".
startup_message off
defscrollback 50000
hardstatus alwayslastline "%{= kw}%-w%{= BW}%n %t%{-}%+w %= %H %Y-%m-%d %c"
bindkey -k k1 prev
bindkey -k k2 nextBei screen ist der Statuszeilen-Syntax beruechtigt kryptisch — die Zeile oben zeigt links die Window-Liste mit Markierung der aktiven, rechts Hostname und Datum.
Praxis-Patterns
Die folgenden Bausteine zeigen, was tmux im Alltag wirklich loest. Jeder Block beschreibt zuerst den Befehl und dann den Sinn dahinter.
SSH ohne Verbindungsangst
ssh server -t tmux a -t main || ssh server -t tmux new -s mainBeim Login auf den Server attachst du dich direkt an eine Session namens main — existiert sie nicht, wird sie neu angelegt. -t zwingt SSH, ein TTY zuzuweisen, was tmux braucht. Das WLAN bricht ab, der Laptop schlaeft, ein Stromausfall trifft den Router — egal: beim nächsten Login bist du genau dort, wo du aufgehoert hast.
Mehrere Logs gleichzeitig
tmux new -s logs \; \
send-keys "tail -f /var/log/nginx/access.log" C-m \; \
split-window -v "tail -f /var/log/nginx/error.log" \; \
split-window -h "journalctl -u nginx -f"Eine einzige Kommando-Zeile baut eine fertige Drei-Pane-Konstellation auf: oben das Access-Log, unten links das Error-Log, unten rechts der systemd-Stream. Das \; trennt tmux-Befehle innerhalb desselben tmux-Aufrufs. Praktisch für wiederkehrende Diagnose-Setups — speichere das als Skript und ruf es mit einem Wort auf.
Lange Builds
tmux new -s build
./build.sh 2>&1 | tee build.log
# Prefix d zum Detach
# ... irgendwann spaeter ...
tmux a -t buildStatt das Terminal stundenlang offen halten zu müssen, startest du den Build in einer named tmux-Session, druckst Prefix d und gehst Mittagessen. tee schreibt zusätzlich in eine Logdatei, falls du auch nach kill-session noch nachschauen willst. Beim Reattach siehst du den vollstaendigen Verlauf inklusive Scrollback.
Pair-Programming
# User A
tmux new -s shared
# User B (auf demselben Host, gleiches User-Account)
tmux a -t sharedStandardmäßig ist tmux multi-attach faehig: Mehrere Clients können sich gleichzeitig an dieselbe Session haengen und sehen denselben Bildschirm in Echtzeit. Das ist die einfachste Form von Pair-Programming auf einem Remote-Host — beide User loggen sich auf denselben Account ein, beide attachen die Session, beide tippen. Für getrennte User-Accounts gibt es Lösungen wie tmate oder wemux, die das Sharing absichern.
Auto-Start beim SSH-Login
if [ -z "$TMUX" ] && [ -n "$SSH_CONNECTION" ]; then
tmux a -t main 2>/dev/null || tmux new -s main
fiBei jedem interaktiven SSH-Login landest du automatisch in der Session main. Die [ -z "$TMUX" ]-Prüfung verhindert, dass tmux sich beim Schachteln (tmux innerhalb tmux) in Endlos-Schleifen verfaengt; [ -n "$SSH_CONNECTION" ] stellt sicher, dass das nur bei SSH-Logins passiert, nicht bei lokalen Shells. Wer das mag, hat damit nie wieder eine nackte Shell auf dem Server — alles läuft per Default geschuetzt durch tmux.
Besonderheiten
Mouse-Mode ab tmux 2.1
Mit set -g mouse on aktivierst du eine überraschend gute Maus-Unterstuetzung: scrollen im Pane (Buffer-Scrollback), Pane-Auswahl per Klick, Pane-Groessen per Drag-and-Drop, Window-Wechsel über die Status-Bar. Vor Version 2.1 gab es vier separate mode-mouse-Optionen — die heutige Single-Option-API ist eine deutliche Vereinfachung. Wer puristisch bleibt, lässt die Maus aus und tippt — alle Maus-Aktionen haben Tasten-Äquivalente.
Copy-Mode mit Vi-Bindings
Prefix [ schaltet in den Copy-Mode, in dem du wie in Vi durch den Scrollback-Buffer navigierst — j/k für Zeilen, Strg+u/Strg+d für Halbseiten, / für Suche. Mit set -g mode-keys vi aktivierst du v zur Selektion und y zum Kopieren. Der Inhalt landet in einem tmux-internen Buffer; mit Prefix ] fuegst du ihn ein. Für den System-Clipboard-Bridging brauchst du Tools wie xclip (X11), wl-copy (Wayland) oder pbcopy (macOS) — typischerweise per bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "xclip -selection clipboard".
Status-Bar lässt sich beliebig customizen
Die untere Status-Bar in tmux ist eine vollstaendig konfigurierbare Format-Zeichenkette. Über Direktiven wie #{pane_current_path}, #{session_name}, #(uptime) und Conditional-Blöcke lassen sich CPU-Last, Battery, Git-Branch, externe Skript-Ausgaben oder Wetter-Daten einbinden. Powerline-ähnliche Themes (tmux-powerline, gpakosz/.tmux) gibt es fertig — für den schnellen Einstieg sind sie ideal, langfristig kann eine eigene, schlanke Bar deutlich angenehmer sein.
tmux-resurrect und tmux-continuum
Persistenz über Reboots ist der nächste Schritt. tmux-resurrect speichert auf Befehl (Prefix Strg+s) den kompletten Session-Zustand inklusive Window-Layouts und laufender Befehle in eine Datei und stellt ihn nach einem Neustart wieder her (Prefix Strg+r). tmux-continuum setzt obendrauf und macht das Speichern automatisch alle 15 Minuten — und beim Boot stellt es die letzte Session wieder her. Beides wird über den Tmux Plugin Manager (TPM) installiert.
screen ist auf manchen Systemen Default
Auf alten RHEL-Versionen, in eingeschraenkten Hosting-Panels und auf vielen Embedded-Geraeten ist screen vorinstalliert und tmux nicht verfügbar. Wer regelmaessig auf solche Systeme muss, sollte zumindest die screen-Basics können — die Konzepte überlappen sich genug mit tmux, dass der Umstieg pro Session schnell geht. Auf modernen Distros (Debian 12, Ubuntu 22.04+, Fedora, Arch) ist tmux dagegen Standard, screen muss meist nachinstalliert werden.
BSD-tmux ist OK, manche Plugins streiken
Auf macOS und FreeBSD ist tmux gegen BSD-libc gelinkt statt gegen glibc. Für den Alltag macht das keinen Unterschied — Konzepte, Konfiguration, Tasten sind identisch. Manche Plugins erwarten aber GNU-Tools im Hintergrund (gawk, gsed) oder bestimmte /proc-Inhalte, die unter BSD anders aussehen. Wer auf macOS mit Homebrew arbeitet, installiert coreutils und gawk parallel und passt seine Plugin-Aufrufe an, wenn etwas haengt.
aggressive-resize bei mehreren Clients
Wenn zwei Clients mit unterschiedlich grossen Terminals dieselbe Session attachen, schrumpft tmux auf die kleinere Groesse zurück — der groessere Client sieht dann freie Raender. setw -g aggressive-resize on aendert das Verhalten so, dass jedes Window auf die Groesse des aktuell darauf schauenden Clients eingestellt wird. Sehr nuetzlich beim Pair-Programming oder wenn man oft zwischen Laptop und externem Monitor wechselt.
tmux send-keys steuert Sessions per Skript
Mit tmux send-keys -t SESSION:WINDOW.PANE "command" C-m tippt das CLI in einen laufenden Pane hinein, als kaeme es von der Tastatur. Damit baut man komplette Workspaces per Skript auf, automatisiert wiederkehrende Setups oder injiziert Befehle in Long-Running-Sessions. Für komplexe Layouts gibt es Tools wie tmuxinator oder tmuxp, die YAML/JSON-Specs in fertige Sessions verwandeln.
Weiterfuehrende Ressourcen
Externe Quellen
- man 1 tmux (man7.org) — Vollstaendige tmux-Referenz mit allen Optionen, Befehlen und Format-Variablen
- man 1 screen (man7.org) — GNU-screen-Manpage mit allen Tasten und Konfigurations-Direktiven
- tmux Cheat Sheet (tmuxcheatsheet.com) — Kompakter Spickzettel zu allen wichtigen tmux-Tasten
- Arch Wiki: tmux — Praxisorientierter Überblick mit Tipps zu Konfiguration und Plugins
- thoughtbot: A tmux Crash Course — Klassischer Einsteiger-Artikel mit den wichtigsten Workflows
Verwandte Artikel
- nohup und disown — Prozesse vor SIGHUP schuetzen, wenn das Terminal schliesst
- Jobs, fg und bg — Job-Steuerung der Shell als leichtgewichtige Alternative
- Prozess-Modell — PID, fork/exec und SIGCHLD als Grundlage der Sitzungs-Verwaltung
- Linux Shell — Bash, Zsh und die Grundlagen der Kommandozeile
- Signale — SIGHUP, SIGTERM und Co. als Sprache der Prozesse