Kubernetes: Una breve introducción
Una breve historia de las shells

Guía del comando screen

Guía del Comandos screen

El comando screen es un gestor de ventanas a pantalla completa que multiplexa un terminal físico entre varios procesos (típicamente shells interactivos). Decir que puede hacer mucho es quedarse corto. La página del manual tiene más de 4,100 líneas.

Los siguientes son los casos más comunes en los que utilizarías el comando screen:

  • La operación estándar consiste en crear una nueva ventana con una shell en ella, ejecutar un comando y luego enviar la ventana al fondo (llamado «detaching»). Cuando quieras ver cómo va tu proceso, puedes volver a traer la ventana al primer plano («reattach») y usarla nuevamente. Esto es ideal para procesos largos que no deseas terminar accidentalmente al cerrar la ventana de la terminal.
  • Una vez que tengas una sesión de «screen» en ejecución, puedes crear nuevas ventanas y ejecutar otros procesos en ellas. Puedes alternar fácilmente entre las ventanas para supervisar su progreso. También puedes dividir la ventana de tu terminal en regiones verticales u horizontales y mostrar varias ventanas de «screen» en una sola ventana.
  • Puedes conectarte a una máquina remota, iniciar una sesión de «screen» y lanzar un proceso. Puedes desconectarte del host remoto, volver a conectarte y tu proceso seguirá en ejecución.
  • Puedes compartir una sesión de «screen» entre dos conexiones SSH diferentes para que dos personas puedan ver lo mismo en tiempo real.

Instalación del comando screen

Para instalar «screen» en Ubuntu, usa este comando:

sudo apt-get install screen

En Manjaro, usa el siguiente comando:

sudo pacman -Sy screen

En Fedora, puedes usar el siguiente comando:

sudo dnf install screen

Empezar con screen

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

screen

Verás una página de información de licencia. Puedes presionar la barra espaciadora para leer la segunda página o Enter para volver al indicador de comando.

Comando screen

Estás en el indicador de comando y aparentemente no ha sucedido mucho. Sin embargo, ahora estás ejecutando una shell dentro de un emulador de terminal multiplexado. ¿Por qué es esto bueno? Bueno, comencemos un proceso que llevará mucho tiempo en completarse. 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:

curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip

Nuestra descarga comienza y la salida de «curl» nos muestra el progreso.
Descarga curl
No podemos mostrarte una imagen de la siguiente parte porque es una secuencia de teclas. Debes presionar Ctrl+A, soltar esas teclas y luego presionar «d» para desacoplar la ventana.

El proceso de descarga sigue en ejecución, pero la ventana que muestra la descarga se ha eliminado. Regresas a la ventana de la terminal desde la cual iniciaste la sesión de «screen». Un mensaje te dice que se ha desacoplado una ventana de «screen» etiquetada como 23167.pts-0.howtogeek.

Necesitas el número del inicio del nombre de la ventana para volver a acoplarla. Si lo olvidas, siempre puedes usar la opción «-ls» (listar), como se muestra a continuación, para obtener una lista de las ventanas desacopladas:

screen -ls

Comando screen -ls

Cuando estés listo, puedes usar la opción «-r» (reatarcar) y el número de la sesión para volver a acoplarla, así:

screen -r 23167

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

Comando screen -r

Si es un proceso que se ejecutará hasta su finalización, eventualmente se completará. Si es un proceso continuo, eventualmente querrás terminarlo. De cualquier manera, cuando el proceso finalice, puedes escribir «exit» para salir de «screen». Alternativamente, puedes presionar Ctrl+A y luego «K» para matar una ventana de manera forzada.

Escribe el siguiente comando:

exit

Regresas a tu ventana de terminal anterior, que seguirá mostrando el comando que usaste para volver a acoplar la ventana. Como cerramos nuestra única ventana desacoplada, recibimos un mensaje de que «screen» se está terminando.

Usar Sesiones de screen Nombradas

Puedes usar la opción «-S» (nombre de sesión) para nombrar tu sesión de «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»:

screen -S bigfile

Cuando «screen» inicia nuestra sesión, vemos una ventana en blanco con un indicador de comando. Vamos a descargar un archivo grande para usarlo como ejemplo de un proceso de larga duración.

Escribimos lo siguiente:

curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip

Cuando comienza la descarga, presionamos Ctrl+A y luego «D» para desacoplar la sesión. Escribimos lo siguiente para usar la opción «-ls» (listar) con «screen» y ver los detalles de nuestra sesión desacoplada:

screen -ls

comando screen -ls

Junto al identificador numérico (23266), vemos el nombre de nuestra sesión (bigfile). Escribimos lo siguiente, incluyendo el nombre de la sesión, para volver a acoplarla:

screen -r bigfile

Ahora estamos reconectados a nuestra ventana de descarga y vemos que la larga descarga todavía está en progreso.

comando screen -r bigfile
Cuando la descarga esté completa, escribimos «exit» para cerrar la ventana de la sesión.

screen con Múltiples Ventanas

Hasta ahora, hemos usado «screen» para colocar un solo proceso en el fondo en una ventana desacoplada. Sin embargo, «screen» es capaz de hacer mucho más que eso. A continuación, ejecutaremos algunos procesos que nos permitirán supervisar algunos aspectos de nuestra computadora.

Escribimos lo siguiente para iniciar una sesión de «screen» llamada «monitor»:

screen -S monitor

En el indicador de comando de nuestra nueva ventana de sesión, lanzamos «dmesg» y usamos las opciones «-H» (legible por humanos) y «-w» (esperar nuevos mensajes). Esto mostrará los mensajes del búfer del kernel; los nuevos mensajes aparecerán a medida que ocurran.

Escribimos lo siguiente:

