Foros del Web » Administración de Sistemas » Unix / Linux »

Programa en shell; bin/bash

Estas en el tema de Programa en shell; bin/bash en el foro de Unix / Linux en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/02/2010, 02:47
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 10 meses
Puntos: 0
Programa en shell; bin/bash

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.
  #2 (permalink)  
Antiguo 23/02/2010, 13:10
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 11 meses
Puntos: 36
Respuesta: Programa en shell; bin/bash

1. Creo con awk y uniq bastaría. man awk, man uniq y busca en Google; hace tiempo hubo un meme con "un script" que mostraba los comandos más utilizados en el historial, hace exactamente lo mismo.

2. Nunca lo he hecho desde Bash . Existe una API tanto para PHP, Apache, C, Python y Ruby entre lenguajes [1] (solo, son las primeras opciones). Yo iría por crear un script independiente y luego consumirlo con el script en Bash. [1] http://www.maxmind.com/app/linux

* Acabo de ver, el menos en mi Debian, hay un paquete llamado geoip-bin que dice:
Cita:
This package contains the command line utilities to resolve the IP numbers using the GeoIP library.

3. Un case teniendo una variable por cada hora sumando en 1 cuando sea el caso.
http://tldp.org/LDP/Bash-Beginners-G...ect_07_03.html

4. gunzip
__________________
I ♥ The Music!
  #3 (permalink)  
Antiguo 25/02/2010, 14:54
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Programa en shell; bin/bash

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
  #4 (permalink)  
Antiguo 25/02/2010, 15:15
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Programa en shell; bin/bash

a otra cosilla como puedo comprobar que el archivo esta comprimido y si eso comprimiro y si no pues que se ejecute normal??
  #5 (permalink)  
Antiguo 25/02/2010, 22:53
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 11 meses
Puntos: 36
Respuesta: Programa en shell; bin/bash

Cita:
Iniciado por Tamarita Ver Mensaje
Luego más abajo el cut -c ":" 2 me da un error ahi y no se por que.
¿Y qué error te da?. Igual puedes utilizar awk

Cita:
Iniciado por Tamarita Ver Mensaje
a otra cosilla como puedo comprobar que el archivo esta comprimido y si eso comprimiro y si no pues que se ejecute normal??
Acabo de participar en un tema que pregunta exactamente lo mismo: http://www.forosdelweb.com/f41/compr...rimido-782349/
__________________
I ♥ The Music!
  #6 (permalink)  
Antiguo 26/02/2010, 05:57
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Programa en shell; bin/bash

gracias por avisarme por el otro tema!! no lo habia visto!!!!
en el `cut` me pone lo siguiente : cut: la lista de bytes o campos no es válida
y no se por que es!! voy a intentarlo con un awk
  #7 (permalink)  
Antiguo 26/02/2010, 06:50
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Programa en shell; bin/bash

me da error en el geoiplookup porque me lee todas las ip lo que pasa es que va escribiendo en el archivo y se va cargando lo que ha escrito antes, es decir que solo queda almacenada el ultimo geoiplookup de la ultima ip, no se por que pasa, espero que me podais ayudar!!!

Etiquetas: programa, shell
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:20.