Login
Newsletter
Werbung

Do, 12. Juni 2014, 15:00

tmux – Das Kung-Fu der Terminal-Ninjas

Das Programm tmux ist ein Terminal-Multiplexer, der laufende Terminal-Programme von der Sitzung trennen und an andere Sitzungen wieder anhängen kann, sodass diese währenddessen im Hintergrund aber weiterlaufen.

Von wogri

Einleitung

Das ist doch jedem schon mal passiert, der mit Unix-basierten Servern auf der Kommandozeile arbeitet: Man möchte unbedingt den nächsten Zug erwischen, jedoch muss man noch schnell einen Befehl auf dem Server ausführen, der unter Umständen bis zu zwei Stunden in der Ausführung braucht, und erst dann die Kommandozeile wieder frei gibt. Da man aber ein gutes Gewissen der Umwelt gegenüber pflegt, ist man auch erpicht darauf, die Workstation, auf der man die SSH-Sitzung eröffnet hat, beim Verlassen des Büros auszuschalten.

Schaltet man die Workstation nach Start des Befehls sofort ab, kann alles mögliche die Folge sein: Durch den Abbruch der SSH-Sitzung können der Shell-Prozess am Server und auch dessen Kinder beendet werden, interaktive Nachfragen beim Benutzer verlaufen auf jeden Fall im Sand und auch das Ergebnis des Befehls und den eventuellen Output auf der Kommandozeile verliert man.

Tools wie nohup oder das Herunterfahren nach einer gewissen Zeit (sleep 5h && shutdown -h now) sind dabei bekannt, jedoch hat letzteres schon einmal dazu geführt, dass der Loadbalancer der größten nationalen Wetter-Webseite heruntergefahren wurde, weil der Befehl im falschen Terminalfenster eingegeben wurde.

Dieses Problem wurde schon vor vielen Jahren von den Autoren des Kommandozeilentools screen erkannt und auch erfolgreich mit vielen Zusatzfeatures gelöst. Das hier vorgestellte Programm tmux entspricht wohl der Evolution aus screen und kann in einigen Bereichen mit mehr Features als Screen aufwarten.

Fire and Forget – Kommandos ausführen und den Rechner herunterfahren

Wer sich nicht um die grausigen Details kümmern möchte, kann nach dem Lesen dieses Absatzes Befehle ausführen und mit gutem Gewissen der Umwelt gegenüber zum Zug marschieren.

Nach der Installation von tmux auf dem Server (nicht auf der Workstation!) mit dem Paketmanager kann es losgehen. Man startet tmux das erste Mal mit dem Befehl

$ tmux new

Man wird mit einem Fork der aktuellen Shell begrüßt und sieht unten einen Statusbalken. tmux bietet einen internen Scrollback-Buffer, somit kann man dem Scrollbalken seiner Konsole erst einmal eine Pause gönnen. Nun startet man den Befehl seiner Wahl. Wie wär's zum Testen mit

$ sleep 2h; echo "fertig!"

und beendet dann tmux.

Standardmäßig muss man dafür »Strg + B« drücken und danach die Taste »D« (detach). Man landet in seiner ursprünglichen Shell, die man vor tmux gestartet hat. Nun kann man seine SSH-Sitzung zum Server beenden und zum Zug eilen.

Um die Sitzung wieder aufzunehmen, verbindet man sich am nächsten Tag wieder mit SSH zum Server (bitte darauf achten, den gleichen User wie am Vortag zu verwenden) und hängt sich in seine tmux-Sitzung mit dem Befehl

$ tmux attach

Das würde auch von daheim aus funktionieren, falls jemand das spannende Ergebnis der Sleep-Routine nicht abwarten kann und Gefahr läuft, vor lauter Nervosität nicht einschlafen zu können. tmux macht dabei keine Unterscheidung, ob der Terminal-Client derselbe war wie gestern, auch die dargestellten Bildschirmzeilen der Konsole können unterschiedlich sein – tmux passt sich automatisch an.

So viel zur einfachsten Anwendung von tmux.

Terminal Multiplexing

Viele Menschen verwenden Tabs, um zwischen ihren Konsolen-Sitzungen hin- und herzuschalten. Das mag zwar sehr praktisch sein, jedoch hat es ein paar Nachteile: Wer auf einem anderen Gerät die gleiche Arbeitsumgebung vorfinden möchte, muss sich seine Terminal-Fenster zu den 20 beinahe täglich zu administrierenden Servern von Hand aufbauen.

Auch hier findet sich mit tmux ein enorm praktisches Werkzeug: Man kann innerhalb einer tmux-Sitzung beliebig viele »Tabs« (sogenannte Windows) erstellen, und diese sogar in Gruppen (sogenannten Sessions) zusammenfassen. Zwischen diesen Fenstern kann man Inhalte relativ komfortabel mit Copy & Paste transferieren (zugegebenermaßen ist hier eine »traditionelle« Shell in einer grafischen Konsole meist besser zu benutzen, wenn man viel Text mit Copy & Paste herumkopieren muss).

Darüber hinaus kann man ein einzelnes Window in mehrere Fenster splitten (ein Split wird Pane genannt), um z.B. auf der einen Hälfte der Shell Logfiles live zu betrachten und auf der anderen Hälfte zu arbeiten. Ich verwende eine virtuelle Maschine in der Firma, um die Arbeitsumgebung vorzufinden.

Kommentare (Insgesamt: 14 || Alle anzeigen )
Ninja (Marcus Moeller, Mi, 18. Juni 2014)
Tastenkombi beim Paste-Beispiel unvollständig (Marc-nichteingeloggt, Mo, 16. Juni 2014)
Re: sleep 5h && shutdown -h now (hjb, Sa, 14. Juni 2014)
sleep 5h && shutdown -h now (Berniyh, Sa, 14. Juni 2014)
tssh (nean, Sa, 14. Juni 2014)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung