15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
08.10.2024

La guía completa de comandos GNU Screen en Linux

GNU Screen es un multiplexor de terminal que te permite crear, gestionar y mantener múltiples sesiones de shell desde una sola ventana de terminal. Cuando te desconectas de una sesión de Screen, todos los procesos que se ejecutan dentro de ella continúan ejecutándose — sobreviviendo a desconexiones SSH, caídas de red y cierres de terminal — y permanecen completamente accesibles en el momento en que te reconectas.

Para cualquier persona que gestione servidores remotos a través de SSH, esta única capacidad elimina toda una clase de riesgo operativo: una conexión interrumpida ya no mata una migración de base de datos en curso, un trabajo de compilación de varias horas, o un proceso de monitoreo de registros en vivo.

Por qué GNU Screen sigue siendo relevante en la administración moderna de Linux

Herramientas como tmux han ganado popularidad, pero Screen viene como paquete predeterminado o casi predeterminado en prácticamente todas las distribuciones Linux empresariales e imágenes de servidor mínimas. Cuando accedes por SSH a una máquina bare-metal o a una instancia de VPS Hosting recién aprovisionada, Screen casi siempre está disponible sin ninguna instalación adicional. Su bajo consumo de memoria y su conformidad con POSIX lo convierten en la opción pragmática en entornos restringidos o bloqueados.

Capacidades principales de un vistazo:

  • Persistencia de sesión: Los procesos sobreviven a la desconexión del terminal, al tiempo de espera de SSH y a los fallos del lado del cliente
  • Multiplexación de ventanas: Múltiples ventanas de shell independientes dentro de una sola sesión
  • Compartición de sesión: Dos usuarios pueden conectarse a la misma sesión simultáneamente para depuración colaborativa
  • Acceso a consola serie: Screen puede conectarse directamente a dispositivos `/dev/ttyS*` para la gestión de servidores fuera de banda
  • Inicio programable: El archivo de configuración `.screenrc` permite entornos de múltiples ventanas totalmente automatizados al iniciar

GNU Screen vs. tmux: Elegir el multiplexor adecuado

Ambas herramientas resuelven el mismo problema central pero con diferentes filosofías de diseño. La tabla a continuación cubre las distinciones que importan en entornos de producción.

CaracterísticaGNU Screentmux
Disponibilidad predeterminadaPreinstalado en la mayoría de las distribucionesRequiere instalación explícita
Archivo de configuración`~/.screenrc``~/.tmux.conf`
División de paneles (horizontal/vertical)Limitada (solo vertical mediante regiones)División de paneles completa y flexible
Compartición de sesiónMulti-conexión nativaMulti-conexión nativa
Scripting / automatizaciónInyección de comandos `screen -X``tmux send-keys`, API enriquecida
Consumo de memoriaMuy bajoBajo
Soporte de dispositivos serieSí (`screen /dev/ttyS0`)No
Personalización de barra de estadoModerada (hardstatus)Muy flexible
Modo de copiaEstilo viEstilo vi o emacs
Ecosistema de pluginsNingunoActivo (TPM)
Caso de uso idealServidores mínimos, consolas serie, entornos heredadosEstaciones de trabajo de desarrolladores, diseños complejos

Orientación práctica: En un Servidor Dedicado sin cabeza que ejecuta trabajos en segundo plano a largo plazo, la simplicidad y disponibilidad universal de Screen lo convierten en la opción de menor fricción. Para un desarrollador que necesita paneles divididos y una barra de estado enriquecida, tmux gana.

Instalación de GNU Screen

Screen viene preinstalado en la mayoría de las distribuciones. Verifícalo con:

“`bash

screen –version

“`

Si no está presente, instálalo usando el gestor de paquetes apropiado:

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 (común en contenedores):

“`bash

apk add screen

“`

Tras la instalación, no se requiere ningún demonio ni servicio. Screen opera completamente como un proceso en espacio de usuario.

Iniciar una sesión de Screen

Sesión básica

“`bash

screen

“`

Esto te lleva a una nueva sesión con un shell estándar. La interfaz es indistinguible de un terminal normal hasta que usas el prefijo de comando de Screen.

Sesión con nombre (recomendado)

“`bash

screen -S session_name

“`

