15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
08.10.2024

Le guide complet des commandes GNU Screen sous Linux

GNU Screen est un multiplexeur de terminal qui vous permet de créer, gérer et maintenir plusieurs sessions shell depuis une seule fenêtre de terminal. Lorsque vous vous détachez d’une session Screen, chaque processus en cours d’exécution à l’intérieur continue de s’exécuter — survivant aux déconnexions SSH, aux coupures réseau et aux fermetures de terminal — et reste entièrement accessible dès que vous vous reconnectez.

Pour quiconque gère des serveurs distants via SSH, cette seule capacité élimine toute une catégorie de risques opérationnels : une connexion interrompue ne tue plus une migration de base de données en cours, un travail de compilation de plusieurs heures, ou un processus de surveillance de journaux en direct.

Pourquoi GNU Screen reste pertinent dans l’administration Linux moderne

Des outils comme tmux ont gagné en popularité, mais Screen est livré comme package par défaut ou quasi-défaut sur pratiquement toutes les distributions Linux d’entreprise et les images serveur minimales. Lorsque vous vous connectez en SSH à une machine bare-metal ou à une instance VPS Hosting fraîchement provisionnée, Screen est presque toujours disponible sans installation supplémentaire. Sa faible empreinte mémoire et sa conformité POSIX en font le choix pragmatique dans les environnements contraints ou verrouillés.

Capacités principales en un coup d’œil :

  • Persistance des sessions : Les processus survivent à la déconnexion du terminal, au délai d’expiration SSH et aux plantages côté client
  • Multiplexage de fenêtres : Plusieurs fenêtres shell indépendantes au sein d’une seule session
  • Partage de session : Deux utilisateurs peuvent se connecter simultanément à la même session pour un débogage collaboratif
  • Accès à la console série : Screen peut se connecter directement aux périphériques `/dev/ttyS*` pour la gestion hors bande des serveurs
  • Démarrage scriptable : Le fichier de configuration `.screenrc` permet des environnements multi-fenêtres entièrement automatisés au lancement

GNU Screen vs. tmux : Choisir le bon multiplexeur

Les deux outils résolvent le même problème fondamental mais avec des philosophies de conception différentes. Le tableau ci-dessous couvre les distinctions qui comptent dans les environnements de production.

FonctionnalitéGNU Screentmux
Disponibilité par défautPré-installé sur la plupart des distributionsNécessite une installation explicite
Fichier de configuration`~/.screenrc``~/.tmux.conf`
Division en panneaux (horizontal/vertical)Limitée (vertical uniquement via les régions)Division en panneaux complète et flexible
Partage de sessionMulti-attachement natifMulti-attachement natif
Scripts / automatisationInjection de commandes `screen -X``tmux send-keys`, API riche
Empreinte mémoireTrès faibleFaible
Support des périphériques sérieOui (`screen /dev/ttyS0`)Non
Personnalisation de la barre d’étatModérée (hardstatus)Très flexible
Mode copieStyle viStyle vi ou emacs
Écosystème de pluginsAucunActif (TPM)
Cas d’utilisation idéalServeurs minimaux, consoles série, environnements legacyStations de travail développeur, mises en page complexes

Conseils pratiques : Sur un Serveur Dédié sans interface graphique exécutant des tâches en arrière-plan à long terme, la simplicité et la disponibilité universelle de Screen en font le choix le moins contraignant. Pour un développeur qui a besoin de panneaux divisés et d’une barre d’état riche, tmux l’emporte.

Installation de GNU Screen

Screen est pré-installé sur la plupart des distributions. Vérifiez avec :

“`bash

screen –version

“`

S’il est absent, installez-le en utilisant le gestionnaire de packages approprié :

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 (courant dans les conteneurs) :

“`bash

apk add screen

“`

Après l’installation, aucun démon ou service n’est requis. Screen fonctionne entièrement comme un processus en espace utilisateur.

Démarrer une session Screen

Session de base

“`bash

screen

“`

Cela vous place dans une nouvelle session avec un shell standard. L’interface est indiscernable d’un terminal normal jusqu’à ce que vous utilisiez le préfixe de commande de Screen.

Session nommée (recommandée)

“`bash

screen -S session_name

“`

Nommez toujours vos sessions en production. Les sessions sans nom ne sont identifiées que par leur PID, ce qui rend le rattachement sujet aux erreurs lorsque plusieurs sessions sont en cours d’exécution.

