Linux / Befehl screen: Erstellen und Verwalten abtrennbarer Terminal-Sitzungen

screen ist ein Terminal-Multiplexer, der es Ihnen ermöglicht, mehrere virtuelle Terminals innerhalb eines einzelnen physischen Terminals zu erstellen und Sitzungen zu trennen und später wieder anzuhängen. Es ist nützlich, wenn Sie eine interaktive Arbeitsumgebung aufrechterhalten müssen, selbst wenn Ihre SSH-Verbindung abbricht. Der grundlegende Ablauf ist: Sitzung erstellen → Aufgaben ausführen → mit Strg+a dann d trennen → mit screen -r wieder verbinden.

Wenn Ihr Ziel lediglich darin besteht, nicht-interaktive Befehle im Hintergrund auszuführen, könnte nohup einfacher sein. Andererseits, wenn Sie den laufenden Bildschirm wieder öffnen müssen, um Befehle einzugeben, ist screen oder tmux geeignet.

Wann wird Screen verwendet?

GNU Screen multiplexiert ein einzelnes Terminal in virtuelle Terminals, die von mehreren Prozessen genutzt werden. Programme in jedem Fenster laufen weiter, auch wenn sie auf dem screen nicht sichtbar sind oder die gesamte Sitzung getrennt ist. Detailliertes Verhalten und alle Befehle finden sich in der offiziellen GNU Screen-Dokumentation.

  • Beim Ausführen von lang laufenden Aufgaben wie Kompilierung, Datenverarbeitung oder Backups auf einem über SSH zugänglichen Server
  • Wenn Sie den Task-Screen trennen und von einem anderen Computer wieder verbinden müssen
  • Beim Bedienen mehrerer Terminalfenster wie Shells, Log-Monitoring und Editoren innerhalb einer einzigen SSH-Verbindung
  • Wenn Sie später den Bildschirm eines laufenden interaktiven Programms überprüfen müssen

screen-Sitzungen können einen Serverneustart nicht überstehen, und sie starten auch nicht automatisch neu, wenn ein Programm ausfällt. Für kontinuierliche Dienste verwenden Sie einen Dienstmanager wie systemd.

Installation und Start Ihrer ersten Sitzung

screen installieren

Installieren Sie ihn mit dem Paketmanager entsprechend Ihrer Distribution. Möglicherweise benötigen Sie Administratorrechte.

sudo apt update
sudo apt install screen
sudo dnf install screen
sudo pacman -S screen

Sie können den Installationsstatus und die Version wie folgt überprüfen.

screen --version

Erstellen einer benannten Sitzung

Die Verwendung der Option -S zum Benennen der Sitzung erleichtert es, zwischen mehreren Aufgaben zu unterscheiden. Verwenden Sie eine kurze Zeichenfolge für den Namen, die den Zweck der Aufgabe widerspiegelt.

screen -S backup

Wenn ein neues Screen-Fenster geöffnet wird, führen Sie die Befehle darin wie gewohnt aus. Sie können überprüfen, ob das aktuelle Shell-Fenster innerhalb von Screen ist, indem Sie Umgebungsvariablen verwenden.

printf '%s\n' "$STY"

Starten einer Sitzung mit einem Befehl

Sie können auch ein Programm angeben, das beim Erstellen einer Sitzung ausgeführt werden soll.

screen -S backup ./backup.sh

Wenn das angegebene Programm beendet ist und keine weiteren Fenster in der Sitzung vorhanden sind, kann die Screen-Sitzung ebenfalls enden. Wenn Sie die Ergebnisse auf dem Bildschirm nach Abschluss der Arbeit überprüfen müssen, ist es bequemer, zuerst eine Shell-Sitzung zu erstellen und dann die Befehle darin auszuführen.

Häufig verwendete screen-Tastenkombinationen

Drücken Sie zuerst Strg+a, lassen Sie die Tasten los und drücken Sie dann die Befehlstaste. Die Groß- und Kleinschreibung der zweiten Taste ist wichtig: d, c, n, p, k und a werden ohne Umschalttaste eingegeben; A zum Umbenennen und H für die Protokollierung dagegen mit Umschalttaste. Die Präfixtaste selbst benötigt keine Umschalttaste.

