Qué es y cómo usar el comando screen en Linux

Con el comando screen de Linux, puedes enviar las aplicaciones de la terminal a ejecución a un segundo plano y mostrarlas cuando desees verlas. También es compatible con pantallas divididas y funciona a través de conexiones SSH, ¡incluso después de desconectar y volver a conectar!

¿Qué es el comando screen?

El comando screen es un multiplexor de la terminal, y está absolutamente lleno de opciones. Decir que puedes hacer mucho es el abuelo de los eufemismos. La página de manual tiene más de 4,100 líneas.

Los siguientes son los casos más comunes en los que usarías el comando screen, y los veremos más adelante en este artículo:

  • La operación estándar es crear una nueva ventana con una shell, ejecutar un comando y luego enviar la ventana a segundo plano (llamada “separación”). Cuando desees ver cómo va tu proceso, puedes volver a colocar la ventana en primer plano (“reunir”) y usarla nuevamente. Esto es ideal para procesos largos que no deseas finalizar accidentalmente cerrando la ventana de la terminal.
  • Una vez que tengas una sesión screen en ejecución, puedes crear nuevas ventanas y ejecutar otros procesos en ellas. Puedes saltar fácilmente entre ventanas para controlar tu progreso. También puedes dividir tu ventana de terminal en regiones verticales u horizontales, y mostrar tus diversas ventanas screen en una sola ventana.
  • Puedes conectarte a una máquina remota, iniciar una sesión screen e iniciar un proceso. Puedes desconectarte del host remoto, volver a conectarte y tu proceso seguirá ejecutándose.
  • Puedes compartir una sesión screen entre dos conexiones SSH diferentes para que dos personas puedan ver lo mismo, en tiempo real.

Instalar screen

Para instalar screen en ubuntu, debes usar este comando:

Para instalar screen en Manjaro, debes usar el siguiente comando:

En Fedora, debes escribir lo siguiente:

Comenzando con screen

Para iniciar screen, simplemente escríbelo como se muestra a continuación y presiona Enter:

Verás una página de información de licencia. Puedes presionar la barra espaciadora para leer la segunda página o Intro para volver a la terminal.

Te quedas en el indicador, y ​​parece que no ha pasado nada. Sin embargo, ahora estás ejecutando una shell dentro de un emulador de la terminal multiplexado. ¿Por qué es esto algo bueno?

Bueno, comencemos un proceso que llevará mucho tiempo completar. Descargaremos el código fuente del último kernel de Linux y lo redirigiremos a un archivo llamado latest_kernel.zip.

Para hacerlo, escribimos lo siguiente:

Nuestra descarga comienza, y la salida de curl nos muestra el progreso.

No podemos mostrarte una imagen del siguiente bit, porque es una secuencia de pulsación de teclas. Escribe Ctrl + A, suelta esas teclas y luego presiona d para separar la pantalla.

El proceso de descarga aún se está ejecutando, pero la ventana que muestra la descarga se elimina. Volverás a la ventana de terminal desde la que iniciaste la sesión screen. Un mensaje te dice que se ha separado una ventana screen que sido etiquetada como 23167.pts-0.howtogeek.

Necesitas el número desde el comienzo del nombre de la ventana para volver a adjuntarlo. Si lo olvidas, siempre puedes usar la opción –ls (lista), como se muestra a continuación, para obtener una lista de las ventanas separadas:

Cuando estés listo, puedes usar la opción –r (volver a conectar) y el número de la sesión para volver a conectarla, de esta manera:

La ventana que ha estado funcionando en segundo plano ahora vuelve a la ventana de tu terminal como si nunca se hubiera ido.

Funcionamiento

Si es un proceso que se ejecutará hasta su conclusión, eventualmente se completará. Si es un proceso continuo, eventualmente querrás terminarlo. De cualquier manera, cuando finaliza el proceso, puede escribir exit para salir de screen. Alternativamente, puedes presionar Ctrl + A, y luego K para cerrar por la fuerza una ventana.

Escribe el siguiente comando:

Regresarás a tu ventana de la terminal anterior, que aún mostrará el comando que utilizaste para volver a conectar la ventana. Debido a que cerramos nuestra única ventana separada, recibimos un mensaje que screen está finalizando.

