USANDO GNU “SCREEN”

GNU Screen
Screen es una herramienta extraordinariamente útil, nos permite ejecutar múltiples cónsolas que pueden ser minimizadas y re-adjuntadas a voluntad, compartidas, guardadas, divididas y un largo etcétera de opciones.
GNU Screen es una de mis herramientas favoritas para trabajo en servidores (sobre todo, cuando debo dejar haciendo trabajo en el servidor), sin embargo, he notado lo poco que algunos conocen esta herramienta.
Por la sugerencia del amigo, que debía hacer una guía de Screen en español, es que nace este artículo.

Entendiendo SCREEN

En *screen* se manejan 3 conceptos básicos, la “sesión“, es un área de trabajo, que se crea cuando ejecutas el comando screen.
Una ventana, es cónsola shell abierta dentro de una sesión de screen, una sesión de screen puede contener múltiples ventanas.
Una región, es una división, realizada a una ventana, que dentro contiene otra ventana, uno puede dividir una sesión de screen en 2 o más partes, horizontal o verticalmente y en cada split (porción de una región) desplegar una ventana.

Instalar SCREEN

En algunas distribuciones screen ya viene por defecto instalado, en aquellas donde no lo estuviera, con ejecutar:
apt-get install screen
ó
yum install screen
Será más que suficiente.

Crear una sesión de screen

Con simplemente escribir:
screen
se creará una sesión screen.

Crear una sesión de screen con nombre

screen -S [nombre]
Y entrarás en una sesión de screen con el nombre indicado (nota: si se tienen muchísimas sesiones de screen activas, es muy útil identificarlas por nombre).

Operaciones con screens

Todas las operaciones en SCREEN se activan con la secuencia CTRL+a seguida de alguna letra y/o combinación de letras (presionas tecla CONTROL y la letra a, luego sueltas y presionas la letra siguiente).
Ejemplo:
CTRL+a K : presionar CTRL+a y luego K, matará un programa dentro de una screen.
Screen también admite “comandos”, los comandos se escriben luego de escribir “:” (dos puntos), ejemplo:
CTRL+a “:multiuser off”, detiene el multi-usuario de una sesión.

Dettaching, attaching and re-attaching

Una de las cosas más útiles de SCREEN es la posibilidad de ejecutar un comando muy largo (ejemplo, un rsync) y dejarlo ejecutando dentro de una cónsola y luego minimizar la misma y re-conectarse luego.
* “Minimizar” (detach) una cónsola screen:
CTRL+a d nos permitirá minimizar una cónsola.
Para retornar a la cónsola escribimos:
screen -r
De existir más de una cónsola “minimizada”, veremos un listado como este:
# screen -r
There is a screen on:
4870.pts-4.lexotanil (Detached)
4638.pts-1.lexotanil (Detached)
19936.pts-1.lexotanil (18/02/13 12:46:38) (Attached)
Vemos 2 cónsolas minimizadas (Detached) y una abierta (Attached).
De existir una cónsola múlti-usuario, esta se verá:
19936.pts-1.lexotanil (18/02/13 12:46:38) (Multi, attached)
 Hablaremos de ellas más tarde.

Crear “ventanas” dentro de una screen

Cuando estén en una sesión de “screen” y desean crear una “ventana”, ejecuten:
CTRL+a y luego “c” (c:create), esto habilitará otra ventana.
Para cambiar entre ventanas:
CTRL+a entonces números del 0 al 9: cambiar a la ventana según su ordinal (posición)
CTRL+a entonces “n”: “next window”, próxima ventana
CTRL+a entonces ” (comillas dobles) (Mayúsculas-2): Una lista de todas las ventanas creadas
Esto retorna una lista muy parecida a esto:
Num Name Flags
0       bash      $
1       bash      $
2       bash      $
Esta lista se puede “navegar” (flechas arriba y abajo) y ENTER para seleccionar una ventana.
Renombrar ventanas:
Para darle nombre a una “ventana”:
CTRL+a entonces Mayúsculas+a: Aparece un mensaje debajo solicitando el nombre de la screen (en Debian, por defecto “bash”):
Set window’s title to: bash
Borren la palabra “bash” y pongan el nombre que deseen, con CTRL+a+SHIFT+2 verán:
Num Name Flags
0 prueba $
1 bash $
2 test
El nombre correspondiente de la ventana (muy útil para saber de qué se trata cada ventana).

