Administrando sistemas con GNU Screen

15
ADMINISTRANDO SISTEMAS CON GNU SCREEN http://vjavierf.wordpress.com https://www.gnu.org/software/screen/ Una breve introducción al uso de GNU Screen

description

Una breve introducción al uso de GNU Screen

Transcript of Administrando sistemas con GNU Screen

Page 1: Administrando sistemas con GNU Screen

ADMINISTRANDO SISTEMAS CON GNU SCREEN

http://vjavierf.wordpress.com

https://www.gnu.org/software/screen/

Una breve introducción al uso de GNU Screen

Page 2: Administrando sistemas con GNU Screen

GNU Screen…¿Para qué?

Para multiplexar terminales. Screen permite tener múltiples ventanas en una única

aplicación de terminal.

Ventajas: No necesitamos ejecutar varias instancias de la

aplicación de terminal para conectarnos al mismo servidor.

Podemos desconectarnos/conectarnos a una sesión de screen en cualquier momento y continuar con el trabajo que estábamos realizando exactamente dónde lo dejamos.

Podemos compartir el terminal para ver el trabajo que está realizando otro sysadmin.

Page 3: Administrando sistemas con GNU Screen

Instalando GNU Screen

En distribuciones basadas en GNU/Linux Debian: # apt-get update; apt-get install screen

En distribuciones basadas en Red Hat Linux: # yum install screen

En sistemas Unix: En Solaris…: # pkgadd -d screen_package

En FreeBSD: # pkgadd -r screen

En Mac OS X Lion: git clone git://git.savannah.gnu.org/screen.git

cd screen/src./autogen.sh ./configure --enable-colors256 makesudo make installcp screen ~/bin/screen

Page 4: Administrando sistemas con GNU Screen

Sesiones, regiones y ventanas

Screen tiene la habilidad de visualizar más de una ventana. Esto lo consigue dividiendo la pantalla en regiones, las cuáles pueden contener diferentes ventanas.

session0

region region region region

window 0 window 1 window 2

shell shell program

top

screen -S session0

session1

region region

window 0 window 1

shell shell

screen -S session1

tail –f file

Page 5: Administrando sistemas con GNU Screen

Comandos screen básicos (I)

screen Inicia una sesión de screen.

sessionname → pid.tty.host

screen -S sessionname Inicia una sesión de screen con el nombre sessionname.

screen {-ls | -list} Listar las sesiones de screen en ejecución.

screen -d [sessionname] Detach de la sesión.

screen -r [sessionname] Attach a una sesión detached.

screen -x [sessionname] Attach a una sesión no detached.

Page 6: Administrando sistemas con GNU Screen

Comandos screen básicos (II)

screen {-d -r | -dr} [sessionname] Reattach a la sesión y si es necesario primero hace un detach.

screen {-d -R | -dR} [sessionname] Reattach a la sesión y si es necesario primero hace un detach. Si no existe crea la

sesión con sessionname.

screen {-d -RR | -dRR} [sessionname] Reattach a la sesión y si es necesario primero hace un detach. Si no existe crea la

sesión con sessionname. Si existe más de una sesión disponible usa la primera.

screen {-D -r | -Dr} [sessionname] Reattach a la sesión y si es necesario primero hace un detach y un logout remoto.

screen {-D -R | -DR} [sessionname] Attach aquí y ahora. Si la sesión está en ejecución reattach y si es necesario

primero hace un detach y un logout remoto. Si no existe crea la sesión con sessionname. screen -DR mysession -S newsession -t winname → reattach a la sesión de screen

llamada mysession y si no existe crea una nueva llamada newsession. Con -t damos un nombre a la ventana creada.

screen {-D -RR | -DRR} [sessionname] Attach aquí y ahora.

Page 7: Administrando sistemas con GNU Screen

La tecla de comandos Ctrl-a

Ctrl-a es la tecla de comandos de screen.

Utilizada para trabajar con screen dentro de una sesión de screen.

Todos los comandos de screen se inician con esta secuencia de comandos.

El comando más

importante es Ctrl-a ?

Page 8: Administrando sistemas con GNU Screen

Comandos Ctrl-a – Gestión de sesiones

Moviendo una sesión entre terminales con detach y reattach:

C-a d (detach)

C-a DD

C-a :sessionname name

C-a x

C-a C-\

→ Detach de la sesión.

→ Detach de la sesión y logout.

→ Renombrar sesión.

→ Bloquea la sesión/el terminal.

→ Cierra todas las ventanas y

termina screen.

Page 9: Administrando sistemas con GNU Screen

Comandos Ctrl-a – Gestión de regiones

Visualizando más de una ventana en el display del usuario:

C-a V o C-a |

C-a S

C-a TAB

C-a X

C-a Q

C-a :resize {+|-}N

C-a :caption always caption

C-a :caption splitonly caption

C-a :caption string caption

→ split vertical.

→ split horizontal.

→ saltar a la siguiente región.

→ eliminar la región actual.

→ eliminar todas las regiones excepto la

actual.

→ redimensiona la región ±N líneas.

También resize {=|max|min}

→ Mostrar leyenda de la ventana siempre.

→ Mostrar leyenda solo cuando hay split.

→ Cambiar leyenda/pie de la ventana.

Por defecto caption = ‘%3n %t’