Usar sesiones de screen con nombre

Puedes usar la opción –S (nombre de sesión) para nombrar tu sesión screen. Si usas un nombre memorable en lugar de la identidad numérica de la sesión, es más conveniente volver a conectarte a una sesión. Escribimos lo siguiente para nombrar nuestra sesión “bigfile”:

Cuando inicia nuestra sesión screen, vemos una ventana en blanco con un indicador. Vamos a descargar un archivo grande, por lo que podemos utilizar un proceso de larga duración como ejemplo.

Escribimos lo siguiente:

Cuando comienza la descarga, presionamos Ctrl + A, y luego presionamos D para separar la sesión. Escribimos lo siguiente para usar la opción –ls (lista) de screen para ver los detalles de nuestra sesión separada:

Detrás del identificador numérico (23266), vemos el nombre de nuestra sesión (bigfile). Escribimos lo siguiente, incluido el nombre de la sesión, para volver a adjuntarlo:

Estamos reconectados a nuestra ventana de descarga y vemos que la descarga grande todavía está en progreso.

Cuando se completa la descarga, escribimos exit para cerrar la ventana de la sesión.

Usar screen con múltiples ventanas

Hasta ahora, solíamos colocar en screen un solo proceso en segundo plano en una ventana separada. Sin embargo, screen es capaz de hacer mucho más que eso. A continuación, ejecutaremos algunos procesos que nos permiten monitorear algunos aspectos de nuestra computadora.

Escribimos lo siguiente para iniciar una sesión de screen llamada “monitor”:

En el indicador en nuestra nueva sesión de ventana, iniciaremos dmesg y utilizaremos las opciones –H (legible por humanos) y –w (esperar nuevos mensajes). Esto mostrará los mensajes del búfer del kernel; Aparecerán nuevos mensajes a medida que ocurran.

Escribimos lo siguiente:

Aparecen los mensajes existentes. No regresamos al indicador porque dmseg está esperando nuevos mensajes y los mostrará a medida que lleguen.

Queremos ejecutar otra aplicación, por lo que necesitamos una nueva ventana screen. Presionamos Ctrl + A, y luego C para crear una nueva ventana. Vamos a usar watch para ejecutar repetidamente vmstat, por lo que obtenemos una visualización actualizada con frecuencia del uso de la memoria virtual en nuestra computadora.

En el nuevo indicador, escribimos lo siguiente:

La salida vmstat aparece y se actualiza cada dos segundos.

Nuestros dos procesos ahora se están ejecutando. Para saltar entre las ventanas screen, presiona Ctrl + A y el número de la ventana. La primera que creamos es la ventana cero (0), la siguiente es la ventana 1, y así sucesivamente. Para saltar a la primera ventana (la de dmesg), presionamos Ctrl + A y 0.

Si presionamos Ctrl + A y 1, nos lleva de vuelta a la ventana vmstat.

Truco

¡Eso es bastante ingenioso! Podemos presionar Ctrl + A, y luego D para separarnos de esta sesión; podemos volver a unirnos más tarde. Ambas sesiones seguirán ejecutándose. Nuevamente, para cambiar entre las ventanas, presionamos Ctrl + A y el número (0 o 1) de la ventana a la que queremos cambiar.

Vayamos al siguiente paso y veamos ambas pantallas en una ventana. Cuando hagas esto, estirarás tu ventana de la terminal a un tamaño que haga que este paso sea útil. Nuestros ejemplos están limitados al tamaño de nuestras capturas de pantalla, por lo que nuestras ventanas se verán un poco estrechas.

Para hacer esto, presionamos Ctrl + A, y luego Shift + S (se requiere una “S” mayúscula).

La ventana se divide en dos “regiones”.

La región superior todavía muestra vmstat y la región inferior está en blanco. El cursor se resalta en la captura de pantalla a continuación. Para moverlo a la región inferior, presionamos Ctrl + A, y luego Tab.

El cursor se mueve a la región inferior, que realmente es solo un espacio vacío. No es una shell, por lo que no podemos escribir nada en él. Para obtener una visualización útil, presionamos Ctrl + A, y luego presionamos “0” para mostrar la ventana dmesg en esta región.