Dividir en regiones

Se puede dividir una ventana en varias regiones, cada región puede tener el foco de una ventana de screen diferente.
CRTL+a SHIFT-s: permite dividir una screen en dos regiones (ver imagen)
screen-split
Luego, podemos cambiar el foco a la nueva región con:
CTRL+a y TAB (tabulación): moverá el foco a la región siguiente
Al estar en esta región podemos realizar las siguientes operaciones:
CTRL+a SHIFT-C: Crear una nueva ventana en la región
CTRL+a n: nos mueve a la ventana actual (la que está arriba), podemos igual cambiar a las diferentes ventanas ya  existentes (ver imagen)
screen-split2
Para cerrar una región, simplemente se ejecuta:
CTRL+a SHIFT-x : cierra la región actual
CTRL+a SHIFT+q : al contrario, cierra todas las regiones, salvo la actual

Pantallas multi-usuario

Una de las ventajas de usar screens, es que una cónsola pueda ser operada por varios usuarios a la vez, es una de las cosas que más uno realiza y de las qué pocos novatos se enteran.

Crear una sesión SCREEN multi-usuario

screen -S prueba
Al tener la sesión screen activa, activar la cónsola de comandos (CTRL+a y luego presionar dos puntos “:” para escribir comandos de screen)
* Activar el modo multi-usuario:
CTRL+a y escribir “:multiuser on”
En este momento, la sesión puede ser accedida por múltiples personas, pero primero, debemos autorizarlos.
* Conectarse a una cónsola multiusuario:
screen -x [nombre de la screen]
ó
screen -r [PID de la sesión]
* Autorización de usuarios
CTRL+a “:acladd [lista de usuarios]“
La lista de usuarios puede ser uno o varios nombres de usuario, separados por comas:
ejemplo:
CTRL+a ":acladd jesuslara,soporte"
El usuario que creó la sesión de screen, más los usuarios “jesuslara” y “soporte” tienen derecho a acceder a la sesión screen.
* Permisos en la cónsola screen multi-usuario:
La utilidad de las cónsolas multi-usuario es que permiten a algunos trabajar y otros “ver” lo que uno está realizando, los permisos son w:write, r:read y x:execution con los valores “+” (garantizar) y “-” (revocar), luego de los permisos viene el número de la ventana donde recibirá los permisos (el símbolo “#” indica “todas las ventanas”).
ejemplo:
CTRL+a :aclchg soporte -w “#”
El usuario soporte queda sin permisos de escritura en todas las cónsolas screen abiertas.
* Ver los usuarios conectados a una cónsola screen
CTRL+a SHIFT-”+” (CTRL+a “*”)
Retorna la lista de usuarios conectados en una cónsola screen..
Ejemplo de lista de usuarios conectados:
term-type size user interface window Perms
———- ——- ———- —————– ———- —–
xterm 85×25 root@/dev/pts/1 nb 0(prueba) rwx
 

Mensaje a todas las ventanas activas

Podemos enviar un mensaje a todas las ventanas activas de una sesión usando el comando “:wall”
CTRL+a “:wall [mensaje]“
Envía el mensaje a todas las ventanas de la sesión conectadas.

Conclusiones

SCREEN es una herramienta poderosa, que nos permite trabajar de manera cooperativa y colaborativa con cónsolas activas en servidores, sin tener que recurrir a “maromas” cómo pantallas compartidas de Skype, Teamviewer ú otras soluciones “resource-hungry”, algo tan sencillo como SSH y una cónsola SCREEN compartida, nos permite operar con confianza contra nuestros servidores Linux, macOSX/BSD; se puede incluso hacer trucos cómo que ssh-agent genere una screen automáticamente por cada sesión remota SSH que se genere en el servidor, o ejecutar:
CTRL+a y luego SHIFT+H: permite guardar el historial de comandos realizados por una ventana screen.
Espero que el pana @terracenter (quien pidió esta guía inicialmente) y el resto de mis lectores le saquen el provecho necesario, si no conocían screen, espero lo usen, y si ya lo conocían, espero haberles brindado algunos trucos útiles.
Fuente:

Comentarios

Entradas populares de este blog

Comandos Solaris

MikroTik QoS Script generator

Comando para eliminar saltos de linea en fichero o archivo desde consola Linux