dmesg -H -w

Aparecen los mensajes existentes. No regresamos al indicador de comando porque «dmesg» está esperando nuevos mensajes y los mostrará a medida que lleguen.

dmesg

Queremos ejecutar otra aplicación, así que necesitamos una nueva ventana de «screen». Presionamos Ctrl+A y luego «C» para crear una ventana nueva. Vamos a usar «watch» para ejecutar repetidamente «vmstat», de modo que obtengamos una pantalla actualizada con el uso de memoria virtual de nuestra computadora.

En el nuevo indicador de comando, escribimos lo siguiente:

watch vmstat

Aparece la salida de «vmstat» y se actualiza cada dos segundos.

watch vmstat

Ahora tenemos dos procesos en ejecución. Para alternar entre las ventanas de «screen», presionamos 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 ir a la primera ventana (la de «dmesg»), presionamos Ctrl+A y 0.

vmstat

Si presionamos Ctrl+A y 1, volvemos a la ventana de «vmstat».

vmstat

¡Eso es bastante útil! Podemos presionar Ctrl+A y luego «D» para desacoplar la sesión; podemos volver a acoplarla más tarde. Ambas sesiones seguirán en ejecución. Nuevamente, para cambiar entre las ventanas, presionamos Ctrl+A y el número (0 o 1) de la ventana a la que deseamos cambiar.

Vamos al siguiente paso y veamos ambas pantallas en una sola ventana. Cuando hagas esto, debes ajustar el tamaño de tu ventana de terminal para 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 comprimidas.

Para hacer esto, presionamos Ctrl+A y luego Mayús+S (se requiere una «S» en mayúscula).

La ventana se divide en dos «regiones».

vmstat bash

La región superior aún muestra «vmstat» y la región inferior está en blanco. El cursor está resaltado 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 en realidad es solo un espacio vacío. No es una shell, por lo que no podemos escribir nada en ella. Para obtener una pantalla útil, presionamos Ctrl+A y luego «0» para mostrar la ventana de «dmesg» en esta región.

vmstat bash

Esto nos da ambas salidas en vivo en una ventana dividida. Si presionamos Ctrl+A y «D» para desacoplar la ventana y luego la volvemos a acoplar, perderemos la vista de pantalla dividida. Sin embargo, podemos restaurarla con las siguientes combinaciones de teclas:

  • Ctrl+A, S: Dividir la ventana horizontalmente.
  • Ctrl+A, Tab: Moverse a la región inferior.
  • Ctrl+A, 0: Mostrar la ventana cero en la región inferior.

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

Luego, ejecutamos el comando «df» para verificar el uso del sistema de archivos:

df

Cuando vemos que «df» se está ejecutando, presionamos Ctrl+A y el carácter de tubería («|»). Esto divide la región inferior verticalmente. Presionamos Ctrl+A y Tab para movernos a la nueva región. Luego, presionamos Ctrl+A y 0 para mostrar la ventana de «dmesg».

vmstat bash df

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

  • Ctrl+A: Cambiar entre la región actual y la región anterior.b
  • Ctrl+A, Q: Cerrar todas las regiones excepto la actual.
  • Ctrl+A, X: Cerrar la región actual.

Usar el comando screen a través de SSH

Con «screen», puedes iniciar una sesión de ventana, desacoplarla para que siga en segundo plano, cerrar sesión o volver a iniciar sesión y volver a acoplar la sesión.

Hagamos una conexión SSH a nuestra computadora desde otra con el comando «ssh». Debemos proporcionar el nombre de la cuenta con la que nos conectaremos y la dirección de la computadora remota.

Para nuestro ejemplo, escribimos lo siguiente:

ssh dave@192.168.4.30

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

screen -S ssh-geek

Por razones de demostración, ejecutaremos «top» en la ventana de «screen», pero podrías iniciar cualquier proceso de larga duración o infinito.

Escribimos lo siguiente:

top

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

top

Regresamos a la ventana de terminal original.

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

exit

Escribimos lo siguiente para volver a conectarnos:

ssh dave@192.168.4.30

top

Después de reconectarnos e iniciar sesión, escribimos lo siguiente para volver a acoplar la sesión de «screen»:

screen -r ssh-geek

Ahora estamos nuevamente conectados a nuestra instancia de «top» que sigue en ejecución.

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

Compartir una Sesión de screen

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

Esa persona escribiría lo siguiente:

ssh dave@192.168.4.30

Escribimos lo siguiente para iniciar una sesión de «screen» llamada «ssh-geek» usando la opción «-S» (nombre de sesión). También usamos las opciones «-d» (desacoplar) y «-m» (creación forzada) para crear una nueva sesión de «screen» que ya esté desacoplada:

screen -d -m -S ssh-geek

Escribimos lo siguiente, usando la opción «-x» (modo múltiple) para adjuntar la sesión:

screen -x ssh-geek

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

ssh dave@192.168.4.1

Una vez que ella está conectada, escribe el comando «screen» y usa la opción «-X» (modo múltiple) para unirse a la misma sesión de ventana, así:

screen -X ssh-geek

Ahora, cualquier cosa que cualquiera de las dos personas escriba, la verá la otra. Por ejemplo, cuando una persona emite el comando «date», ambas lo ven mientras se escribe, así como su salida.

screen

screen

Ambas personas están compartiendo ahora una sesión de «screen» que se ejecuta en una computadora Ubuntu remota.

Más apuntes

Invítame a un café con bitcoins:
1QESjZDPxWtZ9sj3v5tvgfFn3ks13AxWVZ

Bitcoins para café
También puedes invitarme a algo para mojar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Rellena este campo
Rellena este campo
Por favor, introduce una dirección de correo electrónico válida.
Tienes que aprobar los términos para continuar