Esto nos da ambas salidas en vivo en una ventana dividida. Si presionamos Ctrl + A y D para separar la ventana, y luego la volvemos a unir, perderemos la vista de panel dividido. Sin embargo, podemos restaurarlo con los siguientes atajos de teclado.

Atajos de teclado:

  • Ctrl + A, S: divide la ventana horizontalmente.
  • Ctrl + ATabulador: mover a la región inferior.
  • Ctrl + A, 0: ventana de visualización cero en la región inferior.

Podemos llevar las cosas incluso un paso más allá. Ahora dividiremos el panel inferior verticalmente y agregaremos un tercer proceso a la pantalla. Con el cursor en la región inferior, presionamos Ctrl + A y C para crear una nueva ventana con un shell. La región inferior muestra la nueva ventana y nos da un indicador.

A continuación, ejecutamos el comando df para verificar el uso del sistema de archivos:

Cuando vemos ejecutar df, presionamos Ctrl + A y el caracter de tubería (|). Esto divide la región inferior verticalmente. Presionamos Ctrl + A y Tab para movernos a la nueva región. A continuación, presionamos Ctrl + A y 0 para mostrar la ventana de dmesg.

También puedes moverte de una región a otra y agregar más divisiones verticales u horizontales. Aquí hay algunas combinaciones de teclas más útiles:

  • Ctrl + A: Salta de un lado a otro entre las regiones actuales y anteriores.
  • Ctrl + A, Q: cierra todas las regiones excepto la actual.
  • Ctrl + A, X: cierra la región actual.

Usando screen sobre SSH

Con screen, puedes iniciar una sesión de ventana, separarla para que siga ejecutándose en segundo plano, cerrar sesión o volver a iniciarla y volver a conectar la sesión.

Hagamos una conexión SSH a nuestra computadora desde una diferente con el comando ssh. Tenemos que proporcionar el nombre de la cuenta con la que nos vamos a conectar y la dirección de la computadora remota.

Para nuestro ejemplo, escribimos lo siguiente:

Después de autenticarnos en la computadora remota e iniciar sesión, escribimos lo siguiente para iniciar una sesión screen llamada “ssh-geek”:

Para fines de demostración, ejecutaremos top en la ventana screen, pero puedes iniciar cualquier proceso de larga duración o interminable.

Escribimos lo siguiente:

Una vez que se está top ejecutando en la ventana, presionamos Ctrl + A, y luego D para separar la ventana.

Regresamos a la ventana de terminal remota original.

Si escribimos exit, como se muestra a continuación, desconecta la sesión SSH y volvemos a nuestra computadora local:

Escribimos lo siguiente para volver a conectar:

Después de volver a conectarnos e iniciar sesión, podemos escribir lo siguiente para volver a conectar la sesión screen:

Ahora estamos reconectados a nuestra instancia de top.

Esto es excelente si deseas iniciar un proceso en una máquina y luego retomar donde lo dejaste en otra.

Compartir una sesión de screen

También puedes usar una sesión screen para permitir que dos personas vean e interactúen con la misma ventana. Digamos que alguien que ejecuta Fedora en tu computadora quiere conectarse a nuestro servidor Ubuntu.

Él escribiría lo siguiente:

Después de conectarte, debes comenzar una sesión de pantalla llamada “ssh-geek” usando la opción -S (nombre de sesión). También debes usar las opciones –d (separar) y -m (creación forzada) para crear una nueva sesión screen que ya está separada.

Él debe escribir lo siguiente:

Luego escribir lo siguiente, utilizando la opción –X (modo multipantalla) para unir la sesión:

En una computadora Manjaro, otra persona se conecta a la computadora Ubuntu con las mismas credenciales de cuenta, como se muestra a continuación:

Una vez que está conectada, la otra persona debe escribir el comando screen y usar la opción -X (modo multipantalla) para unirse a la misma sesión de ventana, así:

Ahora, cualquier cosa que una persona escriba, la otra lo verá. Por ejemplo, cuando una persona emite el comando date, ambos lo ven como está escrito, así como su salida.

Ambas personas ahora comparten una sesión screen que se ejecuta en una computadora remota de Ubuntu.

Conclusión

Para una pieza de software que vio la luz por primera vez en 1987, screen todavía tiene una buena productividad. ¡Familiarizarse con él será un tiempo bien empleado!