Con linux screen
, puede empujar las aplicaciones de terminal en ejecución a segundo plano y tirar de ellas hacia adelante cuando desee verlas. También es compatible con pantallas divididas y funciona a través de conexiones SSH, ¡incluso después de desconectarse y volver a conectarse!
¿De qué vamos a hablar?
¿Qué es el comando de pantalla?
El screen
El comando es un comando multiplexador de terminales, y está absolutamente repleto de opciones. Decir que puede hacer mucho es el abuelo de los eufemismos. La página del man se extiende a más de 4.100 líneas.
Los siguientes son los casos más comunes en los que utilizaría el screen
y los cubriremos más a fondo en este artículo:
- La operación estándar es crear una nueva ventana con un shell, ejecutar un comando y luego empujar la ventana al fondo (llamado “separación”). Cuando desee ver cómo va su proceso, puede volver a poner la ventana en primer plano (“volver a adjuntar”) y usarla nuevamente. Esto es ideal para procesos largos que no desea terminar accidentalmente cerrando la ventana del terminal.
- Una vez que tengas un
screen
sesión en ejecución, puede crear nuevas ventanas y ejecutar otros procesos en ellas. Puede saltar fácilmente entre ventanas para monitorear su progreso. También puede dividir la ventana de su terminal en regiones verticales u horizontales, y mostrar sus diversasscreen
ventanas en una ventana. - Puede conectarse a una máquina remota, iniciar un
screen
y lanzar un proceso. Puede desconectarse del host remoto, volver a conectarse y su proceso seguirá ejecutándose. - Puedes compartir un
screen
sesión entre dos conexiones SSH diferentes para que dos personas puedan ver lo mismo, en tiempo real.
Pantalla de instalación
Para instalar screen
en ubuntu, use este comando:
sudo apt-get install screen
Para instalar screen
en Manjaro, utilice el siguiente comando:
sudo pacman -Sy screen
En Fedora, usted escribe lo siguiente:
sudo dnf install screen
Introducción a la pantalla
Empezar screen
, simplemente escóralo como se muestra a continuación y presiona Enter:
screen
Verá una página con información de licencia. Puede presionar la barra espaciadora para leer la segunda página o Entrar para volver al símbolo del sistema.
Te quedas en el símbolo del sistema, y nada parece haber sucedido. Sin embargo, ahora está ejecutando un shell dentro de un emulador de terminal multiplexado. ¿Por qué es esto algo bueno? Bueno, comencemos un proceso que tomará mucho tiempo completar. Descargaremos el código fuente del último kernel de Linux y lo redirigiremos 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 el curl
la salida nos muestra el progreso.
No podemos mostrarte una imagen del siguiente bit, porque es una secuencia de pulsaciones de teclas. Escriba Ctrl+A, suelte esas teclas y, a continuación, presione d para separar la pantalla.
El proceso de descarga sigue ejecutándose, pero se elimina la ventana que muestra la descarga. Volverá a la ventana del terminal desde la que inició el screen
sesión. Un mensaje le indica que un screen
ventana etiquetada 23167.pts-0.howtogeek
se ha desprendido.
Necesita el número del principio del nombre de la ventana para volver a adjuntarlo. Si lo olvidas, siempre puedes usar el -ls
(lista) opción, como se muestra a continuación, para obtener una lista de las ventanas separadas:
screen -ls
Cuando esté listo, puede usar el -r
(volver a adjuntar) y el número de la sesión para volver a adjuntarla, así:
screen -r 23167
La ventana que ha estado funcionando en segundo plano ahora se devuelve a la ventana de su terminal como si nunca se hubiera ido.
Si es un proceso que va a llegar a su conclusión, eventualmente se completará. Si se trata de un proceso continuo, eventualmente querrá terminarlo. De cualquier manera, cuando finalice el proceso, puede escribir exit
para salir del screen
. Alternativamente, puede presionar Ctrl + A y luego K para matar por la fuerza una ventana.
Escriba el siguiente comando:
exit
Volverá a la ventana del terminal anterior, que seguirá mostrando el comando que utilizó para volver a conectar la ventana. Debido a que cerramos nuestra única ventana separada, recibimos un mensaje de que screen
está terminando.
Uso de sesiones de pantalla con nombre
Puede utilizar el -S
(nombre de sesión) opción para nombrar su screen
sesión. Si usa un nombre memorable en lugar de la identidad numérica de la sesión, es más conveniente volver a conectarse 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 símbolo del sistema. Vamos a descargar un archivo grande, por lo 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 inicia la descarga, presionamos Ctrl + A y luego presionamos D para separar la sesión. Escribimos lo siguiente para usar el -ls
(lista) opción con screen
para ver los detalles de nuestra sesión separada:
screen -ls
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 adjuntarla:
screen -r bigfile
Nos reconectamos a nuestra ventana de descarga y vemos que la descarga larga aún está en curso.
Cuando se completa la descarga, escribimos exit
para cerrar la ventana de sesión.
Uso de la pantalla con varias ventanas
Hasta ahora, hemos utilizado screen
para colocar 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 pantalla llamada “monitor”:
screen -S monitor
En el símbolo del sistema de nuestra sesión de nueva ventana, iniciaremos dmesg
y utilice el -H
(legible por humanos) y -w
(esperar nuevos mensajes) opciones. Esto Mostrar los mensajes del búfer del kernel; aparecerán nuevos mensajes a medida que se produzcan.
Escribimos lo siguiente:
dmesg -H -w
Aparecen los mensajes existentes. No volvemos al símbolo del sistema porque dmseg
está esperando nuevos mensajes, y los mostrará a medida que lleguen.
Queremos ejecutar otra aplicación, por lo que necesitamos una nueva screen
ventana. Presionamos Ctrl + A y luego C para crear una ventana nueva. Vamos a usar watch
Para ejecutar repetidamente vmstat
, por lo que obtenemos una actualización frecuente Visualización del uso de la memoria virtual en nuestro ordenador.
En el nuevo símbolo del sistema, escribimos lo siguiente:
watch vmstat
El vmstat
la salida aparece y se actualiza cada dos segundos.
Nuestros dos procesos ya están en marcha. Para saltar entre el screen
windows, presione 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 (el dmesg
uno), presionamos Ctrl+A y 0.
Si pulsamos Ctrl+A y 1, nos lleva de nuevo al vmstat
ventana.
¡Eso es bastante ingenioso! Podemos presionar Ctrl+A, y luego D para separarnos de esta sesión; podemos volver a conectar más tarde. Ambas sesiones seguirán en ejecución. 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.
Vayamos al siguiente paso y veamos ambas pantallas en una ventana. Cuando haga esto, estirará la ventana de su 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 Mayús + S (se requiere una “S” mayúscula).
La ventana se divide en dos “regiones”.
La región superior sigue siendo la que se 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 en realidad es solo un espacio vacío. No es una cáscara, por lo que no podemos escribir nada en ella. Para obtener una visualización útil, presionamos Ctrl + A y luego presionamos “0” para mostrar el 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 volver a adjuntarla, perderemos la vista de panel dividido. Sin embargo, podemos restaurarlo con los siguientes atajos de teclado:
- Ctrl+A, S: Divida la ventana horizontalmente.
- Ctrl+A, Pestaña: Desplazarse a la región inferior.
- Ctrl+A, 0: Mostrar la ventana 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 en ella. La región inferior muestra la nueva ventana y nos da un símbolo del sistema.
A continuación, ejecutamos el df
comando a Comprobar el uso del sistema de archivos:
df
Cuando vemos df
Corriendo, pulsamos Ctrl+A y el carácter de tubería (|)
. Esto divide la región inferior verticalmente. Presionamos Ctrl+A y Tab para pasar a la nueva región. A continuación, presionamos Ctrl + A y 0 para mostrar el dmesg
ventana.
También puede moverse de una región a otra y agregar más vdivisiones erticales 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: Cierre todas las regiones excepto la actual.
- Ctrl+A, X: Cierre la región actual.
Uso de la pantalla sobre SSH
Con screen
, puede 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 adjuntar la sesión.
Hagamos un SSH conexión a nuestro ordenador de uno diferente con el ssh
mandar. 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 dave@192.168.4.30
Después de autenticarnos en el equipo remoto e iniciar sesión, escribimos lo siguiente para iniciar un screen
sesión llamada “ssh-geek”:
screen -S ssh-geek
Para fines de demostración, ejecutaremos top
En screen
pero podría iniciar cualquier proceso de larga duración o interminable.
Escribimos lo siguiente:
top
Una vez top
se está ejecutando en la ventana, presionamos Ctrl + A y luego D para separar la ventana.
Volvemos a la ventana original del terminal remoto.
Si escribimos exit
, como se muestra a continuación, desconecta la sesión SSH y estamos de vuelta en nuestro equipo local:
exit
Escribimos lo siguiente para volver a conectarnos:
ssh dave@192.168.4.30
Después de volver a conectarnos e iniciar sesión, podemos escribir lo siguiente para volver a conectar el screen
sesión:
screen -r ssh-geek
Ahora estamos reconectados a nuestra instancia aún en ejecución de top
.
Esto es genial si desea iniciar un proceso en una máquina y luego continuar donde lo dejó en otra.
Compartir una sesión de pantalla
También puede utilizar un screen
para permitir que dos personas vean e interactúen con la misma ventana. Digamos que alguien que ejecuta Fedora en su computadora quiere conectarse a nuestro servidor Ubuntu.
Escribiría lo siguiente:
ssh dave@192.168.4.30
Después de conectarse, inicia una sesión de pantalla llamada “ssh-geek” usando la opción -S (nombre de sesión). También utiliza el -d
(separar) y -m
(creación forzada) opciones para crear un nuevo screen
sesión que ya está separada.
Escribe lo siguiente:
screen -d -m -S ssh-geek
Escribe lo siguiente, utilizando el -x
(modo multipantalla) opción 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 está conectada, escribe el screen
y utiliza la opción -X (modo multipantalla) para unirse a la misma sesión de ventana, así:
screen -X ssh-geek
Ahora, cualquier cosa que cualquiera de las dos personas escribe, la otra verá. Por ejemplo, cuando una persona emite el comando date, ambos lo ven como está escrito, así como su salida.
Ambas personas ahora están compartiendo un screen
sesión que se ejecuta en una computadora Ubuntu remota.
Para una pieza de software que vio la luz por primera vez en 1987, screen
todavía tiene un buen wallop de productividad. ¡Familiarizarse con él será un tiempo bien empleado!