Conseil de convention de nommage : Utilisez des noms descriptifs qui reflètent la charge de travail — `screen -S db-migration`, `screen -S log-monitor`, `screen -S build-php82`. Cela s’avère précieux lorsque vous revenez sur un serveur après plusieurs heures d’absence.

Démarrer une session et exécuter une commande immédiatement

“`bash

screen -S backup-job bash -c 'rsync -avz /data/ user@remote:/backup/ && echo DONE'

“`

La session persiste même après la fin de la commande, vous permettant d’inspecter la sortie ultérieurement.

Démarrer une session en mode détaché

“`bash

screen -dmS headless-job ./long_running_script.sh

“`

Les indicateurs `-dm` créent la session et la détachent immédiatement. C’est le bon modèle pour lancer des tâches en arrière-plan depuis cron ou des scripts de déploiement — le processus s’exécute dans une session Screen nommée et récupérable sans nécessiter de terminal interactif.

Le préfixe de commande : comprendre Ctrl+A

Chaque raccourci clavier de Screen commence par la séquence d’échappement `Ctrl+A`. Cette frappe indique à Screen que le caractère suivant est une commande, et non une entrée pour le programme en cours d’exécution. Comprendre ce modèle est essentiel avant de mémoriser les raccourcis individuels.

Si vous exécutez un programme dans Screen qui utilise lui-même `Ctrl+A` (par exemple, certains éditeurs de texte ou la bibliothèque `readline`), vous pouvez envoyer un `Ctrl+A` littéral au programme interne en appuyant deux fois sur `Ctrl+A` (`Ctrl+A, Ctrl+A`).

Détacher et rattacher des sessions

Se détacher d’une session en cours

“`

Ctrl+A, D

“`

La session continue de s’exécuter en arrière-plan. Vous êtes renvoyé au shell parent. Aucun processus à l’intérieur de la session n’est interrompu.

Lister toutes les sessions

“`bash

screen -ls

“`

Exemple de sortie :

“`

There are screens on:

14231.db-migration (Detached)

14089.log-monitor (Attached)

13901.build-php82 (Detached)

3 Sockets in /var/run/screen/S-deploy.

“`

Le statut `Attached` signifie qu’un autre terminal est actuellement connecté à cette session. `Detached` signifie qu’elle est en cours d’exécution mais qu’aucun terminal n’est connecté.

Se rattacher à une session spécifique

“`bash

screen -r db-migration

“`

Ou par PID :

“`bash

screen -r 14231

“`

Forcer le rattachement à une session déjà attachée

Si une session affiche `Attached` mais que vous devez la reprendre (par exemple, après qu’une connexion SSH périmée l’a laissée verrouillée) :

“`bash

screen -d -r log-monitor

“`

L’indicateur `-d` détache de force l’autre connexion avant de vous rattacher. C’est une technique de récupération essentielle lorsqu’une session SSH précédente s’est terminée sans se détacher proprement.

Multi-attachement : deux utilisateurs sur la même session

“`bash

screen -x session_name

“`

Les deux terminaux voient une sortie identique en temps réel. C’est inestimable pour le débogage en binôme ou les présentations guidées de serveur avec un collègue — les deux parties observent et peuvent interagir avec le même shell.

Gérer les fenêtres au sein d’une session

Une seule session Screen peut contenir un nombre illimité de fenêtres. Chaque fenêtre est un shell (ou processus) indépendant.

Créer une nouvelle fenêtre

“`

Ctrl+A, C

“`

RaccourciAction
`Ctrl+A, N`Fenêtre suivante
`Ctrl+A, P`Fenêtre précédente
`Ctrl+A, 0–9`Accéder directement à une fenêtre par numéro
`Ctrl+A, "`Liste interactive de toutes les fenêtres
`Ctrl+A, '`Invite à saisir un numéro ou un nom de fenêtre

Renommer une fenêtre

“`

Ctrl+A, A

“`

Tapez le nouveau nom et appuyez sur Entrée. Les noms de fenêtres significatifs sont affichés dans la barre hardstatus, rendant la navigation beaucoup plus rapide dans les sessions avec de nombreuses fenêtres.

Fermer une fenêtre

Tapez `exit` ou appuyez sur `Ctrl+D` dans le shell de la fenêtre. Lorsque la dernière fenêtre d’une session est fermée, la session se termine.

Diviser l’écran en régions

Screen prend en charge la division du terminal en plusieurs régions visibles, chacune affichant simultanément une fenêtre différente.

Division horizontale (haut/bas)

“`

Ctrl+A, S

“`

