Bien, bienvenidos a la clase de hoy
que va a tratar el manejo de datos.
manejo de datos puede que
os suene algo raro pero
la idea básica del manejo de datos es
que, teniendo los datos en un formato,
quieres mostrarlos de forma diferente
es algo que pasa a menudo. No hablo
de algo similar a convertir imágenes sino
que es posible que tengas un archivo de
texto o un log y lo que quieres es verlo
en otro formato, en un
gráfico, o quieres ver estadísticas sobre
esos datos, cualquier cosa que coja un
conjunto de datos y los represente de otra
forma; eso es lo que llamaría manejo de
datos. Hemos visto ya algunos ejemplos de
este tipo de manejo de datos
con anterioridad en este semestre
básicamente cualquier uso de un
operador sobre pipe que ordene o coja
la salida de un programa y la introduzca
en otro programa, esto es manejo de datos
en cierta manera.
Lo que vamos a hacer en esta clase
es echar un vistazo a algunas formas elegantes de
manejar datos y algunas
muy útiles.
Para llevar a cabo cualquier
manejo de datos lo que se necesita es
una fuente de datos sobre la que operar
en primer lugar y hay un gran número de
buenas muestras de ello.
Damos algunos ejemplos en la sección de
ejercicios del apartado de notas de la clase de hoy
En esta en particular voy a
utilizar un log del sistema. Tengo un servidor
ejecutándose en algún lugar de Holanda
porque parecía algo razonable en su
momento y, en ese servidor
corre un daemon de logging normal
que viene con el sistema Deeb.
Es un tipo estándar de
mecanismo de logging en Linux y hay un comando
llamado journalctl en los sistemas Linux
que te permiten ver dicho log.
Así que lo que voy a hacer es
algunas modificaciones sobre dicho log para ver
si puedo sacar algo interesante
de él. Veréis que si ejecuto
el comando el resultado es un montón de datos
porque es un log que tiene
hay un montón de cosas en él, un montón
de cosas que han pasado en el servidor y
que se remontan a enero y
los logs van incluso más atras
hay mucha información así que
lo primero que vamos a hacer es tratar de
limitarla para que veáis
sólo parte del contenido. El comando grep
es aquí el más adecuado así que vamos
a pasarlo a través del pipe y vamos
a llamar a SSH. Sobre SSH no hemos
hablado todavía pero es
una manera de acceder a ordenadores de forma remota
usando la línea de comandos y en
particular lo que pasa cuando pones
un servidor público en Internet es que
un montón de gente de todo el mundo
intenta conectar, loguearse y
tomar el servidor. Si quieres
ver lo que esta gente intenta hacer
y demás, voy a hacer un grep por SSH
y veréis como rápidamente se
genera un montón de contenido,
al menos en teoría. Va a ir
lento ... ahí está. Esto genera toneladas
y toneladas de contenido y es
muy difícil incluso ver
qué está pasando, así que vamos a observar
sólo los nombres de usuario con los que la gente
intenta loguear en mi servidor, así podéis ver
que en algunas de estas líneas pone desconectado
desconectado por usuario inválido y
un nombre de usuario. Sólo quiero quedarme con esas líneas,
es lo único que me interesa, voy a hacer
un cambio más aquí que, si
pensáis en cómo funciona esta pipeline,
si hago esto aquí conectado de esta manera
la pipeline del final lo que
hará es que mandará entero
el archivo de log a traves de la red a mi máquina
y localmente ejecutará grep para mostrar sólo
las líneas que contienen ssh y
localmente las filtrará todavía más. Puede parecer
un poco ineficiente porque no me importan
muchas de estas líneas y el site remoto
también está ejecutando una shell, así que
lo que puedo hacer es ejecutar el
comando entero en el servidor
así que lo que os digo, el comando SSH
que quiero ejecutar en el servidor es esta
pipeline de tres elementos y lo que
obtenga como resultado lo quiero mandar a less ya
que lo que esta vez hace bien es
el mismo filtrado que hicimos antes pero
en el lado del servidor y
este sólo me va a mandar aquellas
líneas que me interesan para que
cuando las mande localmente a través del programa
llamada less ... less es un paginador del que veréis
algunos ejemplos, de hecho ya habéis visto
algunos, por ejemplo al
escribir man y algún otro comando que se abre en
un paginador. Un paginador es una forma práctica
de coger un extracto largo de cierto contenido y adaptarlo
a la ventana de tu terminal
y permitirte avanzar,
retroceder y navegar por él para
que no avance por entero
por la pantalla, así que, si lo ejecuto
va a llevar un tiempo porque tiene que
analizar un montón de archivos de log,
en particular grep está rellenando un buffer
lo que resulta ser relativamente
de poca ayuda
Podría hacer, veamos si esto
es más útil, ¿por qué no quiere
hacerme el favor? bien, voy a hacer trampa
un poco, no me hagáis caso
quizá la red va muy lenta,
son dos posibles razones, por suerte hay
arreglo porque antes he
ejecutado el siguiente comando y
lo que este comando hace es coger la salida
de este otro comando y la anexa a un archivo
local, en mi computadora, bien, así que ejecuto
esto cuando llego a mi oficina y así
lo que esto hizo fue descargar todos
los logs de SSH que contenían
desconectado de, así que ahora los tengo en local
lo cual es muy útil. Aquí está,
no hay razones para que abra el log entero
cada vez porque sé que ese
patrón del inicio es lo que me
interesa, por lo que echamos un vistazo
al SSH punto log y veréis que hay
montones y montones de líneas en
las que aparece desconectado de usuario no válido
usuarios autenticados, etc. Bien, aquíe
están las líneas sobre las que tenemos que trabajar
lo que también significa que más adelante
no tenemos que pasar por completo por este
proceso SSH, simplemente hacemos cat sobre este archivo
y operamos sobre él directamente
puedo mostrar este paginador
así que si hago cat s al SSH punto log
y lo mando a less, me da una
página por la que puedo retroceder y avanzar
quizá hacer esto un poco más pequeño para
poder recorrer el archivo, estropear el
archivo y puedo hacer esto que son
básicamente atajos de teclado de vim de manera que control ] para
avanzar, control D para retroceder y
q para salir. Hay todavía un montón de
contenido y estas líneas contienen un
montón de basura en la que no estoy
interesado, lo que realmente quiero ver
es cuáles son estos nombres de usuario
y esta es la herramienta que vamos a
empezar a utilizar, llamada sent y que es
un editor de flujo que está modificado o
es una modificación de un programa anterior
llamado edie que era un editor muy raro
que ninguno de vosotros probablemente
querrá utilizar, si, oh, tsp es el nombre
de la computadora remota a la que estoy conectando
como he dicho un editor de flujo y
básicamente lo que te permite es cambiar
el contenido de un flujo, puedes pensar que
es un poco como hacer cambios pero
en realidad es un completo lenguaje
de programación