Siempre nombra tus sesiones en producción. Las sesiones sin nombre se identifican solo por su PID, lo que hace que la reconexión sea propensa a errores cuando hay múltiples sesiones en ejecución.

Consejo sobre convención de nombres: Usa nombres descriptivos que reflejen la carga de trabajo — `screen -S db-migration`, `screen -S log-monitor`, `screen -S build-php82`. Esto resulta beneficioso cuando regresas a un servidor después de horas de ausencia.

Iniciar una sesión y ejecutar un comando inmediatamente

“`bash

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

“`

La sesión persiste incluso después de que el comando se completa, lo que te permite inspeccionar la salida más tarde.

Iniciar una sesión en modo desconectado

“`bash

screen -dmS headless-job ./long_running_script.sh

“`

Los indicadores `-dm` crean la sesión y la desconectan inmediatamente. Este es el patrón correcto para lanzar trabajos en segundo plano desde cron o scripts de despliegue — el proceso se ejecuta dentro de una sesión de Screen con nombre y recuperable sin requerir un terminal interactivo.

El prefijo de comando: Entendiendo Ctrl+A

Cada atajo de teclado de Screen comienza con la secuencia de escape `Ctrl+A`. Esta pulsación de tecla le indica a Screen que el siguiente carácter es un comando, no una entrada para el programa en ejecución. Entender este modelo es esencial antes de memorizar atajos individuales.

Si ejecutas un programa dentro de Screen que a su vez usa `Ctrl+A` (por ejemplo, algunos editores de texto o la biblioteca `readline`), puedes enviar un `Ctrl+A` literal al programa interno presionando `Ctrl+A` dos veces (`Ctrl+A, Ctrl+A`).

Desconectar y reconectar sesiones

Desconectarse de una sesión en ejecución

“`

Ctrl+A, D

“`

La sesión continúa ejecutándose en segundo plano. Eres devuelto al shell padre. Ningún proceso dentro de la sesión es interrumpido.

Listar todas las sesiones

“`bash

screen -ls

“`

Ejemplo de salida:

“`

There are screens on:

14231.db-migration (Detached)

14089.log-monitor (Attached)

13901.build-php82 (Detached)

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

“`

El estado `Attached` significa que otro terminal está actualmente conectado a esa sesión. `Detached` significa que está en ejecución pero ningún terminal está conectado.

Reconectarse a una sesión específica

“`bash

screen -r db-migration

“`

O por PID:

“`bash

screen -r 14231

“`

Forzar la conexión a una sesión ya conectada

Si una sesión muestra `Attached` pero necesitas tomarla (por ejemplo, después de que una conexión SSH obsoleta la dejó bloqueada):

“`bash

screen -d -r log-monitor

“`

El indicador `-d` desconecta forzosamente la otra conexión antes de reconectarte. Esta es una técnica de recuperación crítica cuando una sesión SSH anterior murió sin desconectarse limpiamente.

Multi-conexión: Dos usuarios en la misma sesión

“`bash

screen -x session_name

“`

Ambos terminales ven una salida idéntica en tiempo real. Esto es invaluable para la depuración en pareja o para guías de servidor con un colega — ambas partes observan e interactúan con el mismo shell.

Gestión de ventanas dentro de una sesión

Una sola sesión de Screen puede contener un número ilimitado de ventanas. Cada ventana es un shell (o proceso) independiente.

Crear una nueva ventana

“`

Ctrl+A, C

“`

AtajoAcción
`Ctrl+A, N`Ventana siguiente
`Ctrl+A, P`Ventana anterior
`Ctrl+A, 0–9`Saltar directamente a la ventana por número
`Ctrl+A, "`Lista interactiva de todas las ventanas
`Ctrl+A, '`Solicitud para ingresar número o nombre de ventana

Renombrar una ventana

“`

Ctrl+A, A

“`

Escribe el nuevo nombre y presiona Enter. Los nombres de ventana significativos se muestran en la barra hardstatus, lo que hace que la navegación sea mucho más rápida en sesiones con muchas ventanas.

Cerrar una ventana

Escribe `exit` o presiona `Ctrl+D` en el shell de la ventana. Cuando se cierra la última ventana de una sesión, la sesión termina.

Dividir la pantalla en regiones

Screen admite dividir el terminal en múltiples regiones visibles, cada una mostrando una ventana diferente simultáneamente.