Division verticale (gauche/droite)

“`

Ctrl+A, |

“`

Remarque : La division verticale nécessite Screen 4.1.0 ou une version ultérieure.

Se déplacer entre les régions

“`

Ctrl+A, Tab

“`

Assigner une fenêtre à une région

Après avoir déplacé le focus vers une région, utilisez `Ctrl+A, "` pour sélectionner la fenêtre à afficher.

Supprimer une région

“`

Ctrl+A, X (remove current region)

Ctrl+A, Q (remove all regions except current)

“`

Distinction importante : Supprimer une région ne ferme pas la fenêtre qui s’y exécute. La fenêtre continue de s’exécuter ; vous arrêtez simplement de l’afficher dans cette division.

Copier et coller (mode défilement)

Screen maintient un tampon de défilement pour chaque fenêtre. Pour y accéder :

“`

Ctrl+A, [

“`

Cela entre en mode copie. La navigation utilise les touches de style vi :

  • `h`, `j`, `k`, `l` — déplacer le curseur
  • `Ctrl+F` / `Ctrl+B` — page suivante / précédente
  • `/` — recherche vers l’avant
  • `?` — recherche vers l’arrière
  • `Space` — marquer le début de la sélection
  • `Space` (à nouveau) — marquer la fin et copier dans le tampon

Pour coller le texte copié :

“`

Ctrl+A, ]

“`

Le tampon de défilement par défaut est de 100 lignes. Pour la surveillance des journaux serveur, augmentez cette valeur de manière significative dans `.screenrc` (abordé ci-dessous).

Verrouiller une session Screen

“`

Ctrl+A, X

“`

La session se verrouille immédiatement et demande votre mot de passe utilisateur Unix avant d’autoriser l’accès. Utilisez ceci lorsque vous vous éloignez d’un terminal connecté à un serveur sensible — c’est plus rapide que de fermer la connexion SSH et de se rattacher.

Envoyer des commandes à une session sans s’y attacher

L’indicateur `-X` vous permet d’injecter des commandes Screen dans une session en cours depuis l’extérieur :

“`bash

screen -S db-migration -X stuff "tail -f /var/log/mysql/error.logn"

“`

La commande `stuff` envoie des frappes à la fenêtre active de la session nommée. Le `n` simule l’appui sur Entrée. Cette technique est utilisée dans les scripts d’automatisation de déploiement pour interagir avec des sessions Screen à longue durée d’exécution sans nécessiter d’attachement humain.

Configurer Screen avec .screenrc

Le fichier `~/.screenrc` est lu au démarrage et contrôle le comportement par défaut de Screen. Un `.screenrc` bien conçu transforme Screen d’un simple multiplexeur en un environnement véritablement ergonomique.

Créez-le ou modifiez-le :

“`bash

nano ~/.screenrc

“`

Configuration .screenrc de production recommandée

“`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

“`

La directive `autodetach on` est indispensable pour l’utilisation SSH. Sans elle, si votre connexion SSH se coupe de manière inattendue (plutôt que vous appuyiez sur `Ctrl+A, D`), Screen peut terminer la session au lieu de la détacher. Avec `autodetach on`, un signal SIGHUP (envoyé lors de la déconnexion SSH) déclenche un détachement propre plutôt que la fin de la session.

`defflow off` évite la frustration courante d’appuyer accidentellement sur `Ctrl+S` et de sembler geler le terminal. De nombreux administrateurs perdent des minutes à dépanner un terminal « gelé » qui est simplement en pause de contrôle de flux XON/XOFF.

Cas d’utilisation pratiques en production

Exécuter une migration de base de données en toute sécurité

“`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

“`

Si la connexion SSH se coupe en cours de migration, le processus continue. Vous vous rattachez et trouvez soit qu’il est toujours en cours d’exécution, soit qu’il s’est terminé avec la sortie complète préservée dans le journal et le tampon de défilement.

Surveiller plusieurs fichiers journaux simultanément

“`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

“`

Naviguez entre les fenêtres avec `Ctrl+A, "` pour voir quel journal génère de l’activité.

Script de déploiement automatisé avec 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"

“`

Ce modèle est particulièrement utile sur un VPS avec cPanel où vous pouvez gérer plusieurs déploiements d’applications depuis un seul shell d’administration.

Accès à la console série

“`bash

screen /dev/ttyS0 115200