Schnelltasten Funktion Beschreibung
Strg+a, d Sitzung trennen Beenden Sie das aktuelle Terminal, während das Programm weiterläuft.
Strg+a, c Neues Fenster erstellen Erstellen Sie ein neues Shell-Fenster in der aktuellen Sitzung.
Strg+a, n Nächstes Fenster Wechseln Sie zum nächsten virtuellen Terminalfenster.
Strg+a, p Vorheriges Fenster Zum vorherigen virtuellen Terminalfenster wechseln.
Strg+a, " Fensterliste Wählen Sie das Fenster aus der Liste aus, das Sie wechseln möchten.
Strg+a, A Fenster umbenennen Geben Sie dem aktuellen Fenster einen leicht erkennbaren Titel.
Strg+a, [ Kopier-/Scrollmodus Durchsuchen Sie vorherige Ausgaben oder kopieren Sie Text.
Strg+a, H Protokollierung umschalten Starten oder stoppen Sie die Protokollierung der Ausgabe des aktuellen Fensters in eine Protokolldatei.
Strg+a, k Aktuelles Fenster schließen Nach Bestätigung das aktuelle virtuelle Fenster entfernen.
Strg+a, ? Hilfe Zeigt die aktuelle Liste der Tastenkombinationen an.

Wenn Sie Strg+a an das Programm selbst senden müssen, verwenden Sie Strg+a gefolgt von a. Tastenkombinationen können je nach .screenrc-Konfiguration variieren.

Eine Sitzung trennen und wieder verbinden

Trennen und die Arbeit beibehalten

Drücken Sie Strg+a gefolgt von d innerhalb einer Screen-Sitzung, um die Sitzung zu trennen. Nach dem Trennen laufen die Programme innerhalb der Sitzung weiter, selbst wenn die SSH-Verbindung geschlossen wird.

Selbst wenn die Terminalverbindung unerwartet verloren geht, wird die Sitzung automatisch getrennt, wenn die Standardoption autodetach aktiviert ist.

Die Liste der Sitzungen prüfen

screen -ls

Die Ausgabe zeigt Sitzungskennungen und -status wie Detached und Attached. Wenn mehrere Sitzungen vorhanden sind, müssen Sie den Namen oder die vollständige Kennung angeben, um sich zu verbinden.

Wiederanmelden an eine getrennte Sitzung

screen -r backup

Wenn eine Sitzung mit einem anderen Terminal verbunden ist, überprüfen Sie zuerst die Liste. Verwenden Sie das folgende Formular nur, wenn Sie sicher sind, dass Sie die vorherige Verbindung trennen und mit dem aktuellen Terminal verbinden möchten.

screen -d -r backup

-d -r kann die normalen Arbeitsbildschirme anderer Benutzer unterbrechen, daher seien Sie vorsichtig bei gemeinsam genutzten Konten oder in kollaborativen Umgebungen.

Mehrere Fenster in einer Sitzung verwenden

Erstellen und Benennen von Fenstern

Nachdem Sie ein neues Fenster mit Strg+a, c erstellt haben, können Sie es mit Strg+a, A benennen. Zum Beispiel können Sie das erste Fenster verwenden, um Aufgaben auszuführen, das zweite Fenster, um Protokolle zu überprüfen, und das dritte Fenster, um den Systemstatus zu überwachen.

Zwischen Fenstern wechseln

Sie können zum nächsten oder vorherigen Fenster mit Strg+a, n und Strg+a, p wechseln. Wenn es viele Fenster gibt, ist es schneller, die Liste mit Strg+a, " zu öffnen und das gewünschte Fenster auszuwählen.

Fenster und Sitzungen ordnungsgemäß schließen

Die Ausführung von exit in der aktuellen Shell wird dieses Fenster schließen. Wenn das letzte Fenster geschlossen wird, endet auch die Screen-Sitzung.

exit

Wenn Sie eine Sitzung einfach nur trennen möchten, sollten Sie Strg+a, d anstelle von exit verwenden. Das gewaltsame Schließen eines Fensters mit laufenden Programmen kann deren Arbeitsergebnisse beschädigen.

Verwendung von Bildlauf und Protokollverlauf

Durchsuchen vorheriger Ausgaben

Drücken Sie Strg+a, [, um in den Kopier-/Scroll-Modus zu wechseln. Sie können die Pfeiltasten, Bild auf und Bild ab verwenden, um vorherige Ausgaben anzusehen, und Esc drücken, um zu beenden. Die Anzahl der gespeicherten Zeilen wird durch die Einstellungen und die -h-Option beeinflusst.

screen -h 10000 -S analysis

Fensterausgabe in eine Datei aufzeichnen

Drücken Sie Strg+a, H, um die Protokollierung der Ausgabe des aktuellen Fensters ein- oder auszuschalten. Der Standardname der Protokolldatei ist normalerweise screenlog.0, und Sie können auch die automatische Protokollierung beim Start einer neuen Sitzung aktivieren.

screen -L -Logfile backup-screen.log -S backup

Protokolle können Passwörter, Token und persönliche Informationen enthalten, die auf dem Bildschirm angezeigt werden. Überprüfen Sie den Speicherort und die Dateiberechtigungen, und erstellen Sie bei lang laufenden Aufgaben eine separate Aufbewahrungsrichtlinie, um zu verhindern, dass Protokolle unbegrenzt wachsen.

Problemsituationen und Sicherheitsvorkehrungen

Wenn eine Sitzung im angehängten Zustand verbleibt

Unmittelbar nach einer Netzwerkunterbrechung kann eine Sitzung Attached verbleiben. Überprüfen Sie zunächst, ob sie tatsächlich an einem anderen Terminal verwendet wird, lösen Sie dann die vorherige Anzeige mit screen -d -r session_name und verbinden Sie sie mit dem aktuellen Terminal.

Dead oder unzugängliche Sitzungseinträge können mit screen -wipe bereinigt werden, nachdem gründlich bestätigt wurde, dass keine Prozesse laufen.

Zugriffsberechtigungen für Sitzungen desselben Kontos

screen-Sitzungen folgen den Berechtigungen des Betriebssystem-Benutzerkontos. Wenn mehrere Personen dasselbe Konto verwenden, können andere sich wieder mit der Sitzung verbinden. Vermeiden Sie daher das Teilen von Konten und trennen Sie SSH-Schlüssel von Kontoberechtigungen. Es ist auch wichtig, die Sitzung nicht mit einer administrativen Shell oder einem sensiblen Bildschirm offen zu lassen, wenn Sie abwesend sind.

Vergleich von screen, nohup, tmux, systemd

Werkzeuge Geeignete Aufgaben Hauptmerkmale
screen Interaktive Terminalaufgaben, die eine Wiederverbindung erfordern Unterstützt das Trennen der Sitzung, die Wiederverbindung und mehrere Fenster.
tmux Interaktive Aufgaben und komplexes Bildschirm-Splitting Umfangreiche Funktionen zum Verwalten von Fenstern und Panels, mit umfangreichen Anpassungsoptionen für den Benutzer.
nohup Einfache nicht-interaktive Batch-Aufgaben Ignoriert SIGHUP, stellt jedoch den Terminalbildschirm nicht wieder her.
systemd Dienste, die immer ausgeführt werden müssen Sie können die Boot-Verknüpfung, Neustart bei Fehlern, Abhängigkeiten und Protokollverwaltung konfigurieren.

Sie können sehen, wie nicht-interaktive Aufgaben auch nach Schließen des Terminals ausgeführt werden können in So verwenden Sie den nohup-Befehl.

Häufig gestellte Fragen

Wird die Aufgabe fortgesetzt, auch wenn die SSH-Verbindung getrennt wird?

Wenn das automatische Trennen von Screen ordnungsgemäß funktioniert und der Server weiterhin läuft, werden die Programme innerhalb der Sitzung ebenfalls beibehalten. Dies verhindert jedoch keine Server-Neustarts, Fehler im Prozess selbst oder das Beenden durch den Administrator.

Was soll ich tun, wenn mehrere Sitzungen erscheinen, wenn ich screen -r verwende?

Nachdem Sie die Liste mit screen -ls überprüft haben, geben Sie den Sitzungsnamen oder die vollständige Kennung wie screen -r backup an. Das Erstellen von Sitzungen mit aussagekräftigen Namen kann Auswahlfehler reduzieren.

Was soll ich tun, wenn Strg+a mit einer Programmtastebelegung in Konflikt steht?

Sie können das Strg+a-Zeichen an das Programm senden, indem Sie a nach Strg+a drücken. Um die Befehlstaste von Screen selbst zu ändern, können Sie die -e-Option verwenden oder sie in .screenrc konfigurieren, aber Sie müssen auch die gemeinsame Dokumentation und die Tastenkombinationen im Team anpassen.

Können Screen-Sitzungen nach einem Neustart wiederhergestellt werden?

Nein. Screen verwaltet nur die Prozesse und virtuellen Terminals auf einem laufenden System; es stellt Sitzungen und Prozesse nach einem Neustart nicht automatisch wieder her. Wenn Sie einen automatischen Start nach einem Neustart benötigen, konfigurieren Sie den Dienst mit systemd oder verwenden Sie einen für den Job geeigneten Scheduler.

Zusammenfassung

Die grundlegende Verwendung besteht darin, eine Sitzung mit screen -S name zu erstellen, sich mit Strg+a, d zu trennen und sich mit screen -r name wieder zu verbinden. Durch die Verwendung mehrerer Fenster und der Protokollierungsfunktion können Sie selbst über instabile Remoteverbindungen hinweg systematisch interaktiv weiterarbeiten.

Screen ist jedoch kein Dienstüberwachungstool. Programme, die eine Neustartintegration oder automatische Wiederherstellung erfordern, sollten mit einem Service-Manager betrieben werden, und Screen sollte für Terminalaufgaben verwendet werden, bei denen eine Person sich wieder verbinden und bedienen muss.