Dividir horizontalmente (arriba/abajo)

“`

Ctrl+A, S

“`

Dividir verticalmente (izquierda/derecha)

“`

Ctrl+A, |

“`

Nota: La división vertical requiere Screen 4.1.0 o posterior.

Moverse entre regiones

“`

Ctrl+A, Tab

“`

Asignar una ventana a una región

Después de mover el foco a una región, usa `Ctrl+A, "` para seleccionar qué ventana mostrar allí.

Eliminar una región

“`

Ctrl+A, X (remove current region)

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

“`

Distinción importante: Eliminar una región no cierra la ventana que se ejecuta dentro de ella. La ventana continúa ejecutándose; simplemente dejas de mostrarla en esa división.

Copiar y pegar (modo de desplazamiento)

Screen mantiene un búfer de desplazamiento para cada ventana. Para acceder a él:

“`

Ctrl+A, [

“`

Esto entra en el modo de copia. La navegación usa teclas de estilo vi:

  • `h`, `j`, `k`, `l` — mover cursor
  • `Ctrl+F` / `Ctrl+B` — página adelante / atrás
  • `/` — buscar hacia adelante
  • `?` — buscar hacia atrás
  • `Space` — marcar inicio de selección
  • `Space` (de nuevo) — marcar fin y copiar al búfer

Para pegar el texto copiado:

“`

Ctrl+A, ]

“`

El búfer de desplazamiento predeterminado es de 100 líneas. Para el monitoreo de registros del servidor, auméntalo significativamente en `.screenrc` (cubierto a continuación).

Bloquear una sesión de Screen

“`

Ctrl+A, X

“`

La sesión se bloquea inmediatamente y solicita tu contraseña de usuario Unix antes de permitir el acceso. Úsalo cuando te alejes de un terminal que está conectado a un servidor sensible — es más rápido que cerrar la conexión SSH y reconectarse.

Enviar comandos a una sesión sin conectarse

El indicador `-X` te permite inyectar comandos de Screen en una sesión en ejecución desde el exterior:

“`bash

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

“`

El comando `stuff` envía pulsaciones de teclas a la ventana activa de la sesión con nombre. El `n` simula presionar Enter. Esta técnica se usa en scripts de automatización de despliegue para interactuar con sesiones de Screen de larga duración sin requerir conexión humana.

Configurar Screen con .screenrc

El archivo `~/.screenrc` se lee al inicio y controla el comportamiento predeterminado de Screen. Un `.screenrc` bien elaborado transforma Screen de un multiplexor básico en un entorno genuinamente ergonómico.

Créalo o edítalo:

“`bash

nano ~/.screenrc

“`

Configuración recomendada de .screenrc para producción

“`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 directiva `autodetach on` es innegociable para el uso con SSH. Sin ella, si tu conexión SSH cae inesperadamente (en lugar de que presiones `Ctrl+A, D`), Screen puede terminar la sesión en lugar de desconectarla. Con `autodetach on`, una señal SIGHUP (enviada cuando SSH se desconecta) desencadena una desconexión limpia en lugar de la terminación de la sesión.

`defflow off` previene la frustración común de presionar accidentalmente `Ctrl+S` y aparentemente congelar el terminal. Muchos administradores pierden minutos solucionando un terminal “congelado” que simplemente está en pausa de control de flujo XON/XOFF.

Casos de uso prácticos en producción

Ejecutar una migración de base de datos de forma segura

“`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 conexión SSH cae a mitad de la migración, el proceso continúa. Te reconectas y lo encuentras ya sea todavía en ejecución o completado con la salida completa preservada en el registro y el búfer de desplazamiento.

Monitorear múltiples archivos de registro simultáneamente

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

“`

Navega entre ventanas con `Ctrl+A, "` para ver qué registro está generando actividad.

Script de despliegue automatizado con 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"

“`

Este patrón es especialmente útil en un VPS con cPanel donde puedes estar gestionando múltiples despliegues de aplicaciones desde un único shell administrativo.

Acceso a consola serie

“`bash

screen /dev/ttyS0 115200