“`

Screen fait également office d’émulateur de terminal série. C’est la technique standard pour accéder à la console d’un serveur physique, d’un commutateur réseau ou d’un appareil embarqué via une connexion série — sans nécessiter minicom ou picocom.

Pièges courants et comment les éviter

Sessions Screen imbriquées : Si vous vous connectez en SSH depuis une session Screen sur la Machine A vers la Machine B et démarrez Screen là-bas, vous avez maintenant deux couches de gestion `Ctrl+A`. La session Screen interne capture `Ctrl+A` avant que la session externe ne le voie. Pour envoyer `Ctrl+A` à la session externe, appuyez sur `Ctrl+A, Ctrl+A`. Pour éviter toute confusion, modifiez la touche d’échappement de la session interne dans son `.screenrc` en utilisant `escape ^Bb`.

Sessions mortes ne se nettoyant pas : Si Screen plante ou si l’hôte redémarre de manière incorrecte, des fichiers socket peuvent persister dans `/var/run/screen/` ou `~/.screen/`, affichant les sessions comme `Dead`. Nettoyez-les avec :

“`bash

screen -wipe

“`

Session appartenant à root vs. utilisateur : Une session Screen démarrée en tant que root ne peut pas être rattachée par un utilisateur non-root, et vice versa. Si vous utilisez `sudo su` dans une session Screen puis vous détachez, rattachez-vous en tant que root ou via `sudo screen -r`.

Incompatibilité de la variable `TERM` : Certaines applications dans Screen se comportent incorrectement parce que `TERM` est défini sur `screen` ou `screen-256color` plutôt que `xterm-256color`. Si une application TUI s’affiche incorrectement, vérifiez avec `echo $TERM` et remplacez dans `.screenrc` avec `term xterm-256color` si nécessaire.

Épuisement du tampon de défilement : Le défilement par défaut de 100 lignes est insuffisant pour toute surveillance sérieuse des journaux. Définissez toujours `defscrollback 10000` ou plus dans `.screenrc` sur les serveurs utilisés pour l’administration active.

Référence rapide : commandes Screen essentielles

ActionCommande / Raccourci
Démarrer une nouvelle session`screen`
Démarrer une session nommée`screen -S name`
Démarrer une session détachée`screen -dmS name`
Lister les sessions`screen -ls`
Se rattacher par nom`screen -r name`
Forcer le rattachement`screen -d -r name`
Multi-attachement`screen -x name`
Se détacher`Ctrl+A, D`
Nouvelle fenêtre`Ctrl+A, C`
Fenêtre suivante`Ctrl+A, N`
Fenêtre précédente`Ctrl+A, P`
Liste des fenêtres`Ctrl+A, "`
Renommer une fenêtre`Ctrl+A, A`
Division horizontale`Ctrl+A, S`
Division verticale`Ctrl+A,`
Se déplacer entre les régions`Ctrl+A, Tab`
Entrer en mode copie/défilement`Ctrl+A, [`
Coller le tampon`Ctrl+A, ]`
Verrouiller la session`Ctrl+A, X`
Fermer la fenêtre courante`Ctrl+A, K`
Terminer la session entière`Ctrl+A, `
Envoyer une commande à une session`screen -S name -X stuff "cmdn"`
Nettoyer les sessions mortes`screen -wipe`

Contexte de déploiement : Screen dans les environnements d’hébergement géré

Screen fonctionne au niveau du shell, le rendant compatible avec tout environnement Linux où vous avez un accès SSH. Cela inclut les serveurs bare-metal, les Serveurs Dédiés et les instances VPS Hosting standard. Il n’est pas disponible dans les environnements d’hébergement partagé où l’accès SSH est restreint ou absent.

Pour les charges de travail impliquant un traitement en arrière-plan persistant — comme l’inférence de modèles accélérée par GPU, le prétraitement de grands ensembles de données ou les tâches par lots à longue durée d’exécution — combiner Screen avec un environnement GPU Hosting vous offre à la fois les ressources de calcul et la persistance de session nécessaires pour gérer des tâches de plusieurs heures de manière fiable.

Si votre infrastructure comprend des services orientés web en parallèle avec des traitements en arrière-plan, associer les tâches backend gérées par Screen à des Certificats SSL correctement sécurisés sur vos points de terminaison publics garantit que l’ensemble de la pile — à la fois la couche applicative visible et le backend administratif — fonctionne avec des contrôles de sécurité appropriés.

Matrice de décision : quand utiliser Screen

