Programa En Shell, Bin/bash

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Tamarita
Forista Nuevo
Forista Nuevo
Mensajes: 3
Registrado: Mar Feb 23, 2010 10:34 am

Programa En Shell, Bin/bash

Mensaje por Tamarita » Mar Feb 23, 2010 10:42 am

Holaaaaa!!! que tal gente?? He visto que en este foro la gente contesta rápido y es muy maja. Espero que me podais ayudar en una práctica que tengo, No tengo mucho tiempo para hacerla, por el trabajo y otras prácticas, shell es lo que peor llevo, os pongo por aqui la práctica a ver si me podeis ayudar un poquillo, por lo menos con lo mas dificil. Agradecería de cualquier manera la ayuda.

El servidor web Apache genera continuamente un archivo de log en el que guarda información
sobre las peticiones que ha recibido a lo largo del tiempo. Entre la información almacenada está la
dirección IP origen, el sistema usado, la hora del acceso, etc. Un ejemplo de una línea de este
archivo es la siguiente:
65.214.44.41 [28/Jan/2007:06:41:16 +0100] "GET /robotica/doctorado/titstereotracking.html HTTP/1.0" 200 8795 "" "Mozilla/2.0 (compatible; Ask Jeeves/Teoma;
+http://about.ask.com/en/docs/about/webmasters.shtml)"

En primer lugar aparece la dirección IP desde la que se ha realizado la petición. A continuación
aparece la hora en la que se ha realizado y información sobre la petición HTTP y su resultado. Esta
práctica consiste en desarrollar un pequeño script, llamado practica3.sh, que facilite la tarea de
consultar la información de este archivo de log.
Para ello se proporcionará un archivo de log de apache del que debe extraerse la siguiente
información:
1. Una lista indicando las IP que han accedido a nuestro servidor web y el número de veces
que lo han hecho. Cada IP solo debe aparecer una vez.
2. Una lista de los países desde los que se han hecho las consultas, independientemente del
número de consultas realizadas.
3. Una lista indicando el número de visitas en cada hora del día.
El script debe recibir como primer parámetro el nombre del archivo de log. Debe aceptar tanto
archivos comprimidos con gzip (extensión .log.gz) como descomprimidos (extensión .log). El
archivo de log no debe modificarse bajo ninguna circunstancia. Los resultados se mostrarán por la
salida estándar.
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Programa En Shell, Bin/bash

Mensaje por akodo » Mar Feb 23, 2010 12:23 pm

1. Los comandos que tienes que utilizar son: "cut" para extraer las direcciones ip, y "uniq" para quitar los duplicados. Consulta las opciones de los comandos, porque creo que con eso es más que suficiente.
2. ¿? Supongo que tendrás algo para saber el país a partir de la dirección ip, porque no encuentro que se pueda sacar del archivo log, ni tampoco de otros archivos.
3. Lo puedes hacer de manera similar al 1: extraer la información que necesites con "cut", y utilizar "uniq".
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Tamarita
Forista Nuevo
Forista Nuevo
Mensajes: 3
Registrado: Mar Feb 23, 2010 10:34 am

Re: Programa En Shell, Bin/bash

Mensaje por Tamarita » Jue Feb 25, 2010 11:13 pm

holaaaa muchas gracias por la ayuda!!!

Tengo esto pero el geoiplookup no me va bien, no me lo guarda bien en el fichero.
Luego más abajo el cut -c ":" 2 me da un error ahi y no se por que.
A ver si me podeis ayudar por favor

cat $1 | awk '{print $1}' > direccionesIP


sort -n direccionesIP |uniq > ordenado

while read LINEA;
do
echo $LINEA -- `cat direccionesIP | grep $LINEA | wc -l`
done < ordenado

while read LINEA;
do
echo `geoiplookup $LINEA` > paises

done < ordenado

sort -n paises | uniq >> paisesOrdenados

echo $LINEA -- `cat paisesOrdenados | grep -c $LINEA | wc -l`


cat $2 | awk '{print $2}'| cut -c ":" 2 > horas

sort -n horas | uniq >> horasOrdenadas

while read LINEA;
do
echo $LINEA -- "Hora " `cat horas | grep $LINEA |wc -l`
done < horasOrdenadas

Editado -- Jue Feb 25, 2010 3:13 pm --

a otra cosilla como puedo comprobar que el archivo esta comprimido y si eso comprimiro y si no pues que se ejecute normal??
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Programa En Shell, Bin/bash

Mensaje por akodo » Jue Feb 25, 2010 11:32 pm

En el 'cut -c ":" 2' ¿qué se supone que debe hacer el 2? creo que se queja por eso.
En cuanto a comprobar el archivo comprimido, depende de lo que te sirva. Lo más fácil y sencillo, y además sin entrar en complicaciones, es comprobar la extensión del archivo. Si tiene una extensión como .zip consideras que está comprimido. Aprovechando que es bash, también puedes utilizar el comando "file" que más seguridad, ya que comprueba más cosas además de la extensión.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Tamarita
Forista Nuevo
Forista Nuevo
Mensajes: 3
Registrado: Mar Feb 23, 2010 10:34 am

Re: Programa En Shell, Bin/bash

Mensaje por Tamarita » Vie Feb 26, 2010 2:06 am

en el `cut -c ":" 2`lo que quiero hacer es coger una parte de una linea. vamos asi cojo la hora. le indico que desde : coja los dos caracteres que hay hasta el siguiente : . no se si estará bien ahi. el `geoiplookup` no me lo hace bien creo que solo me coje el valor de la primera ip. la comprobacion me gustaria hacerla con un if, es un archivo .log.gz se el comando para descomprimirlo pero necesito comprobar si el archivo esta comprimido o no, porque si no lo esta lo tengo que descomprimir. seria algo como: if (archivo comrpimido) then gunzip archivo, else (no hacer nada) fi . pero no se como hacerlo, hay algun comando del if que es -z creo para comprobarlo directamente, pero no lo se.
Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: Programa En Shell, Bin/bash

Mensaje por niky45 » Vie Feb 26, 2010 11:15 pm

para lo de la hora te iria mejor con sed

"linea" |awk '{print $2}' |sed 's\*:$1\ $1\ '

con eso sale, de la linea que has puesto, 06:41:16, (compruebalo prque yo a sed nunca he conseguido hacerlo funcionar a la primera). lugo ya si quieres solo la hora, te que da un | cut -c 1-2

:)
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje