Der Linux-Befehl ’screen‘: Hintergrundaufgaben und mehr
Mit dem Linux-Befehl screen
können Sie Terminalanwendungen, die gerade laufen, in den Hintergrund verschieben und bei Bedarf wieder hervorholen. Er ermöglicht auch Split-Screen-Ansichten und funktioniert über SSH-Verbindungen, selbst wenn die Verbindung zwischenzeitlich getrennt wurde!
Was genau bewirkt der Befehl ’screen‘?
Der Befehl screen
ist ein Terminal-Multiplexer mit einer Fülle von Funktionen. Er kann weitaus mehr, als man auf den ersten Blick vermutet. Allein die Manpage umfasst über 4100 Zeilen.
Hier sind einige der häufigsten Anwendungsfälle für den Befehl screen
, die wir in diesem Artikel genauer betrachten:
- Ein neues Fenster mit einer Shell starten, einen Befehl ausführen und das Fenster dann in den Hintergrund verschieben (auch „Abkoppeln“ genannt). So können Sie Prozesse beobachten, ohne das Terminal schließen zu müssen, was besonders bei langwierigen Prozessen hilfreich ist.
- Nachdem eine
screen
-Sitzung läuft, können neue Fenster gestartet und weitere Prozesse ausgeführt werden. Sie können dann einfach zwischen den Fenstern wechseln, um den Fortschritt zu verfolgen. Das Terminalfenster kann in vertikale oder horizontale Bereiche unterteilt werden, um die verschiedenenscreen
-Fenster gleichzeitig anzuzeigen. - Sie können eine Verbindung zu einem entfernten Rechner herstellen, eine
screen
-Sitzung starten und einen Prozess anstoßen. Selbst wenn die Verbindung zum Remote-Host unterbrochen wird, läuft der Prozess weiter. Bei erneuter Verbindung ist alles noch da. - Eine
screen
-Sitzung kann mit einer zweiten SSH-Verbindung gemeinsam genutzt werden, sodass zwei Benutzer in Echtzeit dieselben Aktionen verfolgen können.
Installation von ’screen‘
Um screen
unter Ubuntu zu installieren, verwenden Sie folgenden Befehl:
sudo apt-get install screen
Für Manjaro lautet der Befehl:
sudo pacman -Sy screen
Unter Fedora verwenden Sie:
sudo dnf install screen
Erste Schritte mit ’screen‘
Um screen
zu starten, geben Sie einfach screen
ein und drücken Sie die Eingabetaste:
screen
Es wird eine Seite mit Lizenzinformationen angezeigt. Drücken Sie die Leertaste, um die zweite Seite zu lesen, oder die Eingabetaste, um zur Eingabeaufforderung zurückzukehren.
Sie sind zurück an der Eingabeaufforderung und es scheint nicht viel passiert zu sein. Sie haben aber jetzt eine Shell in einem Multiplex-Terminalemulator aktiv. Warum ist das nützlich? Starten wir einen Prozess, der einige Zeit in Anspruch nimmt. Wir laden den Quellcode für den aktuellen Linux-Kernel herunter und speichern ihn in einer Datei namens latest_kernel.zip
.
Dazu geben wir Folgendes ein:
curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip
Der Download beginnt und die Ausgabe von curl
zeigt den Fortschritt.
Den nächsten Schritt können wir nicht als Bild zeigen, da er eine Tastenkombination erfordert. Geben Sie Strg+A
ein, lassen Sie diese Tasten los und drücken Sie dann d
, um screen
abzukoppeln.
Der Download-Prozess läuft weiterhin, aber das Fenster mit dem Download wird entfernt. Sie sind zurück im Terminalfenster, von dem aus Sie die screen
-Sitzung gestartet haben. Eine Nachricht informiert Sie, dass ein screen
-Fenster mit der Bezeichnung 23167.pts-0.wdzwdz
abgetrennt wurde.
Sie benötigen die Nummer am Anfang des Fensternamens, um das Fenster wieder anzuhängen. Wenn Sie die Nummer vergessen, können Sie jederzeit die Option -ls
(Liste) verwenden, um eine Liste der abgetrennten Fenster zu erhalten:
screen -ls
Um eine Sitzung wieder anzuhängen, verwenden Sie die Option -r
(reattach) und die Nummer der Sitzung, wie folgt:
screen -r 23167
Das Fenster, das im Hintergrund gearbeitet hat, wird wieder in Ihr Terminalfenster geholt, als wäre es nie weg gewesen.
Wenn es ein Prozess ist, der ein Ende hat, wird er irgendwann beendet sein. Handelt es sich um einen fortlaufenden Prozess, möchten Sie ihn eventuell stoppen. In beiden Fällen können Sie exit
eingeben, um den screen
zu verlassen, oder Strg+A
und dann K
drücken, um ein Fenster zwangsweise zu schließen.
Geben Sie folgenden Befehl ein:
exit
Sie kehren zum vorherigen Terminalfenster zurück, in dem noch der Befehl angezeigt wird, mit dem Sie das Fenster angehängt haben. Da das einzige abgetrennte Fenster geschlossen wurde, wird eine Meldung angezeigt, dass screen
beendet wird.
Benannte ’screen‘-Sitzungen
Sie können die Option -S
(Sitzungsname) verwenden, um Ihre screen
-Sitzung zu benennen. Ein einprägsamer Name anstelle der numerischen Kennung erleichtert das Wiederverbinden mit einer Sitzung. Um die Sitzung bigfile
zu nennen, geben wir Folgendes ein:
screen -S bigfile
Nach dem Start von screen
sehen wir ein leeres Fenster mit einer Eingabeaufforderung. Um einen langwierigen Prozess zu simulieren, laden wir eine große Datei herunter.
Wir geben folgendes ein:
curl https://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
Nach dem Start des Downloads drücken wir Strg+A
und dann D
, um die Sitzung zu trennen. Mit screen -ls
können wir die Details der getrennten Sitzung anzeigen:
screen -ls
Hinter der numerischen Kennung (23266) sehen wir den Namen der Session (bigfile
). Um die Sitzung wieder anzuhängen, geben wir den Sitzungsnamen an:
screen -r bigfile
Wir sind nun wieder mit unserem Download-Fenster verbunden und sehen, dass der Download noch läuft.
Nach Abschluss des Downloads geben wir exit
ein, um das Sitzungsfenster zu schließen.
’screen‘ mit mehreren Fenstern
Bisher haben wir screen
verwendet, um einen einzelnen Prozess in einem abgetrennten Fenster im Hintergrund auszuführen. screen
kann jedoch noch mehr. Nun starten wir mehrere Prozesse, um verschiedene Aspekte unseres Systems zu überwachen.
Wir geben Folgendes ein, um eine screen
-Sitzung namens monitor
zu starten:
screen -S monitor
An der Eingabeaufforderung starten wir dmesg
mit den Optionen -H
(für menschenlesbare Ausgabe) und -w
(auf neue Nachrichten warten). Dies zeigt die Kernel-Puffer-Meldungen; neue Nachrichten werden angezeigt, sobald sie eintreffen.
Wir geben folgendes ein:
dmesg -H -w
Die vorhandenen Meldungen werden angezeigt. Wir kehren nicht zur Eingabeaufforderung zurück, da dmesg
auf neue Nachrichten wartet und diese anzeigt, sobald sie eintreffen.
Wir möchten eine weitere Anwendung ausführen, also benötigen wir ein neues screen
-Fenster. Wir drücken Strg+A
und dann C
, um ein neues Fenster zu erstellen. Wir verwenden watch
, um wiederholt vmstat
auszuführen und eine regelmäßig aktualisierte Anzeige des virtuellen Speichers zu erhalten.
An der neuen Eingabeaufforderung geben wir Folgendes ein:
watch vmstat
Die Ausgabe von vmstat
wird alle zwei Sekunden angezeigt und aktualisiert.
Unsere beiden Prozesse laufen jetzt. Um zwischen den screen
-Fenstern zu wechseln, drücken Sie Strg+A
und die Nummer des Fensters. Das erste Fenster ist Null (0), das nächste ist Fenster 1 usw. Um zum ersten Fenster (dem dmesg
-Fenster) zu springen, drücken wir Strg+A
und 0
.
Wenn wir Strg+A
und 1
drücken, gelangen wir zurück zum vmstat
-Fenster.
Das ist schon sehr nützlich! Wir können Strg+A
und dann D
drücken, um diese Sitzung zu verlassen; sie kann später wieder angehängt werden. Beide Sitzungen laufen aber im Hintergrund weiter. Um zwischen den Fenstern zu wechseln, drücken wir erneut Strg+A
und die Nummer (0 oder 1) des Fensters, zu dem wir wechseln möchten.
Im nächsten Schritt zeigen wir beide Bildschirme in einem Fenster an. Dafür sollte das Terminalfenster auf eine Größe gebracht werden, die das Teilen nützlich macht. Unsere Beispiele sind auf die Größe der Screenshots beschränkt, sodass die Fenster etwas eng aussehen werden.
Drücken Sie dazu Strg+A
und dann Umschalt+S
(ein großes „S“ ist erforderlich).
Das Fenster wird in zwei „Regionen“ aufgeteilt.
Der obere Bereich zeigt weiterhin vmstat
an und der untere Bereich ist leer. Der Cursor ist auf dem Screenshot hervorgehoben. Um den Cursor in den unteren Bereich zu verschieben, drücken wir Strg+A
und dann Tab
.
Der Cursor befindet sich nun im unteren Bereich, der allerdings leer ist. Da es keine Shell ist, können wir nichts eingeben. Um im unteren Bereich eine nützliche Ansicht zu erhalten, drücken wir Strg+A
und dann 0
, um das dmesg
-Fenster anzuzeigen.
Dadurch erhalten wir die Live-Ausgaben beider Prozesse in einem geteilten Fenster. Wenn wir Strg+A
und D
drücken, um das Fenster zu trennen und dann wieder anzuhängen, geht die geteilte Ansicht verloren. Wir können sie jedoch mit den folgenden Tastenkombinationen wiederherstellen:
Strg+A, S
: Fenster horizontal teilen.Strg+A, Tab
: In den unteren Bereich wechseln.Strg+A, 0
: Fenster Null im unteren Bereich anzeigen.
Wir können noch einen Schritt weitergehen. Nun teilen wir den unteren Bereich vertikal auf und fügen der Anzeige einen dritten Prozess hinzu. Mit dem Cursor im unteren Bereich drücken wir Strg+A
und C
, um ein neues Fenster mit einer Shell darin zu erstellen. Der untere Bereich zeigt das neue Fenster und eine Eingabeaufforderung.
Als nächstes führen wir den Befehl df
aus, um die Dateisystemnutzung zu überprüfen:
df
Sobald wir sehen, dass df
ausgeführt wird, drücken wir Strg+A
und das Pipe-Zeichen (|
). Dadurch wird der untere Bereich vertikal geteilt. Wir drücken Strg+A
und Tab
, um in die neue Region zu wechseln. Als nächstes drücken wir Strg+A
und 0
, um das dmesg
-Fenster anzuzeigen.
Sie können beliebig zwischen Regionen wechseln und weitere vertikale oder horizontale Teilungen hinzufügen. Hier sind einige weitere hilfreiche Tastenkombinationen:
Strg+A, Strg+A
: Wechseln Sie zwischen der aktuellen und der vorherigen Region.Strg+A, Q
: Schließt alle Regionen außer der aktuellen.Strg+A, X
: Schließt die aktuelle Region.
’screen‘ über SSH
Mit screen
können Sie eine Fenstersitzung starten, abkoppeln, um sie im Hintergrund laufen zu lassen, sich ab- und wieder anmelden und die Sitzung erneut anhängen.
Stellen Sie mit dem Befehl ssh
eine SSH Verbindung zu einem anderen Rechner her. Wir müssen den Namen des Kontos, mit dem wir uns anmelden wollen, und die Adresse des Remote-Computers angeben.
In unserem Beispiel geben wir Folgendes ein:
ssh [email protected]
Nach der Authentifizierung und Anmeldung auf dem Remote-Rechner geben wir Folgendes ein, um eine screen
-Sitzung namens ssh-geek
zu starten:
screen -S ssh-geek
Als Beispiel führen wir top
im screen
-Fenster aus, Sie können aber jeden beliebigen langwierigen oder endlosen Prozess starten.
Wir geben folgendes ein:
top
<img src=“data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoYAAAA5CAIAAAAk632nAAALoklEQVR42u3ceVRTVwLH8ZeNhDULhn1RkE1ZDUIKsoWs7CCLrRWtiBRKsWrdaF2qQB0EVEpBsKgsskQ7Yxnn2E5XbXtqHW21naIy1NFqdah/98y/c28CIQwS4VhapvN75/OH8PJe8vI855t33w0MgwULFixYsGCZI4tKrQMAAIBZ8u9pLEgyzJbhkYdTwZsDAEgykgxIMgAAkgxIMpIMAP/3Sf75558vXb58+sw7xN+uXCE/TiPJJa6MnmHeCEqY5VepTFEptFqz3ygC3mAYPcu1+Bd9Im1SZMUCadMC2W92PpIDD5PjYpxKtb/wnjNqBkZutVfMaKv03NK9W0uykGQAgF85ySTD3X39JuTHuZBk9VNlC+a18VjkWfq5tgf8ZFnaWUxyvr8deaJuj99bknX5hVu7