Mit Terminal Multiplexer (Tmux) ist es möglich, mit einem Terminal mehrere Sessions bzw. Shells zu verwalten und diese auch im Hintergrund weiterlaufen zu lassen, sodass man
sich vom System abmelden und später die Arbeit exakt dort wieder aufnehmen kann. In diesem Tipp zeigt der zertifizierte Linux-Trainer Michi Zaugg, wies geht.
In diesem Beitrag rund um tmux (terminal multiplexer) steigen wir direkt mit der Aufgabenstellung ein, um die Möglichkeit dieses Open-Source-Tools genauer aufzuzeigen: Wir möchten mit einer länger andauernde Arbeit gebinnen, möchten dazu aber nicht das Terminal offen halten müssen bzw. angemeldet bleiben. Später möchten wir natürlich das Resultat anschauen. Dieses Problem lässt sich relativ leicht mit nohup lösen. nohup (no hangup) hängt das gefolgte Kommando von meiner Session ab, d.h. es läuft auch weiter, wenn das Fenster bzw. meine Session geschlossen wird. Das sieht dann etwa so aus:
|
Hier ist nun das gestartete sleep immer noch an meine Shell gebunden (PPID 10400). Da nohup sich von meiner Session abhängt, hat es auch nirgends mehr ein Terminal, wo das Kommando eine allfällige Ausgabe hineinschreiben könnte. Desshalb wird alles ins nohup.out gestellt. Dies befindet sich dort, wo ich nohup gestartet habe.
|
Wenn ich mich nun vom System ab- und wieder anmelde und erneut die Prozesstabelle anschaue, sehe ich, dass sleep nun wirklich von der ursprünglichen Shell entbunden wurde. Es sitzt nun direkt am Init (PPID 1).
Dies funktioniert alles soweit so gut, nur kann ich nicht mehr direkt interagieren. Der Prozess läuft zu Ende, und ich kann quasi nicht dort weiterfahren, wo ich aufgehört habe – ich habe ja nun eine neue Session. Mit einem Terminal-Multiplexer (tmux) kann ich in einem Terminal-Fenster mehrere Sessions verwalten, die auch offen bleiben, wenn ich das System verlasse, also mich abmelde.
Unter RedHat-Systemen kann tmux vom rpmforge Repository bezogen werden (CentOS Wiki). Nachdem das Repos hinzugefügt wurde, kann es mit
|
installiert werden.
Unter Debian-Systemen ist tmux bereit zur Installation:
|
Mit tmux wird eine neue Tmux-Session gestartet:
|
In der Leiste unten sieht man – falls vorhanden – die verschiedenen Fenster. Zudem hat man per Default den Hostnamen und das Datum auf der rechten Seite. Um tmux zu verlassen, gebe ich einfach exit oder logout ein. Sobald ich das letzte tmux-Fenster auf diese Weise schliesse, wird allerdings auch die Session geschlossen. Wenn ich nun, was ja der Witz an der Sache ist, tmux weiterlaufen lassen möchte, wird dies mit Ctrl-b-d; (d wie detach) gemacht. (Übrigens, die meisten Befehle aus Screen funktionieren auch in tmux, anstatt, dass Ctrl-a gefolgt von einem Buchstaben verwendet wird, benutzt man in tmux Ctrl-b).
Dies bedingt am Anfang eine gewisse Feinmotorik: Ctrl gedrückt halten, b drücken, Ctrl und b loslassen, c drücken.
Hier die wichtigesten Tastenkürzel:
Selbstverständlich kann man tmux x-Mal laufen lassen. Denkbar ist es, verschiedene themenbasierte Sessions zu starten, z. B. «Server X», «Webadministration», «DNSAdmin», «Entwicklung». Mit
|
wird eine neue tmux-Session mit dem Titel «einname» gestartet. Wenn man dies nicht macht, wird von 0 weg durchnummeriert.
Die Session «einname» kann man dann nach dem Detachen wieder holen mit
|
Wenn ich nicht mehr weiss, wie ich die Session benannt habe bzw. sehen will, welche gerade laufen, kann ich mir dies mit
|
auflisten lassen.
Nett ist bei tmux, dass man ein eigenes Konfigfile erstellen kann unter ~/.tmux.conf. Dort können Tastenkombinationen erstellt, das Look&Feel angepasst oder auch Allgemeines wie der Scrollback-Buffer eingestellt werden (ach ja, übrigens, gescrollt wird in tmux mit Ctrl-b [, den Scroll-Modus verlässt man wieder mit ESC).
Beispiele für .tmux.conf
Historie verlängern:
|
Aussehen anpassen:
|
Status rechts anpassen:
|
2 Kommentare
Ach ja: Mit C-A als Meta-Key haben auch Leute, welche screen verwenden keine Mühe tmux zu benutzen, bzw. man muss sich nicht anpassen.
Ich habe noch folgendes in meiner Konfig, damit ich -a statt -b als Meta-Key verwenden kann. Dies, weil ich -b in vim und in Manpages oft zum zurückblättern verwende:
# C-a statt C-b als Meta-Key
unbind C-b
set -g prefix C-a
bind-key C-a last-window
bind-key a send-prefix
Foobar