103.5 Lektion 2
Zertifikat: |
LPIC-1 |
---|---|
Version: |
5.0 |
Thema: |
103 GNU- und Unix-Befehle |
Lernziel: |
103.5 Prozesse erzeugen, überwachen und beenden |
Lektion: |
2 von 2 |
Einführung
Die in der vorhergehenden Lektion vorgestellten Werkzeuge und Hilfsmittel sind für die Prozessüberwachung im Allgemeinen sehr nützlich. Ein Systemadministrator muss jedoch unter Umständen noch einen Schritt weiter gehen. In dieser Lektion werden wir das Konzept der Terminalmultiplexer besprechen und auf GNU Screen sowie tmux eingehen, da — trotz der heutigen modernen und großartigen Terminalemulatoren — Multiplexer immer noch einige coole, leistungsstarke Funktionen für einen produktiven Systemadministrator bereithalten.
Merkmale von Terminalmultiplexern
In der Elektronik ist ein Multiplexer (oder mux) ein Gerät, das den Anschluss mehrerer Eingänge an einen einzigen Ausgang ermöglicht. So gibt uns ein Terminalmultiplexer die Möglichkeit, je nach Bedarf zwischen verschiedenen Eingängen umzuschalten. Obwohl sie nicht genau gleich sind, haben screen
und tmux
eine Reihe von Gemeinsamkeiten:
-
Jeder erfolgreiche Aufruf führt zu mindestens einer Sitzung, die wiederum mindestens ein Fenster enthält. Fenster enthalten Programme.
-
Fenster können in Regionen oder Fensterbereiche aufgeteilt werden, dies kann die Produktivität bei der gleichzeitigen Arbeit mit verschiedenen Programmen steigern.
-
Einfache Steuerung: Um die meisten Befehle auszuführen, werden Tastenkombination verwendet — das sogenannte Befehlspräfix oder die Befehlstaste — gefolgt von einem weiteren Zeichen.
-
Sitzungen können von ihrem aktuellen Terminal getrennt werden (d.h. Programme werden in den Hintergrund geschickt und laufen weiter). Dies garantiert die vollständige Ausführung von Programmen, unabhängig davon, ob wir versehentlich ein Terminal schließen, ein gelegentliches Einfrieren des Terminals oder sogar einen Verbindungsabbruch erleiden.
-
Socketverbindung.
-
Kopiermodus.
-
Sie sind in hohem Maße anpassbar.
GNU Screen
In den frühen Tagen von Unix (1970er - 80er Jahre) bestanden Computer im Wesentlichen aus Terminals, die mit einem Zentralrechner verbunden waren. Das war alles, keine mehreren Fenster oder Registerkarten. Und das war der Grund für die Schaffung von GNU Screen im Jahr 1987: die Emulation mehrerer unabhängiger VT100-Bildschirme auf einem einzigen physischen Terminal.
Fenster
GNU Screen wird einfach durch Eingabe von screen
in das Terminal aufgerufen. Wir sehen zunächst folgende Begrüßungsnachricht:
GNU Screen version 4.05.00 (GNU) 10-Dec-16 Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 Juergen Weigert, Michael Schroeder Copyright (c) 1987 Oliver Laumann (...)
Drücken wir die Leertaste oder die Eingabetaste, um die Meldung zu schließen, und es erscheint eine Eingabeaufforderung:
$
Es mag den Anschein haben, als sei nichts geschehen, aber Tatsache ist, dass screen
bereits seine erste Sitzung und sein erstes Fenster erstellt und verwaltet hat. Das Befehlspräfix von screen
lautet Strg+a. Um alle Fenster am unteren Rand der Terminalanzeige zu sehen, geben Sie Strg+a-w ein:
0*$ bash
Da ist es, unser bisher einziges Fenster! Beachten Sie jedoch, dass die Zählweise bei 0 beginnt. Um ein weiteres Fenster zu erstellen, geben Sie Strg+a-c ein. Sie werden eine neue Eingabeaufforderung sehen. Lassen Sie uns ps
in diesem neuen Fenster starten:
$ ps PID TTY TIME CMD 974 pts/2 00:00:00 bash 981 pts/2 00:00:00 ps
und geben Sie erneut Strg+a-w ein:
0-$ bash 1*$ bash
Dort haben wir unsere beiden Fenster (beachten Sie das Sternchen, das auf den gerade angezeigte Fenster hinweist). Da diese jedoch von Bash gestartet wurden, haben beide den gleichen Namen. Da wir ps
in unserem aktuellen Fenster aufgerufen haben, benennen wir es mit dem gleichen Namen um. Dazu müssen Sie Strg+a-A eingeben und den neuen Fensternamen (ps
) eingeben, wenn Sie dazu aufgefordert werden:
Set window's title to: ps
Lassen Sie uns nun ein weiteres Fenster erstellen, aber geben Sie ihm von Anfang an einen Namen: yetanotherwindow
. Dies geschieht durch Aufruf von screen
mit dem Schalter -t
:
$ screen -t yetanotherwindow
Sie können sich auf verschiedene Weise zwischen den Fenstern bewegen:
-
Durch Verwendung von Strg+a-n (zum nächsten Fenster gehen) und Strg+a-p (zum vorherigen Fenster gehen).
-
Durch Verwendung von Strg+a-Nummer (gehen Sie zu Fensternummer Nummer).
-
Durch Verwendung von Strg+a-" wird eine Liste aller Fenster angezeigt. Sie können sich mit den Pfeiltasten nach oben und unten bewegen und das gewünschte Fenster mit Enter auswählen:
Num Name Flags 0 bash $ 1 ps $ 2 yetanotherwindow
Bei der Arbeit mit Fenstern ist es wichtig Folgendes zu beachten:
-
Fenster führen ihre Programme völlig unabhängig voneinander aus.
-
Programme laufen auch dann weiter, wenn ihr Fenster nicht sichtbar ist (auch wenn eine screen Sitzung losgelöst wird, wie wir in Kürze sehen werden).
Um ein Fenster zu entfernen, beenden Sie einfach das darin laufende Programm (sobald das letzte Fenster entfernt ist, wird screen
selbst beendet). Alternativ können Sie Strg+a-k benutzen, während Sie sich in dem Fenster befinden, das Sie beenden möchten; Sie werden daraufhin um Bestätigung gebeten:
Really kill this window [y/n] Window 0 (bash) killed.
Regionen
screen
kann einen Terminalbildschirm in mehrere Regionen unterteilen, in denen Fenster untergebracht werden können. Diese Unterteilungen können entweder horizontal (Strg+a-S) oder vertikal (Strg+a-|) erfolgen.
Das Einzige, was die neue Region zeigen wird, ist nur --
am unteren Rand, was bedeutet, dass diese leer ist:
1 ps --
Um in die neue Region zu wechseln, geben Sie Strg+a-Tab ein. Jetzt können Sie ein Fenster mit einer der Methoden hinzufügen, die wir bereits gesehen haben, zum Beispiel: Strg+a-2. Aus dem --
sollte jetzt 2 yetanotherwindow
geworden sein:
$ ps $ PID TTY TIME CMD 1020 pts/2 00:00:00 bash 1033 pts/2 00:00:00 ps $ screen -t yetanotherwindow 1 ps 2 yetanotherwindow
Wichtige Aspekte, die bei der Arbeit mit Regionen zu beachten sind:
-
Sie wechseln zwischen Regionen, indem Sie Strg+a-Tab eingeben.
-
Sie können alle Regionen außer der aktuellen mit Strg+a-Q beenden.
-
Sie können die aktuelle Region mit Strg+a-X beenden.
-
Das Beenden einer Region beendet nicht das zugehörige Fenster.
Sitzungen
Bisher haben wir mit einigen wenigen Fenstern und Regionen gespielt, die aber alle zur selben und einzigen Sitzung gehörten. Es ist an der Zeit, mit Sitzungen zu experimentieren. Um eine Liste aller Sitzungen zu sehen, geben Sie screen -list
oder screen -ls
ein:
$ screen -list There is a screen on: 1037.pts-0.debian (08/24/19 13:53:35) (Attached) 1 Socket in /run/screen/S-carol.
Das ist bisher unsere einzige Sitzung:
- PID
-
1037
- Name
-
pts-0.debian
(mit Angabe des Terminals — in unserem Fall ein Pseudo-Terminal-Slave — und des Hostname). - Status
-
Attached
Lassen Sie uns eine neue Sitzung erstellen und ihr einen aussagekräftigeren Namen geben:
$ screen -S "second session"
Die Terminalanzeige wird gelöscht und Sie erhalten eine neue Eingabeaufforderung. Sie können erneut nach Sitzungen suchen:
$ screen -ls There are screens on: 1090.second session (08/24/19 14:38:35) (Attached) 1037.pts-0.debian (08/24/19 13:53:36) (Attached) 2 Sockets in /run/screen/S-carol.
Um eine Sitzung zu beenden, beenden Sie alle Fenster der entsprechenden Sitzung oder geben Sie einfach den Befehl screen -S SESSION-PID -X quit
ein (Sie können stattdessen auch den Sitzungsnamen angeben). Lassen Sie uns unsere erste Sitzung beenden:
$ screen -S 1037 -X quit
Sie werden auf die Eingabeaufforderung Ihres Terminals außerhalb von screen
zurückgeschickt. Aber denken Sie daran, unsere zweite Sitzung ist immer noch aktiv:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Detached) 1 Socket in /run/screen/S-carol.
Da wir jedoch seine Elternsitzung beendet haben, erhält die Sitzung die neue Beschriftung: Detached
.
Abtrennung einer Sitzung
Aus einer Reihe von Gründen kann es sinnvoll sein, eine Bildschirmsitzung von ihrem Terminal zu trennen:
-
Um Ihren Computer am Arbeitsplatz seine Aufgaben machen zu lassen und später von zu Hause aus eine Fernverbindung herzustellen.
-
Um eine Sitzung für andere Benutzer freizugeben.
Sie trennen eine Sitzung mit der Tastenkombination Strg+a-d. Sie werden wieder in Ihr Terminal zurück geschickt:
[detached from 1090.second session] $
Um die Sitzung wieder anzuhängen, verwenden Sie den Befehl screen -r SESSION-PID
. Alternativ können Sie den SESSION-NAME
verwenden, welchen wir oben benutzt haben. Wenn es nur eine abgetrennte Sitzung gibt, ist keines von beiden notwendig:
$ screen -r
Dieser Befehl reicht aus, um wieder an unserer zweiten Sitzung teilzunehmen:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Attached) 1 Socket in /run/screen/S-carol.
Wichtige Optionen für die Wiederaufnahme von Sitzung sind:
-d -r
-
Fügt eine Sitzung wieder an und — falls erforderlich — löst diese zuerst ab.
-d -R
-
Dasselbe wie
-d -r
, aberscreen
wird die Sitzung sogar zuerst erzeugen, wenn diese nicht bereits existiert. -d -RR
-
Dasselbe wie
-d -R
. Verwendet jedoch die erste Sitzung, wenn mehr als eine Sitzung verfügbar ist. -D -r
-
Eine Sitzung wieder anhängen. Falls erforderlich, wird diese abgelöst und bestehende Fernverbindungen getrennt.
-D -R
-
Wenn eine Sitzung läuft, dann wird diese erneut verbunden (ggf. vorher aus der Ferne abgelöst und abgemeldet). Wenn keine Sitzung läuft, wird eine Neue erstellt und der Benutzer benachrichtigt.
-D -RR
-
Dasselbe wie
-D -R
— nur stärker. -d -m
-
Startet
screen
im abgekoppelten Modus. Dies erzeugt eine neue Sitzung, welche aber nirgends angehängt ist. Dies ist nützlich für Skripte zum Systemstart. -D -m
-
Dasselbe wie
-d -m
, aber es wird kein neuer Prozess erzeugt. Der Befehl wird beendet, sobald die Sitzung beendet wird.
Lesen Sie die Handbuchseiten für screen
, um mehr über seine Optionen zu erfahren.
Kopieren und Einfügen: Scrollback-Modus
GNU Screen bietet einen Kopier- oder Scrollback-Modus. Einmal eingegeben, können Sie den Cursor mit den Pfeiltasten im aktuellen Fenster und durch den Inhalt seiner Historie bewegen. Sie können Text markieren und fensterübergreifend kopieren. Die folgenden Schritte sind dazu notwendig:
-
Kopier-/Scrollback-Modus aufrufen: Strg+a-[.
-
Gehen Sie mit den Pfeiltasten an den Anfang des Textes, den Sie kopieren möchten.
-
Markieren Sie den Anfang des Textes, den Sie kopieren möchten: Leerzeichen.
-
Bewegen Sie sich nun mit den Pfeiltasten an das Ende des Textes, den Sie kopieren möchten.
-
Markieren Sie das Ende des Textes, den Sie kopieren möchten: Leerzeichen.
-
Gehen Sie in das Fenster Ihrer Wahl und fügen Sie den Text ein: Strg+a-].
Anpassung des Bildschirms
Die systemweite Konfigurationsdatei für screen ist /etc/screenrc
. Alternativ kann eine Benutzerebene ~/.screenrc
verwendet werden. Die Datei enthält vier Hauptkonfigurationsabschnitte:
SCREEN SETTINGS
-
Sie können allgemeine Einstellungen definieren, indem Sie die Direktive gefolgt von einem Leerzeichen und dem Wert wie in
defscrollback 1024
eingeben. SCREEN KEYBINDINGS
-
Dieser Abschnitt ist recht interessant, da er es uns ermöglicht, Tastenkombinationen neu zu definieren, die Ihren täglichen Gebrauch des Terminals stören könnten. Verwenden Sie das Schlüsselwort
bind
, gefolgt von einem Leerzeichen, dem Zeichen, das nach dem Befehlspräfix zu verwenden ist, einem weiteren Leerzeichen und dem Befehl wie in:bind l kill
(diese Einstellung ändert die Standardmethode zum Beenden eines Fensters in Strg+a-l).Um alle
screen
-Einbindungen anzuzeigen, geben wir Strg+a-? ein oder schlagen in den betreffenden Handbuchseiten nach.TipNatürlich können Sie auch das Befehlspräfix selbst ändern. Um zum Beispiel von Strg+a zu Strg+b zu wechseln, fügen Sie einfach diese Zeile hinzu:
escape ^Bb
. TERMINAL SETTINGS
-
Dieser Abschnitt enthält u.a. Einstellungen in Bezug auf Terminalfenstergrößen und -puffer. Um den Nichtblockierungsmodus zu aktivieren, um z.B. mit instabilen ssh-Verbindungen besser umgehen zu können, wird die folgende Konfiguration verwendet:
defnonblock 5
. STARTUP SCREENS
-
Sie können Befehle einschließen, um verschiedene Programme beim Start von
screen
auszuführen; zum Beispiel:screen -t top top
(screen wird beim Starten ein Fenster namenstop
mittop
darin öffnen).
tmux
tmux
wurde 2007 veröffentlicht. Obwohl es screen
sehr ähnlich ist, weist es einige nennenswerte Unterschiede auf:
-
Client-Server Modell: Der Server liefert eine Anzahl von Sitzungen, von denen jede eine Anzahl von Fenstern aufweist, die mit ihr verbunden sind und die wiederum von verschiedenen Clients gemeinsam genutzt werden können.
-
Interaktive Auswahl von Sitzungen, Fenstern und Clients über Menüs.
-
Dasselbe Fenster kann mit einer Reihe von Sitzungen verknüpft werden.
-
Verfügbarkeit von sowohl vim als auch Emacs Tastenlayouts.
-
Unterstützung für UTF-8 und Terminals mit 256 Farben.
Fenster
tmux
kann einfach durch Eingabe von tmux
in der Eingabeaufforderung aufgerufen werden. Es werden dazu ein Shellprompt und eine Statusleiste am unteren Rand des Fensters angezeigt:
[0] 0:bash* "debian" 18:53 27-Aug-19
Neben dem hostname
, der Uhrzeit und dem Datum enthält die Statusleiste die folgenden Informationen:
- Name der Sitzung
-
[0]
- Fensternummer
-
0:
- Name des Fensters
-
bash*
. Standardmäßig ist dies der Name des Programms, das innerhalb des Fensters läuft, und — anders als beiscreen
— aktualisierttmux
diesen automatisch, um das aktuell laufende Programm wiederzugeben. Beachten Sie das Sternchen, welches das aktuell sichtbare Fenster markiert.
Beim Aufruf von tmux
können Sie Sitzungs- und Fensternamen zuweisen:
$ tmux new -s "LPI" -n "Window zero"
Die Statusleiste ändert sich entsprechend:
[LPI] 0:Window zero* "debian" 19:01 27-Aug-19
Das Befehlspräfix von tmux
lautet Strg+b. Um ein neues Fenster zu erstellen, geben Sie einfach Strg+b-c ein; Sie werden zu einer neuen Eingabeaufforderung geführt und die Statusleiste zeigt das neue Fenster an:
[LPI] 0:Window zero- 1:bash* "debian" 19:02 27-Aug-19
Da die Bash die zugrunde liegende Shell ist, erhält das neue Fenster standardmäßig diesen Namen. Starten Sie top
und sehen Sie, wie sich der Name in top
ändert:
[LPI] 0:Window zero- 1:top* "debian" 19:03 27-Aug-19
In jedem Fall können Sie ein Fenster mit Strg+b-, umbenennen. Wenn Sie dazu aufgefordert werden, geben Sie den neuen Namen ein und drücken Enter:
(rename-window) Window one
Mit Strg+b-w können Sie sich alle Fenster zur Auswahl anzeigen lassen (benutzen Sie die Pfeiltasten zum Auf- und Abbewegen und Enter zur Auswahl):
(0) 0: Window zero- "debian" (1) 1: Window one* "debian"
Ähnlich wie bei screen
können wir von einem Fenster zum Anderen springen:
- Strg+b-n
-
zum nächsten Fenster wechseln.
- Strg+b-p
-
zum vorherigen Fenster springen.
- Strg+b-Nummer
-
zu Fensternummer Nummer wechseln.
Um ein Fenster zu beenden, verwenden wir Strg+b-&. Gefolgt von einer Bestätigung:
kill-window Window one? (y/n)
Weitere interessante Fensterbefehle sind:
- Strg+b-f
-
Fenster suchen per Namen.
- Strg+b-.
-
Fensterindexnummer ändern.
Um die gesamte Liste der Befehle zu lesen, siehe die entsprechenden Handbuchseiten.
Fensterbereiche
Die fensteraufteilende Funktion von screen
ist auch in tmux
vorhanden. Die daraus resultierenden Unterteilungen werden allerdings nicht Regionen, sondern Fensterbereiche genannt. Der wichtigste Unterschied zwischen Regionen und Fensterbreichen ist, dass letztere vollständige Pseudoterminals sind, die mit einem Fenster verbunden sind. Das bedeutet, dass das Beenden eines Fensters auch dessen Pseudoterminal und alle damit verbundenen Programme beendet, die darin laufen.
Um ein Fenster horizontal zu teilen, verwenden wir Strg+b-":
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 4050960 total, 3730920 free, 114880 used, 205160 buff/cache KiB Swap: 4192252 total, 4192252 free, 0 used. 3716004 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1340 carol 20 0 44876 3400 2800 R 0.3 0.1 0:00.24 top 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 $ ─────────────────────────────────────────────────────────────────────────────────────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Um sie vertikal zu teilen, verwenden Sie Strg+b-%:
│$ 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd │ │ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd │ │ 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 │ 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 │ 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H│ 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched │ 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh │ 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 │ │ 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drai│ n │ 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 │ │ 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 │ │ $ │ ───────────────────────────────────────────────────────────────────────────────┴─────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Um den aktuellen Fensterbereich zu beenden (zusammen mit seinem Pseudoterminal, das darin läuft und allen zugehörigen Programmen), verwenden wir Strg+b-x. Anschließend werden wir in der Statusleiste um eine Bestätigung gebeten:
kill-pane 1? (y/n)
Wichtige Fensterbereichbefehle:
- Strg+b-↑,↓,←,→
-
zwischen den Fensterbereichen wechseln.
- Strg+b-;
-
zum letzten aktiven Fensterbereich wechseln.
- Strg+b-Strg+Pfeiltaste
-
Fenstergröße um eine Zeile ändern.
- Strg+b-Alt+Pfeiltaste
-
Fenstergröße um fünf Zeilen ändern.
- Strg+b-{
-
Fensterbereich wechseln (vom Aktuellen zum Vorherigen).
- Strg+b-}
-
Fensterbereich wechseln (vom Aktuellen zum Nächsten).
- Strg+b-z
-
Bereich vergrößern/verkleinern.
- Strg+b-t
-
tmux
zeigt eine schicke Uhr innerhalb der Scheibe an (durch Drücken vonq
wird sie ausgeschaltet). - Strg+b-!
-
Fensterbereich in Fenster verwandeln.
Um die gesamte Liste der Befehle zu lesen, siehe die entsprechenden Handbuchseiten.
Sitzungen
Um Sitzungen in tmux
aufzulisten, können Sie Strg+b-s verwenden:
(0) + LPI: 2 windows (attached)
Alternativ können Sie den Befehl tmux ls
verwenden:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39] (attached)
Es gibt nur eine Sitzung (LPI
), die zwei Fenster enthält. Lassen Sie uns eine neue Sitzung innerhalb unserer aktuellen Sitzung erstellen. Dies kann durch die Verwendung von Strg+b erreicht werden. Geben Sie in der Eingabeaufforderung :new
ein und drücken Sie dann die Eingabetaste. Sie werden zu der neuen Sitzung geschickt, wie in der Statusleiste zu sehen ist:
[2] 0:bash* "debian" 19:15 27-Aug-19
Standardmäßig nennt tmux
die Sitzung 2
. Um diese umzubenennen, verwenden wir Strg+b-$. Wenn dazu aufgefordert, geben wir den neuen Namen ein und bestätigen diesen mit Enter:
(rename-session) Second Session
Sie können Sitzungen mit Strg+b-s wechseln (verwenden Sie die Pfeiltasten und Enter):
(0) + LPI: 2 windows (1) + Second Session: 1 windows (attached)
Um eine Sitzung zu beenden, können Sie den Befehl tmux kill-session -t SESSION-NAME
verwenden. Wenn Sie den Befehl innerhalb der aktuellen, angehängten Sitzung eingeben, werden Sie aus tmux
herausgeworfen und zu Ihrer anfänglichen Terminalsitzung zurückgeschickt:
$ tmux kill-session -t "Second Session" [exited] $
Abtrennung von Sitzungen
Durch das Beenden von Second Session
wurden wir aus tmux
herausgeworfen. Wir haben jedoch immer noch eine aktive Sitzung. Fragen wir tmux
nach einer Auflistung der Sitzungen werden wir diese wie folgt finden:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39]
Diese Sitzung ist jedoch vom Terminal losgelöst. Wir können sie mit tmux attach -t SESSION-NAME
anhängen (attach
kann durch at
oder — einfach — a
ersetzt werden). Wenn es nur eine einzige Sitzung gibt, ist die Angabe eines Namens optional:
$ tmux a
Wir befinden uns nun wieder in unserer Sitzung; um sich von ihr abzulösen, drücken wir Strg+b-d:
[detached (from session LPI)] $
Tip
|
Dieselbe Sitzung kann mit mehr als einem Terminal verbunden werden. Soll eine Sitzung angehängt werden, stellen Sie sicher, dass sie zunächst von allen anderen Terminals getrennt ist, verwenden Sie dann die Option |
Wichtige Befehle für das Anhängen/Lösen von Sitzungen:
- Strg+b-D
-
Auswahl, welcher Client abgetrennt werden soll.
- Strg+b-r
-
Aktualisiert das Clientterminal.
Um die gesamte Liste der Befehle zu lesen, siehe die entsprechenden Handbuchseiten.
Kopieren und Einfügen: Scrollback-Modus
tmux
verfügt auch über einen Kopiermodus, im Prinzip auf die gleiche Weise wie screen
(denken Sie daran, das Befehlspräfix von tmux
und nicht das von screen
zu verwenden!) Der einzige Unterschied in der Befehlsweise besteht darin, dass nun Strg + Leertaste verwendt wird, um den Anfang der Auswahl zu markieren, und Alt+w, um den ausgewählten Text zu kopieren.
Anpassung von tmux
Die Konfigurationsdateien für tmux
befinden sich typischerweise unter /etc/tmux.conf
und ~/.tmux.conf
. Wenn tmux
gestartet wird, wertet tmux
diese Dateien aus, falls diese existieren. Es besteht auch die Möglichkeit, tmux
mit dem Schalter -f
zu starten, um eine alternative Konfigurationsdatei bereitzustellen. Ein Beispiel für eine Konfigurationsdatei von tmux
finden Sie unter /usr/share/doc/tmux/example_tmux.conf
. Der Grad der Anpassung, den Sie erreichen können, ist wahrhaftig hoch. Einige der Dinge, die Sie tun können, sind:
-
Ändern Sie die Präfixkombination
# Change the prefix key to C-a set -g prefix C-a unbind C-b bind C-a send-prefix
-
Setzen Sie zusätzliche Tastenkombinationen für Fensternummern höher als 9
# Some extra key bindings to select higher numbered windows bind F1 selectw -t:10 bind F2 selectw -t:11 bind F3 selectw -t:12
Für eine umfassende Liste aller Bindungen geben Sie Strg+b-? ein (drücken Sie q
zum Beenden) oder konsultieren Sie die Handbuchseite.
Geführte Übungen
-
Geben Sie an, ob die folgenden Aussagen/Merkmale mit GNU Screen, tmux oder beiden übereinstimmen:
Feature/Statement GNU Screen tmux Standard-Befehlspräfix lautet Strg+a
Client-Server Modell
Fensterbereiche sind Pseudoterminals
Beenden einer Region schließt nicht die zugehörigen Fenster
Sitzungen umfassen Fenster
Sitzungen können abgetrennt werden
-
Installieren Sie GNU Screen auf Ihrem Computer (Paketname:
screen
) und führen Sie die folgenden Aufgaben aus:-
Starten Sie das Programm. Welchen Befehl verwenden Sie?
-
Start Sie
top
: -
Öffnen Sie mit dem Befehlspräfix von screen ein neues Fenster; öffnen Sie anschließend
/etc/screenrc
mittelsvi
: -
Listen Sie die Fenster am unteren Rand des Bildschirms auf:
-
Ändern Sie den Namen des aktuellen Fensters in
vi
: -
Ändern Sie den Namen des verbleibenden Fensters in
top
. Zeigen Sie dazu eine Liste aller Fenster an, so dass Sie nach oben und unten scrollen und das richtige Fenster auswählen können: -
Prüfen Sie, ob sich die Namen geändert haben, indem Sie die Fensternamen erneut am unteren Bildschirmrand anzeigen lassen:
-
Trennen Sie nun die Sitzung und lassen Sie
screen
eine neue Sitzung mit dem Namenssh
erstellen: -
Lösen Sie nun auch die Sitzung
ssh
ab und lassen Sie sich vonscreen
eine Liste aller Sitzungen anzeigen: -
Fügen Sie nun die erste Sitzung unter Verwendung der PID an:
-
Sie sollten wieder in dem Fenster sein, das
top
anzeigt. Teilen Sie das Fenster horizontal und wechseln Sie in die neue leere Region: -
Lassen Sie
screen
alle Fenster auflisten und wählen Sievi
, um in der neuen leeren Region angezeigt zu werden: -
Teilen Sie nun die aktuelle Region vertikal auf, gehen Sie in die neu erstellte leere Region und verbinden Sie diese mit einem brandneuen Fenster:
-
Beenden Sie alle Regionen mit Ausnahme der aktuellen (denken Sie daran, dass die Fenster trotz des Beendens der Regionen immer noch aktiv sind). Beenden Sie dann alle Fenster der aktuellen Sitzung, bis die Sitzung selbst beendet ist:
-
Führen Sie anschließend die Auflistung der Sitzungen von
screen
erneut durch, beenden Sie die verbleibende Sitzung vonssh
per PID und prüfen Sie, ob tatsächlich keine Sitzungen mehr übrig sind:
-
-
Installieren Sie
tmux
auf Ihrem Computer (Paketname:tmux
) und führen Sie die folgenden Aufgaben aus:-
Starten Sie das Programm. Welchen Befehl verwenden Sie?
-
Starten Sie
top
(beachten Sie, wie sich — in ein paar Sekunden — der Name des Fensters in der Statusleiste intop
ändert): -
Öffnen Sie unter Verwendung des Befehlspräfixes von
tmux
ein neues Fenster; öffnen Sie~/.tmux.conf
unter Verwendung vonnano
: -
Teilen Sie das Fenster vertikal und verkleinern Sie die Größe des neu erstellten Fensters einige Male:
-
Ändern Sie nun den Namen des aktuellen Fensters in
Textbearbeitung
; lassen Sie danntmux
eine Liste mit all seinen Sitzungen anzeigen: -
Gehen Sie mit der gleichen Tastenkombination in das Fenster, in dem
top
läuft und zurück in das aktuelle Fenster: -
Lösen Sie sich von der aktuellen Sitzung und erstellen Sie eine neue, deren Name
ssh
und deren Fensternamessh window
lautet: -
Lösen Sie sich nun auch von der
ssh
Sitzung und lassen Sietmux
die Liste der Sitzungen erneut anzeigen:NoteVon diesem Punkt an erfordert die Übung, dass Sie eine fernverbundene Maschine für
ssh
Verbindungen von Ihrem lokalen Host aus erreichen können (eine virtuelle Maschine ist vollkommen ausreichend und kann sich als durchaus praktisch erweisen). Stellen Sie sicher, dass auf Ihrem lokalen Rechner einopenssh-server
installiert ist und läuft sowie auf dem entfernten Rechner mindestens deropenssh-client
installiert ist. -
Starten Sie nun den entfernten Rechner und verbinden Sie sich über
ssh
von Ihrem lokalen Host aus. Sobald die Verbindung hergestellt ist, überprüfen Sie, ob Sitzungen vontmux
vorhanden sind: -
Fügen Sie nun, auf dem entfernten Rechner, die
ssh
-Sitzung anhand dessen Namen an: -
Zurück an Ihrem lokalen Rechner, fügen Sie die
ssh
-Sitzung anhand dessen Namen an, aber stellen Sie sicher, dass die Verbindung zum entfernten Rechner zuvor beendet wurde: -
Lassen Sie sich alle Sitzungen zur Auswahl anzeigen und gehen Sie zu Ihrer ersten Sitzung (
[0]
). Dort eingeloggt, beenden Sie die Sitzungssh
anhand des Namens: -
Lösen Sie sich schließlich von der aktuellen Sitzung und beenden Sie diese anhand des Namens:
-
Offene Übungen
-
Sowohl
screen
als auchtmux
können durch Befehlspräfix + : in den Kommandozeilenmodus gelangen (hierzu haben wir bereits ein kurzes Beispiel mittmux
gesehen). Stellen Sie einige Nachforschungen an und führen Sie die folgenden Aufgaben im Kommandozeilenmodus aus:-
screen
in den Kopiermodus bringen: -
Lassen Sie
tmux
das aktuelle Fenster umbenennen: -
Veranlassen Sie
screen
alle Fenster zu schließen und die Sitzung zu beenden: -
Lassen Sie
tmux
einen Fensterbereich in zwei Teile spalten: -
Lassen Sie
tmux
das aktuelle Fenster beenden:
-
-
Wenn Sie den Kopiermodus in
screen
aufrufen, können Sie nicht nur die Pfeiltasten und PgUp oder PgDown benutzen, um durch das aktuelle Fenster und den Scrollback-Puffer zu navigieren. Es besteht auch die Möglichkeit, einenvi
-ähnlichen Vollbildeditor zu verwenden. Führen Sie mit diesem Editor die folgenden Aufgaben aus:-
Wiedergabe von
supercalifragilisticexpialidocious
in Ihremscreen
-Terminal: -
Kopieren Sie nun die fünf aufeinanderfolgenden Zeichen (von links nach rechts) in die Zeile rechts über Ihrem Cursor:
-
Abschließend fügen Sie die Auswahl (
stice
) wieder in Ihre Eingabeaufforderung ein:
-
-
Angenommen, Sie wollen eine
tmux
-Sitzung (our_session
) mit einem anderen Benutzer teilen. Sie haben den Socket (/tmp/our_socket
) mit den richtigen Rechten so erstellt, dass sowohl Sie als auch der andere Benutzer diesen lesen und schreiben kann. Welche beiden anderen Bedingungen müssen erfüllt sein, damit der zweite Benutzer die Session erfolgreich übertmux -S /tmp/our_socket a -t our_session
anhängen kann?
Zusammenfassung
In dieser Lektion haben wir etwas über Terminalmultiplexer im Allgemeinen und GNU Screen und tmux im Besonderen gelernt. Wichtige Konzepte, die Sie sich merken sollten, sind unter anderem:
-
Befehlspräfix:
screen
verwendet Strg+a + Zeichen;tmux
Strg+b + Zeichen. -
Struktur von Sitzungen, Fenstern und Fensteraufteilungen (Regionen oder Fensterbereiche).
-
Kopiermodus.
-
Sitzungsabtrennung: eines der leistungsstärksten Merkmale von Multiplexern.
In dieser Lektion verwendete Befehle:
screen
-
Startet eine
screen
-Sitzung. tmux
-
Startet eine
tmux
-Sitzung.
Lösungen zu den geführten Übungen
-
Geben Sie an, ob die folgenden Aussagen/Merkmale mit GNU Screen, tmux oder beiden übereinstimmen:
Feature/Statement GNU Screen tmux Standard-Befehlspräfix lautet Strg+a
x
Client-Server Modell
x
Fensterbereiche sind Pseudoterminals
x
Beenden einer Region schließt nicht die zugehörigen Fenster
x
Sitzungen umfassen Fenster
x
x
Sitzungen können abgetrennt werden
x
x
-
Installieren Sie GNU Screen auf Ihrem Computer (Paketname:
screen
) und führen Sie die folgenden Aufgaben aus:-
Starten Sie das Programm. Welchen Befehl verwenden Sie?
screen
-
Start Sie
top
:top
-
Öffnen Sie mit dem Befehlspräfix von
screen
ein neues Fenster; öffnen Sie anschließend/etc/screenrc
mittelsvi
:Strg+a-c
sudo vi /etc/screenrc
-
Listen Sie die Fenster im unteren Teil des Bildschirms auf:
Strg+a-w
-
Ändern Sie den Namen des aktuellen Fensters in
vi
:Strg+a-A. Dann müssen wir
vi
eintippen und Enter drücken. -
Ändern Sie den Namen des verbleibenden Fensters in
top
. Zeigen Sie dazu eine Liste aller Fenster an, so dass Sie nach oben und unten scrollen und das richtige Fenster auswählen können:Zuerst tippen wir Strg+a-". Dann verwenden wir die Pfeiltasten, um diejenige zu markieren, die
0 bash
heißt, und drücken Enter. Schließlich tippen wir Strg+a-A, gebentop
ein und drücken Enter. -
Prüfen Sie, ob sich die Namen geändert haben, indem Sie die Fensternamen erneut am unteren Bildschirmrand anzeigen lassen:
Strg+a-w
-
Trennen Sie nun die Sitzung und lassen Sie
screen
eine neue Sitzung mit dem Namenssh
erstellen:Strg+a-d
screen -S "ssh"
und drücken Sie Enter. -
Lösen Sie nun auch die Sitzung
ssh
ab und lassen Sie sich vonscreen
eine Liste aller Sitzungen anzeigen:Strg+a-d
screen -list
oderscreen -ls
. -
Fügen Sie nun die erste Sitzung unter Verwendung ihrer PID an:
screen -r PID-OF-SESSION
-
Sie sollten wieder in dem Fenster sein, das
top
anzeigt. Teilen Sie das Fenster horizontal und wechseln Sie in die neue leere Region:Strg+a-S
Strg+a-Tab
-
Lassen Sie
screen
alle Fenster auflisten und wählen Sievi
, um in der neuen leeren Region angezeigt zu werden:Wir verwenden Strg+a-", um alle Fenster zur Auswahl angezeigt zu bekommen, markieren
vi
und drücken Enter. -
Teilen Sie nun die aktuelle Region vertikal auf, gehen Sie in die neu erstellte leere Region und verbinden Sie diese mit einem brandneuen Fenster:
Strg+a-|
Strg+a-Tab
Strg+a-c
-
Beenden Sie alle Regionen mit Ausnahme der aktuellen (denken Sie daran, dass die Fenster trotz des Beendens der Regionen immer noch aktiv sind). Beenden Sie dann alle Fenster der aktuellen Sitzung, bis die Sitzung selbst beendet ist:
Strg+a-Q.
exit
(zum Beenden von Bash). Shift+:, dann tippen wirquit
und drücken Enter (zum Beenden vonvi
). Danach tippen wirexit
(um die darunterliegende Bash-Shell zu verlassen).q
(umtop
zu beenden); dann tippen wirexit
(um die wiederum darunterliegende Bash-Shell zu verlassen). -
Führen Sie anschließend die Auflistung der Sitzungen von
screen
erneut durch, beenden Sie die verbleibende Sitzung vonssh
per PID und prüfen Sie, ob tatsächlich keine Sitzungen mehr übrig sind:screen -list
oderscreen -ls
screen -S PID-OF-SESSION -X quit
screen -list
oderscreen -ls
-
-
Installieren Sie
tmux
auf Ihrem Computer (Paketname:tmux
) und führen Sie die folgenden Aufgaben aus:-
Starten Sie das Programm. Welchen Befehl verwenden Sie?
tmux
-
Starten Sie
top
(beachten Sie, wie sich — in ein paar Sekunden — der Name des Fensters in der Statusleiste intop
ändert):top
-
Öffnen Sie unter Verwendung des Befehlspräfixes von tmux ein neues Fenster; öffnen Sie
~/.tmux.conf
unter Verwendung vonnano
:Strg+b-c
nano ~/.tmux.conf
-
Teilen Sie das Fenster vertikal und verkleinern Sie die Größe des neu erstellten Fensters einige Male:
Strg+b-"
Strg+b-Strg+↓
-
Ändern Sie nun den Namen des aktuellen Fensters in
text editing
; lassen Sie danntmux
eine Liste mit all seinen Sitzungen anzeigen:Strg+b-,. Dann geben wir den neuen Namen ein und drücken Enter. Strg+b-s oder
tmux ls
. -
Gehen Sie mit der gleichen Tastenkombination in das Fenster, in dem
top
läuft und zurück in das aktuelle Fenster:Strg+b-n oder Strg+b-p
-
Lösen Sie sich von der aktuellen Sitzung und erstellen Sie eine neue, deren Name
ssh
und deren Fensternamessh window
lautet:Strg+b-d
tmux neu -s "ssh" -n "ssh window"
-
Lösen Sie sich nun auch von der
ssh
-Sitzung und lassen Sietmux
die Liste der Sitzungen erneut anzeigen:Strg+b-d
tmux ls
NoteVon diesem Punkt an erfordert die Übung, dass Sie eine fernverbundene Maschine für
ssh
Verbindungen von Ihrem lokalen Host aus erreichen können (eine virtuelle Maschine ist vollkommen ausreichend und kann sich als durchaus praktisch erweisen). Stellen Sie sicher, dass auf Ihrem lokalen Rechner einopenssh-server
installiert ist und läuft sowie auf dem entfernten Rechner mindestens deropenssh-client
installiert ist. -
Starten Sie nun den entfernten Rechner und verbinden Sie sich über
ssh
auf Ihrem lokalen Rechner. Sobald die Verbindung hergestellt ist, überprüfen Sie, ob Sitzungen vontmux
vorhanden sind:Auf dem entfernten Rechner:
ssh local-username@local-ipaddress
. Sobald eine Verbindung zur lokalen Maschine besteht:tmux ls
. -
Fügen Sie nun, auf dem entfernten Rechner, die
ssh
-Sitzung anhand dessen Namen an:tmux a -t ssh
(a
kann durchat
oderattach
ersetzt werden). -
Zurück an Ihrem lokalen Rechner, fügen Sie die
ssh
-Sitzung anhand dessen Namen an, aber stellen Sie sicher, dass die Verbindung zum entfernten Rechner zuvor beendet wurde:tmux a -d -t ssh
(a
kann durchat
oderattach
ersetzt werden). -
Lassen Sie sich alle Sitzungen zur Auswahl anzeigen und gehen Sie zu Ihrer ersten Sitzung (
[0]
). Dort eingeloggt, beenden Sie die Sitzungssh
anhand des Namens:Wir tippen Strg+b-s, benutzen die Pfeiltasten, um die Sitzung
0
auszuwählen und drücken Enter.tmux kill-session -t ssh
. -
Lösen Sie sich schließlich von der aktuellen Sitzung und beenden Sie diese per Namen:
Strg+b-d
tmux kill-session -t 0
.
-
Lösungen zu den offenen Übungen
-
Sowohl
screen
als auchtmux
können durch Befehlspräfix + : in den Kommandozeilenmodus gelangen (hierzu haben wir bereits ein kurzes Beispiel mittmux
gesehen). Stellen Sie einige Nachforschungen an und führen Sie die folgenden Aufgaben im Kommandozeilenmodus aus:-
screen
in den Kopiermodus bringen:Strg+a-: — dann tippen wir
copy
. -
Lassen Sie
tmux
das aktuelle Fenster umbenennen:Strg+b-: — dann geben wir
rename-window
ein. -
Veranlassen Sie
screen
alle Fenster zu schließen und die Sitzung zu beenden:Strg+a-: — dann tippen wir
quit
. -
Lassen Sie
tmux
einen Fensterbereich in zwei Teile spalten:Strg+b-: — dann tippen wir
split-window
. -
Lassen Sie
tmux
das aktuelle Fenster beenden:Strg+b-: — dann geben wir
kill-window
ein.
-
-
Wenn Sie den Kopiermodus in
screen
aufrufen, können Sie nicht nur die Pfeiltasten und PgUp oder PgDown benutzen, um durch das aktuelle Fenster und den Scrollback-Puffer zu navigieren. Es besteht auch die Möglichkeit, einenvi
-ähnlichen Vollbildeditor zu verwenden. Führen Sie mit diesem Editor die folgenden Aufgaben aus:-
Wiedergabe von
supercalifragilisticexpialidocious
in Ihremscreen
-Terminal:echo supercalifragilisticexpialidocious
-
Kopieren Sie nun die fünf aufeinanderfolgenden Zeichen (von links nach rechts) in die Zeile rechts über Ihrem Cursor:
Wir gehen in den Kopiermodus: Strg+a-[ oder Strg+a-: und geben dann
copy
ein. Dann gehen wir mitk
in die Zeile darüber und drücken Leertaste, um den Beginn der Auswahl zu markieren. Schließlich gehen wir mitl
vier Zeichen weiter und drücken erneut Leertaste, um das Ende der Auswahl zu markieren. -
Abschließend fügen Sie die Auswahl (
stice
) wieder in Ihre Eingabeaufforderung ein:Strg+a-]
-
-
Angenommen, Sie wollen eine
tmux
-Sitzung (our_session
) mit einem anderen Benutzer teilen. Sie haben den Socket (/tmp/our_socket
) mit den richtigen Rechten so erstellt, dass sowohl Sie als auch der andere Benutzer diesen lesen und schreiben kann. Welche beiden anderen Bedingungen müssen erfüllt sein, damit der zweite Benutzer die Session erfolgreich übertmux -S /tmp/our_socket a -t our_session
anhängen kann?Beide Benutzer müssen eine Gruppe gemeinsam haben, z.B.
Multiplexer
. Dann müssen wir auch den Socket in diese Gruppe einbeziehen:chgrp multiplexer /tmp/our_socket
.