USANDO 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 -rThere 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
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
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)
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)
CTRL+a n: nos mueve a la ventana actual (la que está arriba), podemos igual cambiar a las diferentes ventanas ya existentes (ver imagen)
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
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 “*”)
* 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