So verwenden Sie den Bildschirmbefehl von Linux


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 verschiedenen screen-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