“`

Screen funciona también como emulador de terminal serie. Esta es la técnica estándar para acceder a la consola de un servidor físico, switch de red o dispositivo embebido a través de una conexión serie — sin requerir minicom o picocom.

Errores comunes y cómo evitarlos

Sesiones de Screen anidadas: Si accedes por SSH desde una sesión de Screen en la Máquina A a la Máquina B y comienzas Screen allí, ahora tienes dos capas de manejo de `Ctrl+A`. La sesión interna de Screen captura `Ctrl+A` antes de que la externa lo vea. Para enviar `Ctrl+A` a la sesión externa, presiona `Ctrl+A, Ctrl+A`. Para evitar confusiones, cambia la tecla de escape de la sesión interna en su `.screenrc` usando `escape ^Bb`.

Sesiones muertas que no se limpian: Si Screen falla o el host se reinicia de forma incorrecta, los archivos de socket pueden persistir en `/var/run/screen/` o `~/.screen/`, mostrando sesiones como `Dead`. Límpialos con:

“`bash

screen -wipe

“`

Sesión propiedad de root vs. usuario: Una sesión de Screen iniciada como root no puede ser reconectada por un usuario no root, y viceversa. Si ejecutas `sudo su` dentro de una sesión de Screen y luego te desconectas, reconéctate como root o mediante `sudo screen -r`.

Discrepancia de la variable `TERM`: Algunas aplicaciones dentro de Screen se comportan incorrectamente porque `TERM` está configurado como `screen` o `screen-256color` en lugar de `xterm-256color`. Si una aplicación TUI se renderiza incorrectamente, verifica con `echo $TERM` y anula en `.screenrc` con `term xterm-256color` si es necesario.

Agotamiento del búfer de desplazamiento: El desplazamiento predeterminado de 100 líneas es inadecuado para cualquier monitoreo serio de registros. Siempre establece `defscrollback 10000` o superior en `.screenrc` en servidores usados para administración activa.

Referencia rápida: Comandos esenciales de Screen

AcciónComando / Atajo
Iniciar nueva sesión`screen`
Iniciar sesión con nombre`screen -S name`
Iniciar sesión desconectada`screen -dmS name`
Listar sesiones`screen -ls`
Reconectar por nombre`screen -r name`
Forzar reconexión`screen -d -r name`
Multi-conexión`screen -x name`
Desconectar`Ctrl+A, D`
Nueva ventana`Ctrl+A, C`
Ventana siguiente`Ctrl+A, N`
Ventana anterior`Ctrl+A, P`
Lista de ventanas`Ctrl+A, "`
Renombrar ventana`Ctrl+A, A`
Dividir horizontalmente`Ctrl+A, S`
Dividir verticalmente`Ctrl+A,`
Moverse entre regiones`Ctrl+A, Tab`
Entrar en modo copia/desplazamiento`Ctrl+A, [`
Pegar búfer`Ctrl+A, ]`
Bloquear sesión`Ctrl+A, X`
Cerrar ventana actual`Ctrl+A, K`
Cerrar sesión completa`Ctrl+A, `
Enviar comando a sesión`screen -S name -X stuff "cmdn"`
Limpiar sesiones muertas`screen -wipe`

Contexto de despliegue: Screen en entornos de hosting gestionado

Screen opera a nivel de shell, lo que lo hace compatible con cualquier entorno Linux donde tengas acceso SSH. Esto incluye servidores bare-metal, Servidores Dedicados e instancias estándar de VPS Hosting. No está disponible en entornos de hosting compartido donde el acceso SSH está restringido o ausente.

Para cargas de trabajo que implican procesamiento en segundo plano persistente — como inferencia de modelos acelerada por GPU, preprocesamiento de grandes conjuntos de datos o trabajos por lotes de larga duración — combinar Screen con un entorno de GPU Hosting te proporciona tanto los recursos computacionales como la persistencia de sesión necesaria para gestionar trabajos de varias horas de forma fiable.

Si tu infraestructura incluye servicios orientados a la web junto con procesamiento en segundo plano, combinar los trabajos de backend gestionados por Screen con Certificados SSL correctamente asegurados en tus endpoints públicos garantiza que toda la pila — tanto la capa de aplicación visible como el backend administrativo — opere con los controles de seguridad apropiados.

Matriz de decisión: Cuándo usar Screen