Ejs: caption = ‘%{= kB}%-Lw%{=s kB}%50>%n%f* %t %{-}%+Lw%<‘caption = ‘%{= kg}[%L=%{+u b} %=%{-u W}%?%-Lw%?%45L>%{Y}(%n*%f %t)%?(%u)%?%{W}%+Lw%{+u b} %=%-1=%{-u g}]’

Page 10: Administrando sistemas con GNU Screen

Comandos Ctrl-a – Gestión de ventanas

Gestión y selección de ventanas:

C-a c (create)

C-a k (kill)

C-a “

C-a 0…9

C-a C-a

C-a n (next)

C-a SPACE

C-a p (prev)

C-a BACKSPACE

C-a A (Annotate)

C-a :title título

→ Crear una nueva ventana

→ Cerrar la ventana actual.

→ Mostrar el listado de ventanas para su

selección con las teclas de cursor.

→ Cambiar a la ventana número nº.

→ Cambiar a la última ventana mostrada.

→ Cambiar a la siguiente ventana.

→ Cambiar a la siguiente ventana.

→ Cambiar a la ventana anterior.

→ Cambiar a la ventana anterior.

→ Renombrar la ventana actual.

→ Renombrar la ventana actual.

Page 11: Administrando sistemas con GNU Screen

Bonus track

Ejecutar un programa específico al iniciar una sesión: screen [-S sessionname] [-t windowname] -s program

Screen Saver (idle) + Lock Terminal (lockscreen): C-a :idle timeout lockscreen

Bloquea el terminal tras timeout segundos de inactividad.

C-a :idle 0 Deshabilitar el screen saver configurado.

Hardcopy de la ventana actual: C-a h [filename]

Escribe el contenido visualizado en la ventana en el fichero indicado. Si filename no es especificado se utiliza el fichero hardcopy.n, donde n es el número de la ventana actual. Los ficheros se guardan en el directorio por defecto si no se ha especificado lo contrario.

C-a :hardcopydir directory

C-a :hardcopy_append {on|off}

Log de la ventana actual: C-a :logfile filename

C-a H Inicia/finaliza el logging de la ventana actual. Si el fichero de log no ha sido especificado se utiliza

el fichero screenlog.n, donde n es el número de la ventana actual.

Page 12: Administrando sistemas con GNU Screen

El fichero ~/.screenrc sobrescribe la configuración de /etc/screenrcroot@demo:~# cat .screenrc# Auto-screen support; see http://taint.org/wk/RemoteLoginAutoScreen# Automatically detach the session on SIGHUPautodetach on# Display copyright notice on startupstartup_message off# Set the default program for new windows. Always use a login shellshell -$SHELL# Begins/ends logging of the current window to filedeflog onlogfile $HOME/screen-logs/%Y%m%d-%n.log# Configure captioncaption always ‘%{= kg}[%L=%{+u b} %=%{-u W}%?%-Lw%?%45L>%{Y}(%n*%f %t)%?(%u)%?%{W}%+Lw%{+u b} %=%-1=%{-u g}]’# Configure the use and emulation of the terminal’s hardstatus linehardstatus onhardstatus alwayslastlinehardstatus string '%L>%{= wk}[c=create|d=detach|k=kill]%=[<esc>=copy|<]>=paste]%=[H=log|h=hardcopy]%=[S=split|Q=only|X=remove|<tab>=focus]%=[?=help]%=%-21=%{= kG}[%d/%m/%Y %c:%s]'

Page 13: Administrando sistemas con GNU Screen

Ejecutando automáticamente screen al hacer login remoto Añadimos al fichero .bashrc las siguientes líneas:

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen

# if we're coming from a remote SSH connection, in an interactive session

# then automatically put us into a screen(1) session. Only try once

# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping

# if screen fails for some reason.

if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ]

then

export STARTED_SCREEN=1

[ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs

sleep 1

screen -RR -t main 2> /dev/null && exit 0

# normally, execution of this rc script ends here...

echo

echo "Screen failed! continuing with normal bash startup"

fi

# [end of auto-screen snippet]

Opcionalmente, podemos configurar el fichero /etc/screenrc con las siguientes líneas:

# define message of the day

echo ""

echo "Welcome to terminal managed with screen."

sleep 3

Page 14: Administrando sistemas con GNU Screen

Recursos

Imprescindibles:

Screen web site: https://www.gnu.org/software/screen/

Manual: https://www.gnu.org/software/screen/manual/[screen.pdf]

man screen

Interesantes:

Automatic ‘screen’ on remote logins: http://taint.org/wk/RemoteLoginAutoScreen

Terminal Multiplexers: Screen, Tmux y Dtach: http://hyperpolyglot.org/multiplexers

GNU screen & Screen’s Appearance:

http://aperiodic.net/screen/start & http://aperiodic.net/screen/appearance

"Status Messages in Screen" by Kyle Rankin, LJ, March 2011: http://www.linuxjournal.com/article/10950

"Power Sessions with Screen" by Adam Lazur, LJ, January 2013: http://www.linuxjournal.com/article/6340

“Time-Saving Tricks on the Command Line” by Janos Gyerik, LJ, November 2013:

http://www.linuxjournal.com/content/time-saving-tricks-command-line

Aplicaciones relacionadas:

Screenie: screen session handler (wrapper): http://sourceforge.net/projects/screenie/

tmux: http://tmux.sourceforge.net/

Page 15: Administrando sistemas con GNU Screen