Der vollständige Leitfaden zu GNU Screen-Befehlen in Linux
GNU Screen ist ein Terminal-Multiplexer, der es Ihnen ermöglicht, mehrere Shell-Sitzungen in einem einzigen Terminalfenster zu erstellen, zu verwalten und beizubehalten. Wenn Sie sich von einer Screen-Sitzung trennen, wird jeder darin laufende Prozess weiter ausgeführt – er übersteht SSH-Verbindungsabbrüche, Netzwerkausfälle und Terminal-Schließungen – und ist in dem Moment, in dem Sie sich wieder verbinden, vollständig zugänglich.
Für alle, die Remote-Server über SSH verwalten, beseitigt diese eine Funktion eine ganze Klasse von Betriebsrisiken: Ein unterbrochener Verbindungsaufbau beendet nicht mehr eine laufende Datenbankmigration, einen mehrstündigen Kompilierungsvorgang oder einen aktiven Log-Überwachungsprozess.
Warum GNU Screen in der modernen Linux-Administration relevant bleibt
Tools wie tmux haben an Popularität gewonnen, aber Screen wird als Standard- oder Beinahe-Standard-Paket auf praktisch jeder Enterprise-Linux-Distribution und jedem minimalen Server-Image ausgeliefert. Wenn Sie sich per SSH in einen Bare-Metal-Rechner oder eine frisch bereitgestellte VPS Hosting-Instanz einloggen, ist Screen fast immer ohne zusätzliche Installation verfügbar. Sein geringer Speicherbedarf und die POSIX-Konformität machen es zur pragmatischen Wahl in eingeschränkten oder gesperrten Umgebungen.
Kernfunktionen auf einen Blick:
- Sitzungspersistenz: Prozesse überleben Terminaltrennungen, SSH-Timeouts und clientseitige Abstürze
- Fenster-Multiplexing: Mehrere unabhängige Shell-Fenster innerhalb einer einzigen Sitzung
- Sitzungsfreigabe: Zwei Benutzer können sich gleichzeitig mit derselben Sitzung verbinden, um gemeinsam zu debuggen
- Serieller Konsolenzugriff: Screen kann sich direkt mit `/dev/ttyS*`-Geräten für die Out-of-Band-Serververwaltung verbinden
- Skriptbarer Start: Die Konfigurationsdatei `.screenrc` ermöglicht vollständig automatisierte Multi-Fenster-Umgebungen beim Start
GNU Screen vs. tmux: Den richtigen Multiplexer wählen
Beide Tools lösen dasselbe Kernproblem, jedoch mit unterschiedlichen Designphilosophien. Die folgende Tabelle zeigt die Unterschiede, die in Produktionsumgebungen relevant sind.
| Funktion | GNU Screen | tmux |
|---|
| — | — | — |
|---|
| Standardverfügbarkeit | Auf den meisten Distros vorinstalliert | Erfordert explizite Installation |
|---|
| Konfigurationsdatei | `~/.screenrc` | `~/.tmux.conf` |
|---|
| Bereichsaufteilung (horizontal/vertikal) | Eingeschränkt (nur vertikal über Bereiche) | Vollständige, flexible Bereichsaufteilung |
|---|
| Sitzungsfreigabe | Natives Multi-Attach | Natives Multi-Attach |
|---|
| Skripting / Automatisierung | `screen -X`-Befehlsinjektion | `tmux send-keys`, umfangreiche API |
|---|
| Speicherbedarf | Sehr gering | Gering |
|---|
| Unterstützung serieller Geräte | Ja (`screen /dev/ttyS0`) | Nein |
|---|
| Statusleisten-Anpassung | Moderat (hardstatus) | Sehr flexibel |
|---|
| Kopiermodus | vi-Stil | vi- oder emacs-Stil |
|---|
| Plugin-Ökosystem | Keines | Aktiv (TPM) |
|---|
| Idealer Anwendungsfall | Minimale Server, serielle Konsolen, Legacy-Umgebungen | Entwickler-Workstations, komplexe Layouts |
|---|
Praktische Empfehlung: Auf einem Headless-Dedicated Server, der langfristige Hintergrundjobs ausführt, macht Screens Einfachheit und universelle Verfügbarkeit es zur reibungsloseren Wahl. Für einen Entwickler, der geteilte Bereiche und eine umfangreiche Statusleiste benötigt, gewinnt tmux.
GNU Screen installieren
Screen ist auf den meisten Distributionen vorinstalliert. Überprüfen Sie dies mit:
“`bash
screen –version
“`
Falls es fehlt, installieren Sie es mit dem entsprechenden Paketmanager:
Debian / Ubuntu:
“`bash
sudo apt-get update && sudo apt-get install screen
“`
CentOS / RHEL 7:
“`bash
sudo yum install screen
“`
CentOS Stream / RHEL 8+ / AlmaLinux / Rocky Linux:
“`bash
sudo dnf install screen
“`
Fedora:
“`bash
sudo dnf install screen
“`
Arch Linux:
“`bash
sudo pacman -S screen
“`
Alpine Linux (häufig in Containern):
“`bash
apk add screen
“`
Nach der Installation ist kein Daemon oder Dienst erforderlich. Screen läuft vollständig als User-Space-Prozess.
Eine Screen-Sitzung starten
Einfache Sitzung
“`bash
screen
“`
Dies öffnet eine neue Sitzung mit einer Standard-Shell. Die Oberfläche ist von einem normalen Terminal nicht zu unterscheiden, bis Sie Screens Befehlspräfix verwenden.
Benannte Sitzung (empfohlen)
“`bash
screen -S session_name
“`
Benennen Sie Ihre Sitzungen in der Produktion immer. Unbenannte Sitzungen werden nur durch ihre PID identifiziert, was die Wiederverbindung fehleranfällig macht, wenn mehrere Sitzungen laufen.
Tipp zur Namenskonvention: Verwenden Sie beschreibende Namen, die die Arbeitslast widerspiegeln – `screen -S db-migration`, `screen -S log-monitor`, `screen -S build-php82`. Das zahlt sich aus, wenn Sie nach stundenlanger Abwesenheit zu einem Server zurückkehren.
Eine Sitzung starten und sofort einen Befehl ausführen
“`bash
screen -S backup-job bash -c 'rsync -avz /data/ user@remote:/backup/ && echo DONE'
“`
Die Sitzung bleibt auch nach Abschluss des Befehls bestehen, sodass Sie die Ausgabe später einsehen können.
Eine Sitzung im getrennten Modus starten
“`bash
screen -dmS headless-job ./long_running_script.sh
“`
Die Flags `-dm` erstellen die Sitzung und trennen sie sofort. Dies ist das richtige Muster zum Starten von Hintergrundjobs aus Cron- oder Deployment-Skripten – der Prozess läuft innerhalb einer benannten, wiederherstellbaren Screen-Sitzung, ohne ein interaktives Terminal zu benötigen.
Das Befehlspräfix: Ctrl+A verstehen
Jede Screen-Tastenkombination beginnt mit der Escape-Sequenz `Ctrl+A`. Dieser Tastendruck teilt Screen mit, dass das nächste Zeichen ein Befehl ist und keine Eingabe für das laufende Programm. Das Verständnis dieses Modells ist wesentlich, bevor man einzelne Tastenkombinationen auswendig lernt.
Wenn Sie ein Programm innerhalb von Screen ausführen, das selbst `Ctrl+A` verwendet (zum Beispiel einige Texteditoren oder die `readline`-Bibliothek), können Sie ein wörtliches `Ctrl+A` an das innere Programm senden, indem Sie `Ctrl+A` zweimal drücken (`Ctrl+A, Ctrl+A`).
Sitzungen trennen und wieder verbinden
Von einer laufenden Sitzung trennen
“`
Ctrl+A, D
“`
Die Sitzung läuft weiterhin im Hintergrund. Sie werden zur übergeordneten Shell zurückgekehrt. Kein Prozess innerhalb der Sitzung wird unterbrochen.
Alle Sitzungen auflisten
“`bash
screen -ls
“`
Beispielausgabe:
“`
There are screens on:
14231.db-migration (Detached)
14089.log-monitor (Attached)
13901.build-php82 (Detached)
3 Sockets in /var/run/screen/S-deploy.
“`
Der Status `Attached` bedeutet, dass ein anderes Terminal derzeit mit dieser Sitzung verbunden ist. `Detached` bedeutet, dass sie läuft, aber kein Terminal verbunden ist.
Erneut mit einer bestimmten Sitzung verbinden
“`bash
screen -r db-migration
“`
Oder nach PID:
“`bash
screen -r 14231
“`
Erzwungenes Verbinden mit einer bereits verbundenen Sitzung
Wenn eine Sitzung `Attached` anzeigt, Sie sie aber übernehmen müssen (zum Beispiel nachdem eine veraltete SSH-Verbindung sie gesperrt hat):
“`bash
screen -d -r log-monitor
“`
Das Flag `-d` trennt die andere Verbindung zwangsweise, bevor Sie wieder verbunden werden. Dies ist eine wichtige Wiederherstellungstechnik, wenn eine vorherige SSH-Sitzung beendet wurde, ohne sich sauber zu trennen.
Multi-Attach: Zwei Benutzer in derselben Sitzung
“`bash
screen -x session_name
“`
Beide Terminals sehen in Echtzeit identische Ausgaben. Dies ist unschätzbar wertvoll für das gemeinsame Debuggen oder geführte Server-Walkthroughs mit einem Kollegen – beide Parteien beobachten und können mit derselben Shell interagieren.
Fenster innerhalb einer Sitzung verwalten
Eine einzelne Screen-Sitzung kann eine unbegrenzte Anzahl von Fenstern enthalten. Jedes Fenster ist eine unabhängige Shell (oder ein Prozess).
Ein neues Fenster erstellen
“`
Ctrl+A, C
“`
Zwischen Fenstern navigieren
| Tastenkombination | Aktion |
|---|
| — | — |
|---|
| `Ctrl+A, N` | Nächstes Fenster |
|---|
| `Ctrl+A, P` | Vorheriges Fenster |
|---|
| `Ctrl+A, 0–9` | Direkt zu Fenster nach Nummer springen |
|---|
| `Ctrl+A, "` | Interaktive Liste aller Fenster |
|---|
| `Ctrl+A, '` | Aufforderung zur Eingabe von Fensternummer oder -name |
|---|
Ein Fenster umbenennen
“`
Ctrl+A, A
“`
Geben Sie den neuen Namen ein und drücken Sie Enter. Aussagekräftige Fensternamen werden in der Hardstatus-Leiste angezeigt, was die Navigation in Sitzungen mit vielen Fenstern erheblich beschleunigt.
Ein Fenster schließen
Geben Sie `exit` ein oder drücken Sie `Ctrl+D` in der Shell des Fensters. Wenn das letzte Fenster einer Sitzung geschlossen wird, wird die Sitzung beendet.
Den Screen in Bereiche aufteilen
Screen unterstützt die Aufteilung des Terminals in mehrere sichtbare Bereiche, von denen jeder gleichzeitig ein anderes Fenster anzeigt.
Horizontal aufteilen (oben/unten)
“`
Ctrl+A, S
“`
Vertikal aufteilen (links/rechts)
“`
Ctrl+A, |
“`
Hinweis: Die vertikale Aufteilung erfordert Screen 4.1.0 oder höher.
Zwischen Bereichen wechseln
“`
Ctrl+A, Tab
“`
Einem Bereich ein Fenster zuweisen
Nachdem Sie den Fokus auf einen Bereich verschoben haben, verwenden Sie `Ctrl+A, "`, um auszuwählen, welches Fenster dort angezeigt werden soll.
Einen Bereich entfernen
“`
Ctrl+A, X (remove current region)
Ctrl+A, Q (remove all regions except current)
“`
Wichtiger Unterschied: Das Entfernen eines Bereichs schließt nicht das darin laufende Fenster. Das Fenster läuft weiter; Sie hören lediglich auf, es in dieser Aufteilung anzuzeigen.
Kopieren und Einfügen (Scrollback-Modus)
Screen verwaltet für jedes Fenster einen Scrollback-Puffer. Um darauf zuzugreifen:
“`
Ctrl+A, [
“`
Dies aktiviert den Kopiermodus. Die Navigation erfolgt mit vi-Tasten:
- `h`, `j`, `k`, `l` — Cursor bewegen
- `Ctrl+F` / `Ctrl+B` — Seite vorwärts / rückwärts
- `/` — Vorwärts suchen
- `?` — Rückwärts suchen
- `Space` — Anfang der Auswahl markieren
- `Space` (erneut) — Ende markieren und in Puffer kopieren
Um den kopierten Text einzufügen:
“`
Ctrl+A, ]
“`
Der Standard-Scrollback-Puffer beträgt 100 Zeilen. Für die Server-Log-Überwachung sollten Sie diesen in `.screenrc` deutlich erhöhen (siehe unten).
Eine Screen-Sitzung sperren
“`
Ctrl+A, X
“`
Die Sitzung wird sofort gesperrt und fordert Ihr Unix-Benutzerpasswort an, bevor der Zugriff gewährt wird. Verwenden Sie dies, wenn Sie sich von einem Terminal entfernen, das mit einem sensiblen Server verbunden ist – es ist schneller als das Schließen der SSH-Verbindung und das erneute Verbinden.
Befehle an eine Sitzung senden, ohne sich zu verbinden
Das Flag `-X` ermöglicht es Ihnen, Screen-Befehle von außen in eine laufende Sitzung einzuschleusen:
“`bash
screen -S db-migration -X stuff "tail -f /var/log/mysql/error.logn"
“`
Der Befehl `stuff` sendet Tastendrücke an das aktive Fenster der benannten Sitzung. `n` simuliert das Drücken von Enter. Diese Technik wird in Deployment-Automatisierungsskripten verwendet, um mit lang laufenden Screen-Sitzungen zu interagieren, ohne dass eine manuelle Verbindung erforderlich ist.
Screen mit .screenrc konfigurieren
Die Datei `~/.screenrc` wird beim Start gelesen und steuert das Standardverhalten von Screen. Eine gut gestaltete `.screenrc` verwandelt Screen von einem einfachen Multiplexer in eine wirklich ergonomische Umgebung.
Erstellen oder bearbeiten Sie sie:
“`bash
nano ~/.screenrc
“`
Empfohlene .screenrc-Konfiguration für die Produktion
“`bash
Disable the startup message
startup_message off
Set scrollback buffer to 10,000 lines (critical for log monitoring)
defscrollback 10000
Enable UTF-8
defutf8 on
Set default shell
shell -$SHELL
Visual bell instead of audible
vbell on
Hardstatus bar: shows hostname, window list, and current time
hardstatus on
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c %{g}]'
Bind F2 to create a new window
bindkey -k k2 screen
Change escape key to Ctrl+B (useful if Ctrl+A conflicts with other tools)
escape ^Bb
Auto-detach on hangup signal (critical for SSH session drops)
autodetach on
Disable flow control (prevents Ctrl+S from freezing the terminal)
defflow off
“`
Die Direktive `autodetach on` ist für die SSH-Nutzung unverzichtbar. Ohne sie kann Screen die Sitzung beenden, anstatt sie zu trennen, wenn Ihre SSH-Verbindung unerwartet abbricht (anstatt dass Sie `Ctrl+A, D` drücken). Mit `autodetach on` löst ein SIGHUP-Signal (das gesendet wird, wenn SSH die Verbindung trennt) eine saubere Trennung anstelle einer Sitzungsbeendigung aus.
`defflow off` verhindert die häufige Frustration, versehentlich `Ctrl+S` zu drücken und das Terminal scheinbar einzufrieren. Viele Administratoren verschwenden Minuten damit, ein „eingefrorenes” Terminal zu debuggen, das sich einfach in der XON/XOFF-Flusskontrollpause befindet.
Praktische Anwendungsfälle in der Produktion
Eine Datenbankmigration sicher ausführen
“`bash
screen -S db-migrate
Inside the session:
php artisan migrate –force 2>&1 | tee /var/log/migration-$(date +%F).log
Detach: Ctrl+A, D
Reattach later to check progress:
screen -r db-migrate
“`
Wenn die SSH-Verbindung während der Migration abbricht, läuft der Prozess weiter. Sie verbinden sich erneut und finden ihn entweder noch laufend oder abgeschlossen, mit vollständiger Ausgabe im Log und im Scrollback-Puffer.
Mehrere Log-Dateien gleichzeitig überwachen
“`bash
screen -S monitoring
Window 0: nginx access log
tail -f /var/log/nginx/access.log
Ctrl+A, C — new window
Window 1: application error log
tail -f /var/log/app/error.log
Ctrl+A, C — new window
Window 2: system messages
journalctl -f
“`
Navigieren Sie mit `Ctrl+A, "` zwischen den Fenstern, um zu sehen, welches Log Aktivität erzeugt.
Automatisiertes Deployment-Skript mit Screen
“`bash
#!/bin/bash
screen -dmS deploy bash -c '
git pull origin main &&
composer install –no-dev &&
php artisan config:cache &&
systemctl reload php8.2-fpm &&
echo "Deployment complete at $(date)" >> /var/log/deploy.log
'
echo "Deployment started in background screen session 'deploy'"
echo "Monitor with: screen -r deploy"
“`
Dieses Muster ist besonders nützlich auf einem VPS mit cPanel, wo Sie möglicherweise mehrere Anwendungs-Deployments von einer einzigen administrativen Shell aus verwalten.
Serieller Konsolenzugriff
“`bash
screen /dev/ttyS0 115200
“`
Screen fungiert auch als serieller Terminal-Emulator. Dies ist die Standardtechnik für den Zugriff auf die Konsole eines physischen Servers, eines Netzwerk-Switches oder eines eingebetteten Geräts über eine serielle Verbindung – ohne minicom oder picocom zu benötigen.
Häufige Fallstricke und wie man sie vermeidet
Verschachtelte Screen-Sitzungen: Wenn Sie von einer Screen-Sitzung auf Maschine A per SSH in Maschine B einloggen und dort Screen starten, haben Sie nun zwei Ebenen der `Ctrl+A`-Verarbeitung. Die innere Screen-Sitzung erfasst `Ctrl+A`, bevor die äußere es sieht. Um `Ctrl+A` an die äußere Sitzung zu senden, drücken Sie `Ctrl+A, Ctrl+A`. Um Verwirrung zu vermeiden, ändern Sie die Escape-Taste der inneren Sitzung in ihrer `.screenrc` mit `escape ^Bb`.
Tote Sitzungen werden nicht bereinigt: Wenn Screen abstürzt oder der Host unsauber neu startet, können Socket-Dateien in `/var/run/screen/` oder `~/.screen/` bestehen bleiben und Sitzungen als `Dead` anzeigen. Bereinigen Sie diese mit:
“`bash
screen -wipe
“`
Sitzung gehört root vs. Benutzer: Eine als root gestartete Screen-Sitzung kann nicht von einem Nicht-Root-Benutzer wieder verbunden werden und umgekehrt. Wenn Sie innerhalb einer Screen-Sitzung `sudo su` ausführen und sich dann trennen, verbinden Sie sich als root oder über `sudo screen -r` erneut.
Nichtübereinstimmung der `TERM`-Variable: Einige Anwendungen innerhalb von Screen verhalten sich falsch, weil `TERM` auf `screen` oder `screen-256color` anstatt auf `xterm-256color` gesetzt ist. Wenn eine TUI-Anwendung falsch dargestellt wird, überprüfen Sie dies mit `echo $TERM` und überschreiben Sie es in `.screenrc` mit `term xterm-256color` falls nötig.
Erschöpfung des Scrollback-Puffers: Der Standard-Scrollback von 100 Zeilen ist für jede ernsthafte Log-Überwachung unzureichend. Setzen Sie immer `defscrollback 10000` oder höher in `.screenrc` auf Servern, die für die aktive Administration verwendet werden.
Kurzreferenz: Wesentliche Screen-Befehle
| Aktion | Befehl / Tastenkombination |
|---|
| — | — |
|---|
| Neue Sitzung starten | `screen` |
|---|
| Benannte Sitzung starten | `screen -S name` |
|---|
| Getrennte Sitzung starten | `screen -dmS name` |
|---|
| Sitzungen auflisten | `screen -ls` |
|---|
| Nach Name erneut verbinden | `screen -r name` |
|---|
| Erzwungene Wiederverbindung | `screen -d -r name` |
|---|
| Multi-Attach | `screen -x name` |
|---|
| Trennen | `Ctrl+A, D` |
|---|
| Neues Fenster | `Ctrl+A, C` |
|---|
| Nächstes Fenster | `Ctrl+A, N` |
|---|
| Vorheriges Fenster | `Ctrl+A, P` |
|---|
| Fensterliste | `Ctrl+A, "` |
|---|
| Fenster umbenennen | `Ctrl+A, A` |
|---|
| Horizontal aufteilen | `Ctrl+A, S` |
|---|
| Vertikal aufteilen | `Ctrl+A, | ` |
|---|
| Zwischen Bereichen wechseln | `Ctrl+A, Tab` |
|---|
| Kopier-/Scroll-Modus aktivieren | `Ctrl+A, [` |
|---|
| Puffer einfügen | `Ctrl+A, ]` |
|---|
| Sitzung sperren | `Ctrl+A, X` |
|---|
| Aktuelles Fenster beenden | `Ctrl+A, K` |
|---|
| Gesamte Sitzung beenden | `Ctrl+A, ` |
|---|
| Befehl an Sitzung senden | `screen -S name -X stuff "cmdn"` |
|---|
| Tote Sitzungen bereinigen | `screen -wipe` |
|---|
Deployment-Kontext: Screen in verwalteten Hosting-Umgebungen
Screen arbeitet auf Shell-Ebene und ist daher mit jeder Linux-Umgebung kompatibel, auf die Sie SSH-Zugriff haben. Dies umfasst Bare-Metal-Server, Dedicated Server und Standard-VPS Hosting-Instanzen. Es ist nicht in Shared-Hosting-Umgebungen verfügbar, in denen der SSH-Zugriff eingeschränkt oder nicht vorhanden ist.
Für Workloads, die persistente Hintergrundverarbeitung beinhalten – wie GPU-beschleunigte Modellinferenz, die Vorverarbeitung großer Datensätze oder lang laufende Batch-Jobs – bietet die Kombination von Screen mit einer GPU Hosting-Umgebung sowohl die Rechenressourcen als auch die Sitzungspersistenz, die für die zuverlässige Verwaltung mehrstündiger Jobs erforderlich sind.
Wenn Ihre Infrastruktur webbasierte Dienste neben der Hintergrundverarbeitung umfasst, stellt die Kombination von Screen-verwalteten Backend-Jobs mit ordnungsgemäß gesicherten SSL-Zertifikaten auf Ihren öffentlichen Endpunkten sicher, dass der gesamte Stack – sowohl die sichtbare Anwendungsschicht als auch das administrative Backend – mit angemessenen Sicherheitskontrollen betrieben wird.
Entscheidungsmatrix: Wann Screen verwendet werden sollte
Verwenden Sie Screen, wenn:
- Sie Sitzungspersistenz auf einem Server benötigen, auf dem nur Screen verfügbar ist
- Sie auf eine serielle Konsole oder ein eingebettetes Gerät zugreifen
- Sie einen einzelnen lang laufenden Prozess ausführen und keine geteilten Bereiche benötigen
- Sie sich auf einem minimalen Alpine- oder BusyBox-basierten System befinden
- Sie eine Sitzung in Echtzeit mit einem anderen Administrator teilen müssen
Ziehen Sie stattdessen tmux in Betracht, wenn:
- Sie flexible horizontale und vertikale Bereichsaufteilung benötigen
- Sie ein Plugin-Ökosystem für Statusleisten-Erweiterungen möchten
- Sie eine Entwickler-Workstation-Umgebung mit komplexen Layouts aufbauen
- Ihr Team auf tmux-Konfigurationsverwaltung standardisiert hat
Verwenden Sie keines von beiden (verwenden Sie stattdessen systemd oder supervisor), wenn:
- Das Ziel ausschließlich darin besteht, einen Hintergrunddienst auszuführen, der Neustarts überleben soll
- Sie keinen interaktiven Zugriff auf den laufenden Prozess benötigen
- Der Prozess bei einem Fehler automatisch neu gestartet werden soll
Technische Schlüssel-Checkliste
Bevor Sie sich in einer Produktionsumgebung auf Screen verlassen, überprüfen Sie Folgendes:
- `autodetach on` ist in `~/.screenrc` vorhanden – ohne es können SSH-Abbrüche Sitzungen beenden
- `defscrollback` ist für log-intensive Workloads auf mindestens 5000 Zeilen gesetzt
- `defflow off` ist gesetzt, um versehentliche `Ctrl+S`-Einfrierungen zu verhindern
- Alle lang laufenden Sitzungen sind benannt (`-S flag`) – verlassen Sie sich nie auf die reine PID-Identifikation
- Sie kennen den Wiederherstellungsbefehl `screen -d -r` für veraltete verbundene Sitzungen
- Tote Sitzungs-Sockets werden regelmäßig mit `screen -wipe` bereinigt
- Wenn Sie als mehrere Benutzer arbeiten, verstehen Sie die Eigentumsgrenze zwischen root- und Benutzersitzungen
- Die Variable `TERM` wird überprüft, wenn TUI-Anwendungen innerhalb von Screen falsch dargestellt werden
- Für vollständig automatisierte Hintergrundjobs wird `screen -dmS` anstelle von `nohup` oder bloßem `&` verwendet, was Ihnen eine wiederherstellbare, inspizierbare Sitzung gibt
FAQ
Überlebt GNU Screen einen Server-Neustart?
Nein. Screen-Sitzungen werden als Prozesse im Speicher gehalten. Ein vollständiger Server-Neustart beendet alle Screen-Sitzungen und ihre untergeordneten Prozesse. Für Prozesse, die Neustarts überleben müssen, verwenden Sie systemd-Units oder einen Prozess-Supervisor wie Supervisor. Screen ist das richtige Tool für interaktive Persistenz über Verbindungsabbrüche hinweg, nicht über Neustarts.
Was ist der Unterschied zwischen `screen -r` und `screen -x`?
`screen -r` verbindet sich erneut mit einer getrennten Sitzung – es schlägt fehl, wenn die Sitzung bereits anderswo verbunden ist. `screen -x` verbindet sich mit einer Sitzung unabhängig von ihrem aktuellen Verbindungsstatus und ermöglicht es zwei Terminals, dieselbe Sitzung gleichzeitig zu teilen. Verwenden Sie `-x` für gemeinsames Debuggen; verwenden Sie `-r` für die standardmäßige Wiederverbindung.
Wie scrolle ich in einem Screen-Fenster nach oben?
Aktivieren Sie den Kopiermodus mit `Ctrl+A, [`, dann verwenden Sie Pfeiltasten, `Page Up`/`Page Down`, oder vi-Navigationstasten (`Ctrl+F`, `Ctrl+B`). Drücken Sie `Escape` oder `q`, um den Kopiermodus zu verlassen. Stellen Sie sicher, dass `defscrollback` in `.screenrc` hoch genug gesetzt ist, um den benötigten Verlauf zu behalten.
Kann Screen ohne Root-Rechte verwendet werden?
Ja. Screen läuft vollständig als aufrufender Benutzer. Zum Erstellen, Verbinden oder Verwalten von Sitzungen sind keine Root-Rechte erforderlich. Die Socket-Dateien werden in einem benutzerspezifischen Verzeichnis gespeichert (typischerweise `/var/run/screen/S-username/`). Die einzige Ausnahme ist, wenn Screen selbst nicht installiert ist – die Installation erfordert Paketmanager-Zugriff, der typischerweise root oder sudo erfordert.
Warum zeigt meine Screen-Sitzung „Attached” an, obwohl niemand verbunden ist?
Dies geschieht typischerweise, wenn eine SSH-Verbindung abgebrochen ist, ohne ein sauberes SIGHUP zu senden – zum Beispiel aufgrund eines Netzwerk-Timeouts anstatt eines expliziten Abmeldens. Die Sitzung behält ihren `Attached`-Status, weil Screen das Trennungssignal nie erhalten hat. Verwenden Sie `screen -d -r session_name`, um die Geisterverbindung zwangsweise zu trennen und sich sauber erneut zu verbinden.