Usa Screen cuando:

  • Necesitas persistencia de sesión en un servidor donde solo Screen está disponible
  • Estás accediendo a una consola serie o dispositivo embebido
  • Estás ejecutando un único proceso de larga duración y no necesitas paneles divididos
  • Estás en un sistema mínimo basado en Alpine o BusyBox
  • Necesitas compartir una sesión con otro administrador en tiempo real

Considera tmux en su lugar cuando:

  • Requieres división de paneles horizontal y vertical flexible
  • Quieres un ecosistema de plugins para mejoras de la barra de estado
  • Estás construyendo un entorno de estación de trabajo de desarrollador con diseños complejos
  • Tu equipo ha estandarizado la gestión de configuración de tmux

No uses ninguno (usa systemd o supervisor en su lugar) cuando:

  • El objetivo es puramente ejecutar un servicio en segundo plano que deba sobrevivir a reinicios
  • No necesitas acceso interactivo al proceso en ejecución
  • El proceso debe reiniciarse automáticamente en caso de fallo

Lista de verificación técnica de puntos clave

Antes de confiar en Screen en un entorno de producción, verifica lo siguiente:

  • `autodetach on` está presente en `~/.screenrc` — sin él, las caídas de SSH pueden matar las sesiones
  • `defscrollback` está configurado en al menos 5000 líneas para cargas de trabajo con muchos registros
  • `defflow off` está configurado para prevenir congelaciones accidentales de `Ctrl+S`
  • Todas las sesiones de larga duración tienen nombre (`-S flag`) — nunca dependas solo de la identificación por PID
  • Conoces el comando de recuperación `screen -d -r` para sesiones conectadas obsoletas
  • Los sockets de sesiones muertas se limpian periódicamente con `screen -wipe`
  • Si ejecutas como múltiples usuarios, entiendes el límite de propiedad de sesión root/usuario
  • La variable `TERM` se verifica si las aplicaciones TUI se renderizan incorrectamente dentro de Screen
  • Para trabajos en segundo plano totalmente automatizados, se usa `screen -dmS` en lugar de `nohup` o `&` simple, proporcionándote una sesión recuperable e inspeccionable

Preguntas frecuentes

¿GNU Screen sobrevive a un reinicio del servidor?

No. Las sesiones de Screen se mantienen en memoria como procesos. Un reinicio completo del servidor termina todas las sesiones de Screen y sus procesos hijos. Para procesos que deben sobrevivir a reinicios, usa unidades de systemd o un supervisor de procesos como Supervisor. Screen es la herramienta correcta para la persistencia interactiva a través de desconexiones, no a través de reinicios.

¿Cuál es la diferencia entre `screen -r` y `screen -x`?

`screen -r` se reconecta a una sesión desconectada — falla si la sesión ya está conectada en otro lugar. `screen -x` se conecta a una sesión independientemente de su estado de conexión actual, permitiendo que dos terminales compartan la misma sesión simultáneamente. Usa `-x` para depuración colaborativa; usa `-r` para reconexión estándar.

¿Cómo desplazo hacia arriba dentro de una ventana de Screen?

Entra en modo de copia con `Ctrl+A, [`, luego usa las teclas de flecha, `Page Up`/`Page Down`, o navegación de estilo vi (`Ctrl+F`, `Ctrl+B`). Presiona `Escape` o `q` para salir del modo de copia. Asegúrate de que `defscrollback` en `.screenrc` esté configurado lo suficientemente alto para retener el historial que necesitas.

¿Se puede usar Screen sin privilegios de root?

Sí. Screen se ejecuta completamente como el usuario que lo invoca. No se requieren privilegios de root para crear, conectar o gestionar sesiones. Los archivos de socket se almacenan en un directorio por usuario (típicamente `/var/run/screen/S-username/`). La única excepción es si Screen en sí no está instalado — la instalación requiere acceso al gestor de paquetes, que típicamente requiere root o sudo.

¿Por qué mi sesión de Screen muestra “Attached” cuando nadie está conectado?

Esto ocurre típicamente cuando una conexión SSH cayó sin enviar un SIGHUP limpio — por ejemplo, debido a un tiempo de espera de red en lugar de un cierre de sesión explícito. La sesión retiene su estado `Attached` porque Screen nunca recibió la señal de desconexión. Usa `screen -d -r session_name` para desconectar forzosamente la conexión fantasma y reconectarte limpiamente.

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar