tmux - ein mächtiger Terminal Multiplexer

2017-01-07 // Tags:

In meinen üblichen Arbeitsabläufen habe ich eigentlich immer eine Vielzahl an Terminals offen. Meist sind es drei Stück für eine Aufgabe: Auf einem laufen Logausgaben, eine Terminal ist für Konsolenbefehle und eines fungiert für Datei-Verwaltung. Häufig gibt es dann noch ein viertes Fenster mit einem Systemmonitor.

Daheim oder lokal ist das eigentlich kein Problem. Unter i3 wurden die Fenster automatisch angeordnet, moderne Desktop-Umgebungen wie Unity, XFCE, etc. unterstützen das Einrasten von Fenstern an vordefinierten Ecken. Also einfach ein neues Terminal erstellen, anordnen und loslegen.

Wenn ich aber auf einem Server arbeite, wird es etwas komplizierter. Da muss ich mich zusätzlich dann mit jedem neuen Fenster wieder neu zum Server verbinden. Kein Hexenwerk, aber dennoch lässtig. Auf der Arbeit kommt hinzu, dass wir auf unseren Servern ein Monitoring haben; zu viele Logins von einem User verursacht einen Alarm im Nagios. Aus diesem Grund habe ich mich nochmal mit Terminal-Multiplexern auseinandergesetzt.

In der Vergangenheit habe ich schon mal mit screen gearbeitet. Doch seither habe ich immer wieder von tmux gelesen. Warum dieses Tool nicht nochmal genauer anschauen?

Sowohl screen wie auch tmux sind Terminal-Multiplexer, mit denen man virtuelle Sitzungen eröffnen kann. Im einfachsten Fall startet man auf dem Server eine neue Sitzung mit tmux/screen, startet in dieser Sitzung ein Programm und löst dann die Sitzung. Im Hintergrund läuft sie dann weiter und mit ihr alle laufenden Prozesse innerhalb dieser Session. Man kann sich also wieder vom Server abmelden und später wieder an die Sitzung anmelden, als ob man nie weg gewesen wäre.

Nun kann man mit einer SSH-Session auch mehrere Sitzungen in screen/tmux starten. Also über eine SSH-Verbindung kann man sich virtuelle Fenster für Logausgaben, Datei-Management und Konsolen-Befehle öffnen.

Dabei lassen sowohl screen wie auch tmux ihre Fenster auch aufteilen. In sogenannten „Panes“ kann man das aktuelle Fenster horizontal oder vertikal aufteilen und so beispielsweise Logs neben der der Shell-Eingabe laufen lassen. Ganz ohne ein Fenstermanagement über die Desktop-Umgebung.

Die Bedienung von tmux erfolgt über den Wechsel in den Befehlsmodus. Um in den Befehlsmodus zu wechseln, wird zunächst eine Tastenkombination gedrückt und anschließend der Befehl über Tastenkürzel oder ganze Kommandos gegeben.

Der Wechsel in den Befehlsmodus erfolgt im Standard über die Tastenkombination STRG+b.

Beispiele für tmux

Eine neue tmux-Sitzung mit Namen WebApp starten:

tmux new -s WebApp

Diese Sitzung lösen wir nun und verschieben sie in den Hintergrund. Dazu wird im laufenden tmux die Tastenkombination STRG+b d (d für Detatch) ausgeführt.

Wieder in der regulären Konsole, außerhalb von tmux, kann man sich die noch laufenden Sessions anzeigen lassen:

tmux ls

Um die gelöste Session wieder aufzunehmen

tmux a -t WebApp

(a für Attach und -t für Target-Session)

Das aktuelle Fenster teilt man mit STRG+b % vertikal. Den aktuellen Pane teilt man mit STRG+b " horizontal.

Zum wechseln zwischen den Panes drückt man STRG+b und kann anschließend mit den Pfeiltasten zwischen den Panes springen. Mit STRG+b und weiterhin gedrückter STRG-Taste, kann man mit den Pfeiltasten die Größe der Panes ändern.

Ein neues Fenster erstellt man mit STRG+b c. Der Wechsel zwischen den Fenstern erfolgt entweder mit STRG+b n (n für next), STRG+b p (p für previous) oder STRG+b [0..9], um ein Fenster direkt anzusprechen. Die Nummern für die Fenster stehen untern in der Statusleiste von tmux.

Um eine besseren Übersicht über die aktuellen Fenster zu bekommen, kann man die Fenster mit STRG+b , umbenennen.

Hat man tmux ohne Angabe eines Namens für die Session gestartet, kann man die aktuelle Sitzung mit STRG+b $ umbenennen.

Über STRG+b ! kann man ein Pane aus dem aktuellen Fenster lösen und als eigenständiges Fenster in der aktuellen Sitzung anzeigen. Mit STRG+b { oder STRG+b } kann man Panes im aktuellen Fenster verschieben.

Und wenn man in alle Panes den selben Befehl schicken will – beispielsweise, weil man in jedem Pane eine SSH-Verbindung zu unterschiedlichen Servern aufgebaut hat, und dort ein System-Upgrade starten will, drückt man STRG+b und tippt anschließend :set-window-option synchronise-panes ein. Über den gleichen Befehl lässt sich die Option auch wieder abschalten.

Doch das war nur ein kleiner Teil des Funktionsumfangs von tmux. Im Internet finden sich diverse Anleitungen, Cheat-Sheets und auch Gegenüberstellungen von tmux zu screen.