Utilisez Screen lorsque :

  • Vous avez besoin de persistance de session sur un serveur où seul Screen est disponible
  • Vous accédez à une console série ou à un appareil embarqué
  • Vous exécutez un seul processus de longue durée et n’avez pas besoin de panneaux divisés
  • Vous êtes sur un système minimal basé sur Alpine ou BusyBox
  • Vous devez partager une session avec un autre administrateur en temps réel

Envisagez tmux à la place lorsque :

  • Vous avez besoin d’une division flexible des panneaux horizontaux et verticaux
  • Vous souhaitez un écosystème de plugins pour améliorer la barre d’état
  • Vous construisez un environnement de station de travail développeur avec des mises en page complexes
  • Votre équipe a standardisé la gestion de la configuration tmux

N’utilisez ni l’un ni l’autre (utilisez systemd ou supervisor à la place) lorsque :

  • L’objectif est uniquement d’exécuter un service en arrière-plan qui doit survivre aux redémarrages
  • Vous n’avez pas besoin d’un accès interactif au processus en cours d’exécution
  • Le processus doit redémarrer automatiquement en cas d’échec

Liste de contrôle des points clés techniques

Avant de vous fier à Screen dans un environnement de production, vérifiez les points suivants :

  • `autodetach on` est présent dans `~/.screenrc` — sans cela, les coupures SSH peuvent tuer les sessions
  • `defscrollback` est défini à au moins 5000 lignes pour les charges de travail à journaux intensifs
  • `defflow off` est défini pour éviter les gels accidentels par `Ctrl+S`
  • Toutes les sessions à longue durée d’exécution sont nommées (`-S flag`) — ne vous fiez jamais à l’identification par PID uniquement
  • Vous connaissez la commande de récupération `screen -d -r` pour les sessions attachées périmées
  • Les sockets de sessions mortes sont périodiquement nettoyés avec `screen -wipe`
  • Si vous exécutez en tant que plusieurs utilisateurs, vous comprenez la limite de propriété de session root/utilisateur
  • La variable `TERM` est vérifiée si les applications TUI s’affichent incorrectement dans Screen
  • Pour les tâches en arrière-plan entièrement automatisées, `screen -dmS` est utilisé plutôt que `nohup` ou un simple `&`, vous donnant une session récupérable et inspectable

FAQ

GNU Screen survit-il à un redémarrage du serveur ?

Non. Les sessions Screen sont maintenues en mémoire en tant que processus. Un redémarrage complet du serveur termine toutes les sessions Screen et leurs processus enfants. Pour les processus qui doivent survivre aux redémarrages, utilisez des unités systemd ou un superviseur de processus comme Supervisor. Screen est le bon outil pour la persistance interactive à travers les déconnexions, pas à travers les redémarrages.

Quelle est la différence entre `screen -r` et `screen -x` ?

`screen -r` se rattache à une session détachée — il échoue si la session est déjà attachée ailleurs. `screen -x` s’attache à une session quel que soit son état d’attachement actuel, permettant à deux terminaux de partager la même session simultanément. Utilisez `-x` pour le débogage collaboratif ; utilisez `-r` pour le rattachement standard.

Comment faire défiler vers le haut dans une fenêtre Screen ?

Entrez en mode copie avec `Ctrl+A, [`, puis utilisez les touches fléchées, `Page Up`/`Page Down`, ou la navigation de style vi (`Ctrl+F`, `Ctrl+B`). Appuyez sur `Escape` ou `q` pour quitter le mode copie. Assurez-vous que `defscrollback` dans `.screenrc` est défini suffisamment haut pour conserver l’historique dont vous avez besoin.

Screen peut-il être utilisé sans privilèges root ?

Oui. Screen s’exécute entièrement en tant qu’utilisateur invocateur. Aucun privilège root n’est requis pour créer, attacher ou gérer des sessions. Les fichiers socket sont stockés dans un répertoire par utilisateur (généralement `/var/run/screen/S-username/`). La seule exception est si Screen lui-même n’est pas installé — l’installation nécessite un accès au gestionnaire de packages, ce qui nécessite généralement root ou sudo.

Pourquoi ma session Screen affiche-t-elle « Attached » alors que personne n’est connecté ?

Cela se produit généralement lorsqu’une connexion SSH s’est interrompue sans envoyer un SIGHUP propre — par exemple, en raison d’un délai d’expiration réseau plutôt que d’une déconnexion explicite. La session conserve son état `Attached` parce que Screen n’a jamais reçu le signal de déconnexion. Utilisez `screen -d -r session_name` pour détacher de force la connexion fantôme et vous rattacher proprement.

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer