Y llegamos a una de mis herramientas favoritas y sin la que prácticamente no me planteo la administración de un servidor.
Sobre todo conociendo como van las conexiones españolas.
Haciendo copy/paste del manual:
Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells).
Tradución/interpretación: Screen es un emulador de terminal des-atachado que permite multiplexación de terminales.
Es decir, permite lanzar un proceso que es no es dependiente de un terminal; ya que todos los procesos de usuario en linux cuelgan de un terminal, aunque los mandemos a background y a no ser que usemos dtach.
Esto soluciona el problema de la reconexión, es decir, lanzar un programa de larga duración sin logar la salida y luego hacer el típico:
Se me ha colgado la conexión y no sé como ha finalizado!!!
Que fijo que a cualquier sysadm le ha pasado, habitualmente por despiste (trollface again).
Aparte de esta propiedad, tiene la gran ventaja de que permite lanzar “pestañas” (por hacer un símil) dentro de la misma conexión, es decir, N shells dentro de una única.
Por supuesto también permite splitting de la ventana en regiones (horizontales y depende de si screen está parcheado, verticales), aunque en mi caso soy contrario a usarlas por que es un poco “paja mental”, pero he de reconocer que en ocasiones viene muy bien.
La configuración la realizamos mediante el típico: [cc lang=”bash”]${HOME}/.screenrc[/cc]
Pongo el mío como ejemplo:
[cc lang=”bash”]deflogin on
vbell on
vbell_msg ” Wuff —- Wuff!! ”
defscrollback 1024
bind ^k
bind ^\
bind \\ quit
bind K kill
bind I login on
bind O login off
bind } history
termcapinfo vt100 dl=5\E[M
hardstatus off
termcapinfo xterm*|rxvt*|kterm*|Eterm* hs:ts=\E]0;:fs=\007:ds=\E]0;\007
hardstatus string “%h%? users: %u%?”
termcapinfo xterm*|linux*|rxvt*|Eterm* OP
termcapinfo xterm ‘is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l’
defnonblock 5
caption always “%{+b rk}%H%{gk} |%c %{yk}%d.%m.%Y | %72=Load: %l %{wk}”
hardstatus alwayslastline “%?%{yk}%-Lw%?%{wb}%n*%f %t%?(%u)%?%?%{yk}%+Lw%?”
[/cc]
Que nos genera algo como esto (eliminando la parte de htop):
Lo importante son las 2 últimas lineas visibles:
[cc lang=”bash”]
ciberterminal |12:12 14.09.2011 | Load: 0,25 0,24 0,18
0*$ bash 1-$ bash 2$ bash 3$ bash 4$ bash
[/cc]
Donde apreciamos:
- hostname, fecha, load avg.
- “Pestañas” disponibles
De esta forma de manera muy rápida y visual, apreciamos cuantas pestañas tenemos y el estado del servidor.
Otra propiedad adicional e intersante, es el clipboard propio, el scrolling y la posibilidad de salvar lo que aparecen el terminal (todo resumido con el nombre de “copy mode”.
Añado un “resumen” de mis shortcuts más usados, que en este caso son muchos:
##CONNECTION## |
From outside screen |
screen
|
launch a new screen |
screen -S NAME
|
launch a new screen with name “NAME” |
screen -m PROGRAM
|
launch a screen and inside it the “PROGRAM” |
screen -d -m PROGRAM
|
launch a DE-ATTACHED screen and run “PROGRAM” inside |
screen -ls
|
launch a new screen |
screen -x
|
bruteforce attach |
screen -r SCREENAME
|
attach to screen “SCREENAME” |
##INSIDE SCREEN## |
|
CTRL-a c
|
New screen “tab”/session |
CTRL-a n
|
Next “tab” |
CTRL-a p
|
Prev “tab” |
CTRL-a N
|
Go to tab N |
CTRL-a "
|
Tab list |
exit
|
exit current tab |
CRTL-d
|
exit current tab |
CTRL-a A
|
Change Current tab name |
CRTL-a d
|
de-attach screen |
CRTL-a C
|
clear current tab screen |
CRTL-a l
|
reset current tab screen |
CTRL-a K
|
Destroy (literally) current tab |
##SPLITTING## |
|
CTRL-a S
|
Split current tab horizontally |
CTRL-a |
|
Split current tab vertically |
CTRL-a <tab>
|
Switch to next region |
CTRL-a X
|
Close current region |
##COPY/PASTE## |
|
CTRL-a <esc>
|
Enter copy mode |
<Space>
|
Begin selection (use arrows to move) |
<Enter>
|
Finish selection and copy |
CTRL-a ]
|
Paste |
CTRL-a >
|
Write clipboard to file /tmp/screen-exchange |
CTRL-a <
|
Read /tmp/screen-exchange to clipboard |
CTRL-a =
|
Remove /tmp/screen-exchange but no clipboard content |
##SCROLL## |
|
CTRL-a <esc>
|
Enter copy mode |
AvPag
|
Advance 1 page |
RePag
|
Previous page |
Inicio
|
Go to the 1st line of scroll |
Fin
|
Go to the last line of scroll (actual one) |
CRTL+r <SEARCH STRING>
|
Enter Search mode (begin writing), then
CRTL+r
to go to the previous ressult |
/<SEARCH STRING>
|
Enter VIM-like search |