- Dave McKay
@TheGurkha
- El 27 de marzo de 2020, 8:00am EDT
Con el comando Linux screen
, puedes empujar las aplicaciones de terminal que se están ejecutando al fondo y sacarlas hacia delante cuando quieras verlas. También es compatible con la visualización en pantalla dividida y funciona a través de conexiones SSH, incluso después de desconectar y volver a conectar!
¿Qué es el comando de pantalla?
El comando screen
es un multiplexor de terminal, y está absolutamente lleno de opciones. Decir que puede hacer mucho es el mayor 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 se utilizaría el comando screen
, y los cubriremos más adelante en este artículo:
- La operación estándar es crear una nueva ventana con un shell en ella, ejecutar un comando, y luego empujar la ventana al fondo (llamado «detaching»). Cuando quieras ver cómo va tu proceso, puedes volver a sacar la ventana al primer plano («reattach») y utilizarla de nuevo. Esto es genial para procesos largos que no quieres terminar 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 las ventanas para supervisar su progreso. También puede dividir su ventana de terminal en regiones verticales u horizontales, y mostrar sus diversasscreen
ventanas en una sola ventana. - Puede conectarse a una máquina remota, iniciar una
screen
sesión, y lanzar un proceso. Puedes desconectarte del host remoto, volver a conectarte y tu proceso seguirá en marcha. - 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, utiliza este comando:
sudo apt-get install screen
Para instalar screen
en Manjaro, utilice el siguiente comando:
sudo pacman -Sy screen
En Fedora, se escribe lo siguiente:
sudo dnf install screen
Cómo empezar con screen
Para empezar screen
, simplemente escribe como se muestra a continuación y pulsa Enter:
screen
Verás una página de información sobre la licencia. Puedes pulsar la barra espaciadora para leer la segunda página o Enter para volver al símbolo del sistema.
Te quedas en el símbolo del sistema, y no parece haber pasado gran cosa. Sin embargo, ahora estás ejecutando un shell dentro de un emulador de terminal multiplexado. ¿Por qué es esto algo bueno? Bueno, vamos a comenzar un proceso que va a tomar mucho tiempo para completar. Vamos a descargar el código fuente del último kernel de Linux y a redirigirlo a un archivo llamado latest_kernel.zip
.
Para ello, 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 curl
nos muestra el progreso.
No podemos mostrarte una imagen del siguiente bit, porque es una secuencia de teclas. Escribes Ctrl+A, sueltas esas teclas y luego pulsas d para despegar la pantalla.
El proceso de descarga sigue en marcha pero la ventana que muestra la descarga desaparece. Vuelves a la ventana de terminal desde la que iniciaste la sesión screen
. Un mensaje te indica que se ha desprendido una ventana screen
etiquetada como 23167.pts-0.howtogeek
.
Necesitas el número del inicio del nombre de la ventana para volver a pegarla. Si lo olvida, siempre puede utilizar la opción -ls
(lista), como se muestra a continuación, para obtener una lista de las ventanas desprendidas:
screen -ls
Cuando estés listo, puedes usar la opción -r
(reattach) y el número de la sesión para reattach, así:
screen -r 23167
La ventana que ha estado trabajando en segundo plano vuelve a su ventana de terminal como si nunca se hubiera ido.
Si es un proceso que se va a ejecutar hasta su conclusión, acabará completándose. Si es un proceso continuo, eventualmente querrá terminarlo. De cualquier manera, cuando el proceso termina, puedes escribir exit
para salir del screen
. Alternativamente, puedes pulsar Ctrl+A, y luego K para matar a la fuerza una ventana.
Escribe el siguiente comando:
exit
Volverás a tu ventana de terminal anterior, que seguirá mostrando el comando que utilizaste para volver a adjuntar la ventana. Debido a que cerramos nuestra única ventana desprendida, obtenemos un mensaje de que screen
está terminando.
Relacionado: Cómo usar curl para descargar archivos desde la línea de comandos de Linux
Usando sesiones de pantalla con nombre
Puede usar la opción -S
(nombre de sesión) para nombrar su screen
sesión. Si utilizas un nombre memorable en lugar de la identidad numérica de la sesión, es más cómodo volver a conectarse a una sesión. Escribimos lo siguiente para nombrar nuestra sesión «bigfile»:
screen -S bigfile
Cuando screen
lanza nuestra sesión, vemos una ventana en blanco con un prompt de comandos. Vamos a descargar un archivo grande, así que podemos usar un proceso de larga duración como ejemplo.
Escribimos lo siguiente:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
Cuando se inicie la descarga, pulsamos Ctrl+A, y luego pulsamos D para desconectar la sesión. Escribimos lo siguiente para usar la opción -ls
(lista) con screen
para ver los detalles de nuestra sesión desprendida:
screen -ls
Detrás del 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 adjuntarla:
screen -r bigfile
Nos volvemos a conectar a nuestra ventana de descarga y vemos que la descarga larga sigue en curso.
Cuando la descarga está completa, escribimos exit
para cerrar la ventana de la sesión.
Usando pantalla con múltiples ventanas
Hasta ahora, hemos usado screen
para colocar un solo proceso en segundo plano en una ventana desvinculada. Sin embargo, screen
es capaz de hacer mucho más que eso. A continuación, ejecutaremos unos cuantos procesos que nos permitirán monitorizar algunos aspectos de nuestro ordenador.
Escribimos lo siguiente para iniciar una sesión de pantalla llamada «monitor»:
screen -S monitor
En el prompt de comandos de nuestra nueva sesión de ventana, lanzaremos dmesg
y utilizaremos las opciones -H
(lectura humana) y -w
(esperar nuevos mensajes). Esto mostrará los mensajes del buffer del kernel; los nuevos mensajes aparecerán a medida que se produzcan.
Escribimos lo siguiente:
dmesg -H -w
Los mensajes existentes aparecen. No se nos devuelve al símbolo del sistema porque dmseg
está a la espera de nuevos mensajes, y los mostrará a medida que vayan llegando.
Relacionado: Cómo usar el comando dmesg en Linux
Queremos ejecutar otra aplicación, por lo que necesitamos una nueva ventana screen
. Pulsamos Ctrl+A, y luego C para crear una nueva ventana. Vamos a utilizar watch
para ejecutar repetidamente vmstat
, de forma que obtengamos una visualización actualizada frecuentemente del uso de la memoria virtual en nuestro ordenador.
En el nuevo símbolo del sistema, escribimos lo siguiente:
watch vmstat
La salida vmstat
aparece y se actualiza cada dos segundos.
Nuestros dos procesos están ahora en ejecución. Para saltar entre las ventanas screen
, se pulsa 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 dmesg
), pulsamos Ctrl+A y 0.
Si pulsamos Ctrl+A y 1, nos devuelve a la ventana vmstat
.
¡Esto es muy ingenioso! Podemos pulsar Ctrl+A, y luego D para separarnos de esta sesión; podemos volver a conectarnos más tarde. Ambas sesiones seguirán funcionando. De nuevo, para cambiar entre las ventanas, pulsamos Ctrl+A y el número (0 o 1) de la ventana a la que queremos cambiar.
Vamos al siguiente paso y veamos ambas pantallas en una sola ventana. Al hacer esto, estirarás la ventana de tu terminal hasta un tamaño que haga útil este paso. Nuestros ejemplos están limitados al tamaño de nuestras capturas de pantalla, por lo que nuestras ventanas se verán un poco apretadas.
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 sigue mostrando vmstat
, y la región inferior está en blanco. El cursor está resaltado en la captura de pantalla de abajo. Para moverlo a la región inferior, pulsamos Ctrl+A, y luego Tab.
El cursor se mueve a la región inferior, que realmente es sólo un espacio vacío. No es un shell, por lo que no podemos escribir nada en él. Para obtener una pantalla útil, pulsamos Ctrl+A, y luego pulsamos «0» para mostrar la ventana dmesg
en esta región.
Esto nos da ambas salidas en vivo en una ventana dividida. Si pulsamos Ctrl+A y D para separar la ventana, y luego la volvemos a unir, perderemos la vista del panel dividido. Sin embargo, podemos restaurarla con los siguientes atajos de teclado:
- Ctrl+A, S: Dividir la ventana horizontalmente.
- Ctrl+A, Tab: Mover a la región inferior.
- Ctrl+A, 0: Mostrar el cero de la ventana en la región inferior.
Podemos llevar las cosas incluso un paso más allá. Ahora dividiremos el panel inferior verticalmente, y añadiremos un tercer proceso a la pantalla. Con el cursor en la región inferior, pulsamos Ctrl+A y C para crear una nueva ventana con un shell en ella. La región inferior muestra la nueva ventana y nos da un prompt de comandos.
A continuación, ejecutamos el comando df
para comprobar el uso del sistema de archivos:
df
Cuando veamos que se está ejecutando df
, pulsamos Ctrl+A y el carácter pipa (|)
. Esto divide la región inferior verticalmente. Pulsamos Ctrl+A y Tabulador para pasar a la nueva región. A continuación, pulsamos Ctrl+A y 0 para mostrar la ventana dmesg
.
También puedes moverte de región en región, y añadir más divisiones verticales u horizontales. Aquí hay más combinaciones de teclas útiles:
- Ctrl+A: salta hacia adelante y hacia atrás entre la región actual y la anterior.
- Ctrl+A, Q: cierra todas las regiones excepto la actual.
- Ctrl+A, X: Cierra la región actual.
Usando la pantalla sobre SSH
Con screen
, puedes iniciar una sesión de ventana, separarla para que siga funcionando en segundo plano, cerrar o volver a entrar y volver a unir la sesión.
Vamos a realizar una conexión SSH a nuestro ordenador desde otro diferente con el comando ssh
. Tenemos que proporcionar el nombre de la cuenta con la que nos vamos a conectar y la dirección del ordenador remoto.
Para nuestro ejemplo, escribimos lo siguiente:
ssh [email protected]
Después de autenticarnos en el ordenador remoto y de iniciar sesión, escribimos lo siguiente para iniciar una sesión screen
llamada «ssh-geek»:
screen -S ssh-geek
Para la demostración, ejecutaremos top
en la ventana screen
, pero podrías iniciar cualquier proceso de larga duración o interminable.
Escribimos lo siguiente:
top
Una vez que top
se está ejecutando en la ventana, pulsamos Ctrl+A, y luego D para desprender la ventana.
Volvemos a la ventana de terminal original y remota.
Si escribimos exit
, como se muestra a continuación, se desconecta la sesión SSH y volvemos a nuestro ordenador local:
exit
Escribimos lo siguiente para volver a conectarnos:
ssh [email protected]
Después de que nos hayamos reconectado y hayamos iniciado sesión, podemos escribir lo siguiente para volver a conectar la screen
sesión:
screen -r ssh-geek
Ahora estamos reconectados a nuestra instancia aún en ejecución de top
.
Esto es genial si quieres iniciar un proceso en una máquina, y luego retomarlo donde lo dejaste en otra.
RELACIÓN: Cómo crear e instalar claves SSH desde el shell de Linux
Compartir una sesión de pantalla
También puedes usar una sesión screen
para permitir que dos personas vean e interactúen con la misma ventana. Supongamos que alguien que ejecuta Fedora en su ordenador quiere conectarse a nuestro servidor Ubuntu.
Escribiría lo siguiente:
ssh [email protected]
Después de conectarse, inicia una sesión de pantalla llamada «ssh-geek» utilizando la opción -S (nombre de la sesión). También utiliza las opciones -d
(detach) y -m
(enforced creation) para crear una nueva screen
sesión que ya está separada.
Escribe lo siguiente:
screen -d -m -S ssh-geek
Escribe lo siguiente, utilizando la opción -X
(modo multipantalla) para adjuntar la sesión:
screen -X ssh-geek
En un ordenador Manjaro, otra persona se conecta al ordenador Ubuntu con las mismas credenciales de cuenta, como se muestra a continuación:
ssh [email protected]
Una vez conectada, escribe el comando screen
y utiliza la opción -X (modo multipantalla) para unirse a la misma sesión de la ventana, así:
screen -X ssh-geek
Ahora, cualquier cosa que escriba cualquiera de las dos personas, la otra la verá. Por ejemplo, cuando una persona emite el comando «date», ambos lo ven mientras lo escriben, así como su salida.
Ambas personas están ahora compartiendo una sesión de screen
que se está ejecutando en un ordenador remoto de Ubuntu.
Para una pieza de software que vio la luz por primera vez en 1987, screen
sigue siendo un buen golpe de productividad. Familiarizarse con él será un tiempo bien invertido!
Relacionado: 37 comandos importantes de Linux que deberías conocer
Utilizó por primera vez los ordenadores cuando la cinta de papel perforada estaba de moda, y ha estado programando desde entonces. Después de más de 30 años en la industria de la informática, ahora es un periodista de tecnología a tiempo completo. A lo largo de su carrera, ha trabajado como programador independiente, director de un equipo internacional de desarrollo de software, gestor de proyectos de servicios informáticos y, más recientemente, como responsable de protección de datos. Dave es un evangelista de Linux y defensor del código abierto.Read Full Bio »