1- Escribe un script que reciba como argumentos los nombres de dos directorios y
que copie todos los ficheros con extensión .txt del primer directorio al segundo.
Se debe comprobar que se le pasan dos argumentos al script y que son
directorios que existen, antes de hacer la copia.
#!/bin/bash
if [ $# -eq 2 -a -d $1 -a -d $2 ]
then
cp $1/*.txt $2
else
echo No pasas dos argumentos
fi
2- . Escribe un script que, empleando un bucle for, sume los número enteros hasta
un número dado como argumento.
#!/bin/bash
i=0
suma=0
for i in `seq 0 1 $1`
do
((suma=suma+$i))
done
echo La suma de los $1 numeros es $suma
3- Escribe un script que tome como argumentos el nombre de un directorio y una
cadena de texto (puede contener espacios) y muestre un listado indicando, para
cada archivo por separado, el número de lineas que contienen esa cadena.
!/bin/bash
if [ $# -ne 2 ]
then
echo nª de argumentos incorrectos
elif [ -d $1 -a -n $2 ]
then
grep -c $2 $1/*
elif [ -d $2 -a -n $1 ]
then
grep -c $1 $2/*
else
echo los argumentos no son correctos
fi
4- Resuelve el ejercicio anterior mediante una función que tome como argumentos
el archivo y la cadena y muestre el número de líneas que contienen dicha
cadena.
#!/bin/bash
funcion4 ( )
{
if [ $# -ne 2 ]
then
echo nª de argumentos incorrectos
elif [ -d $1 -a -n $2 ]
then
grep -c $2 $1/*
elif [ -d $2 -a -n $1 ]
then
grep -c $1 $2/*
else
echo los argumentos no son correctos
fi
}
echo Los argumentos recibidos son: $*
funcion4 $1 $2
5- . Localiza todas las líneas que contengan palabras que comienzan por la letra a
en varios ficheros de texto.
grep -w “a*” f1 f2 f3
6- ¿Qué información te proporciona la ejecución de la siguiente orden?
ps aux | grep “apache”
La salida de "ps aux" es una tabla donde cada fila es un proceso y las columnas contienen la siguiente información:
- USER: usuario con el que se ejecuta el proceso
- PID: ID del proceso
- %CPU: porcentaje de tiempo que el proceso estuvo en ejecución desde que se inició
- %MEM: porcentaje de memoria física utilizada
- VSZ: memoria virtual del proceso medida en KiB
- RSS: "resident set size", es la cantidad de memoria física no swappeada que la tarea a utilizado (en KiB)
- TT: terminal que controla el proceso (tty)
- STAT: código de estado del proceso (información detallada más adelante)
- STARTED: fecha de inicio del proceso
- TIME: tiempo de CPU acumulado
- COMMAND: comando con todos sus argumentos
Busca el comando apache
7- Modifica la salida del comando ls para obtener una lista con un elemento por
línea
ls -l
8- a) Convierte todos los caracteres del fichero alumnos.txt a minúscula,
almacenando el resultado en otro fichero
b) Borra todas las vocales del fichero alumnos.txt almacenando su resultado
en otro fichero
c) Elimina todas las líneas en blanco del fichero alumnos.txt
d) Escribe cada palabra del fichero alumnos.txt en un solo renglón.
a) more alumnos.txt | tr [:upper:] [:lower:] > minus.txt
b) more alumnos.txt | tr -d [AaEeIiOoUu] > vocales.txt
c) more alumnos.txt | tr -s “/n/n” ”/n”
d) more alumnos.txt | tr -s “ ” ”/n”
9-
Explica que hacen las siguientes ordenes:
• find.
• find depth type d empty
• find depth type f empty
A) Busca archivos en un directorio
B) Busca directorios recursivamente vacios
C)Busca archivos vacios
10- Obtén sólo los directorios cuyo nombre comienza por d (mayúscula o minúscula)
del directorio /etc redireccionando la salida estándar de error al fichero errores
find /etc -type d -iname ‘d*’ 2>~/errores
11- Localiza todos los ficheros del directorio /etc cuya fecha de modificación sea
posterior al 1/01/2012 a las 00:00h.
touch -t 201201010000 comoquerais
find /etc -newer comoquerais
12- Busca los directorios que estén vacíos en los directorios /etc y /home
find /etc /home -empty -type d
13- Localiza todos los ficheros .avi desde el directorio raíz cuyo tamaño sea superior
a 700 Megabytes, redireccionado los posibles errores al periférico nulo
find / -name ‘*.avi’ -size +716800k 2>/dev/null
14- Busca todos los ficheros que comienzan por f (mayúscula o minúscula) y posean
la extensión txt (en minúscula), que exactamente tengan permiso de lectura y
escritura para el propietario y el grupo
find / -name ‘[Ff]*.txt’ -perm 660
15- Localiza todos los ficheros que cuelgan de tu directorio actual a los que se
accedió hace un año exactamente.
find -atime 365
16- Localiza todos los directorios que cuelgan directamente del directorio /home o
del directorio /etc, cuyos nombres contengan una n.
find /etc /home -maxdepth 1 -name ‘*n*’ -type d
17- Añade permiso de ejecución para el propietario de todos los ficheros que cuelgan
de tu directorio actual cuyo propietario no sea el root
find -type f !-user root | xargs chmod u+x 2>/dev/null
18- Borra todos los ficheros con extensión jpg que cuelgan de tu directorio actual,
pidiendo confirmación del borrado
find ~ -name ‘*.jpg’ -type f -exec rm -i {} /;
19- Escribe un script que presente al usuario un menú con las siguientes opciones:
Espacio ocupado por un directorio (incluyendo subdirectorios)
• Número de archivos contenidos en un directorio (incluyendo subdirectorios)
• Número de archivos contenidos en un directorio con un tamaño inferior a uno
introducido por el usuario
• Comprimir los archivos contenidos en un directorio cuyo tamaño sea superior a uno
introducido por el usuario.
• Salir
1) echo espacio ocupado por el directorio $1
du -h $1;;
2) find $1 -type f | wc;;
3) echo introduce tamaño en bloques de 512b
read tam
echo el numero de ficheros con un tamaño menor a $tam
find $1 -type f -size -$tam | wc -l;;
4) echo introduce tamaño en bloques de 512b
read tam2
echo el numero de ficheros con un tamaño menor a $tam2
find $1 -type f -size +$tam2 | xargs bzip2 -vk;;
20- Borra los ficheros regulares que empiecen por A en el directorio actual y
descendientes
find -name 'a*' -type f | xargs rm -r
21- Localiza todos los archivos que cuelgan del directorio de inicio cuya extensión
sea sh, y muestra toda la información de cada uno de ellos. Esta línea de
ordenes debe funcionar para cualquiera de los usuarios conectados al sistema.
find ~ -type f -name '*.sh' | xargs ls -l
EDITOR DE FLUJO SED
1. Borra las líneas en blanco de varios ficheros.
2. Explica que haría el siguiente script:
original="mejor"
nueva="optimo"
for f in $(find . type f` )
do
sed s/$original/$nueva/g $f > $f.tr
mv $f.tr $f
done
3. Haciendo uso del fichero alumnos.txt descrito a continuación:
Apellidos y Nombre, Grupo reducido, Convocatorias consumidas
Garcia Garcia Jose 1 primera
Lopez Lopez Alba 2 primera
Gonzalez Gonzalez Maria 2 primera
Sanchez Perez Ana 3 segunda
Martinez Martinez Carmen 2 primera
Morales Morales Pedro 1 segunda
Gonzalez Lopez Luis 3 primera
Alvarez Alvarez Manuel 1 primera
Jimenez Jimenez Luisa 2 segunda
# Alumno repetidor
Gomez Gomez Antonio 1 primera
Sanchez Sanchez Teresa 1 segunda
Vazquez Vazquez Angel 2 primera
Lorenzo Gomez Isabel 3 primera
• Elimina todas las líneas de comentario (empiezan por #)
• Elimina las líneas impares
• Elimina todas las líneas que no comiencen por G
• Obtén desde la línea 3 hasta la línea 7
• Visualiza sólo las líneas del fichero que no comienzan por una vocal en
mayúscula.
• Visualiza el contenido del fichero alumnos.txt de forma que aparezca primero
el grupo reducido al que pertenece seguido de los apellidos y nombre, y por
último la convocatoria.
• Sustituye la palabra primera por primer desde la cuarta línea hasta la
primera línea que sea un comentario (empieza por #)
• Sustituye desde la línea que comienza por Lopez hasta la quinta línea la
palabra primera por primer
• Explica la diferencia que existe entre los dos comandos siguientes:
sed n ‘s/primera/una/p’ alumnos.txt
sed ‘s/primera/una/p’ alumnos.txt
• Visualiza el contenido del fichero alumnos.txt usando como separador de
campos el tabulador y no el espacio en blanco.
4. Haciendo uso del fichero alumnos.txt detallado en el ejercicio anterior, explica las
diferencias existentes entre las siguientes ordenes:
• sed n '3p' alumnos.txt
• sed '3p' alumnos.txt
• sed '3{p;q}' alumnos.txt
• sed n '3{p;q}' alumnos.txt
5. Dado el siguiente fichero, denominado ajos.txt, escribe un script sed que cambie
todas las apariciones de la palabra ajo por frijol. El resultado de este cambio se
plasma en el fichero ajosDefinitvo.txt .
ajos.txt
El trabajo dignifica al hombre
Las semillas del ajo tienen un fuerte olor a ajo
Ajolote es un animal extraño
Ajo para ahuyentar al vampiro!
Obrajosa, el pueblo de Doña Perfecta
Le rebajo el kilo de ajos
ajosDefinitivo.txt
El trabajo dignifica al hombre
Las semillas del frijol tienen un fuerte olor a frijol
Ajolote es un animal extraño
Frijol para ahuyentar al vampiro!
Obrajosa, el pueblo de Doña Perfecta
Le rebajo el kilo de frijoles
6. Elimina la cabecera (primera fila de títulos) que aparece al ejecutar el comando
ps.
7. Explica en que se diferencian las siguientes sentencias:
sed n '/root/p' /etc/passwd
sed '/root/p' /etc/passwd
8. Obtén un listado largo de sólo los directorios que cuelgan del directorio /home
9. Suponiendo que los datos del fichero alumnos.txt están separados por varios
espacios en blanco, reemplázalos por un sólo espacio en blanco.
1) Borra las líneas en blanco de varios ficheros
sed -e ‘/^$/d’ fichero
2) Busca ficheros regulares y reemplaza la palabra mejor por optimo todas las veces que aparece del fichero en cuestion y los mete en el archivo f.tr.
Despues cambia el nombre del fichero con todos los cambios por el nombre del fichero regular
3)
a) sed -e ‘/^#/d’ fichero
b) sed -e ‘1~2 d’ fichero
sed -n -e ‘n;p’ fichero
c) sed -e ‘/^G/d’ fichero
sed -e ‘/^G/!d’ fichero
d) sed -ne ‘3,7p’ fichero
e)sed -ne ‘/^[AEIOU]/!p’ fichero
f) sed -e 's/\([[:alpha:]]* [[:alpha:]]* [[:alpha:]]*\) \([[:digit:]]\) / \2 \1 /' asd.sh
g) sed -e '4,/^#/s/primera/primer/' asd
h) sed -e '/^Lopez/,5s/primera/primer/' asd
i) Con -n te muestra las líneas modificadas, mientras que sin el -n te muestra 2 veces las líneas modificadas (una por defecto y una por la p) y las no modificadas (por defecto).
j)sed -ne ‘s/ /\t/pg’ fichero
4)
a) Muestra línea 3.
b) Muestra todas las lineas, la linea 3 la duplica.
c) Se muestran todas las lineas hasta la 3, esta se duplica y abandona el proceso.
d) Muestra la línea 3 y abandona el proceso.
5-
#!/bin/bash
sed -e ‘s/ ajo/ frijoles/g’ ajos>ajosDef
sed -e ‘s/Ajo /Frijol /g’ ajosDef>ajos2
sed -e ‘s/ ajo/ frijol/g’ ajos2>ajosDef
6- ps | sed -e '1d'
7-
a)imprime el contenido del espacio de patrón, inclusive cuando se utiliza la opción
–n (modo silencioso).
b) Esta orden no borra el espacio de patrón
8- ls -l /home | sed -n ‘/^d/p‘
9- sed -e ‘s/ \+/ /g’ alumnos
sed -er ‘s/ +/ /g’ alumnos
Ejercicio opcional dejar espacio en blanco entre caracteres: sed -e ‘s/ */ /g’ alumnos
EDITOR DE FLUJO SED AVANZADO
1. Elimina las líneas en blanco de varios ficheros, mostrando el número de línea de
aquellas que no se eliminan.
2. Haciendo uso del fichero alumnos.txt descrito en la actividad 2:
• añade la línea “NOMBRE ALUMNO” delante de cada línea que contenga el
nombre de un alumno (es decir, que no sea un comentario);
• almacena en el fichero GruposAlumnos.txt el contenido del fichero
alumnos.txt pero cambiando el nombre asignado a los grupos reducidos de la
siguiente forma: los que pertenecen al grupo reducido 1, su nuevo nombre
será SOII_1, los que pertenecen al grupo reducido 2, su nuevo nombre de
grupo será SOII_2, y así sucesivamente. (No se puede usar el operador de
redireccionamiento de la salida);
• almacena en el fichero GrupoSOII_1.txt las líneas del fichero
GruposAlumnos.txt que correspondan sólo al grupo SOII_1. (No se puede
usar el operador de redireccionamiento de la salida);
• visualiza el contenido del fichero GrupoSOII_1.txt teniendo como título
“ALUMNOS DEL GRUPO 1”;
• describe que realiza la siguiente orden:
sed '/^[LM]/,/^[SV]/s/primera/una/w resultado.txt' alumnos.txt.
3. Escribe un script sed que realice las siguientes operaciones sobre un fichero que
contiene un programa escrito en C:
• elimine las líneas en blanco;
• elimine los comentarios de bloque (bloques de líneas que empiezan por /* y
terminan por */);
• ponga el comentario “Begin main function” antes de la función principal.
4. Suponiendo que el fichero firma.txt contiene una firma concreta. Añade el
contenido de este fichero al final de todos los ficheros cuya extensión sea txt.
5. Explica la diferencia que existe entre los dos comandos siguientes:
sed s '$d' t*
sed '$d' t*
6. Se dispone de un fichero fechas.txt donde cada línea contiene una fecha expresada
con el siguiente formato: mes día año (separados por un espacio en blanco)
Usando el editor sed, almacena en el fichero spain_fechas.txt esas fechas pero
aplicando el siguiente formato: día mes año (separados por un espacio en blanco)
Entrada: Marzo 4 2014 Salida: 4 Marzo 2014
7. Dado el fichero profesores.txt con el siguiente contenido:
Numero: 1
Nombre: Josito
Telefono: 988-567841
Numero: 2
Nombre: Juancito
Telefono: 988-326574
Numero: 3
Nombre: Miguelito
Telefono: 988-459678
Escribe un script sed que presente ese contenido con el siguiente formato:
1;Josito;988-567841
2;Juancito;988-326574
3;Miguelito;988-459678
8. Usando el fichero profesores.txt descrito anteriormente, escribe un script sed que
presente el contenido de dicho fichero con el siguiente formato:
988-567841, Josito
988-326574, Juancito
988-459678, Miguelito
9. El fichero de texto caracteristicas.txt (disponible en Faitic, semana 7) contiene 88
características de textura calculadas para 1023 células. Por lo tanto, el fichero
se compone de 1023 líneas y cada línea tiene 88 campos numéricos. Al final de
cada línea existen dos campos que identifican la clase (sn = sin núcleo y cn = con
núcleo) y el estado de maduración (vit = vitelino, atre = atrésico, hid = hidratado
y ac = alveolo cortical) de cada célula. Escribe un script sed que realice lo
siguiente:
• reemplace el carácter e usado en la notación científica por el mismo
carácter pero en mayúscula;
• divida el fichero caracteristicas.txt en dos ficheros de forma que las
características de las células sin núcleo (sn) se almacenen en el fichero
sinNucleo.txt y las características de las células con núcleo (cn) se
almacenen en el fichero conNucleo.txt;
• para aquellas células que sean sin núcleo (sn) y también alveolo cortical
(ac), escriba dicha clase (sn) con los dos caracteres en mayúscula (SN);
• elimine del fichero conNucleo.txt todas las caracterísiticas de aquellas
células que sean vitelinas (vit).
1- sed -e ‘/^$/d;=’ fich1 fich2
2- a) sed -e 's/\([[:alpha:]]* [[:alpha:]]* [[:alpha:]]*\) /NOMBRE ALUMNO \1 /' asd
sed ‘/^#/!i\Nombre Alumno’ asd
b) sed -e 's/\([[:alpha:]]* [[:alpha:]]* [[:alpha:]]*\) \([[:digit:]]\) / \1 \SOII_\2 / w fich' asd
sed ‘s/[0-9]/SOII_&/;w GrupoSOII’ asd
c)sed -n '/SOII_1/w grupoSOII_1' fich
d) sed -e '1i\\tAlumnos Grupo 1' grupoSOII_1
e) Modifica todas lineas posteriores a una linea que empiece por L y para cuando encuentra una línea que empiece por V, pero antes deberá encontrar una linea que empiece por S y antes una que empiece por M.
3- #!/bin/bash
sed -e ‘/^$/d’ asd > aux
sed -e '/^\/\*/,/\*\/$/ d' aux > aux2
sed -e ‘/main/i\/\/#Begin test’ aux2 > asd
4- sed -s '$ r firma.txt' fich1 fich2
5- a) Con -s tratas todos los archivos que empiezan t seran tratados de forma independiente, se eliminara la ultima linea de cada una.
b) Cogemos todos los archivos y los tratamos como si fuese un unico archivo y eliminamos la ultima linea del conjunto(ultima linea del ultimo archivo)
6- sed -e 's/\([[:alpha:]]*\)\( [[:digit:]]*\) / \2 \1 /; w esp_fecha' fecha
7- /^$/d
N
N
s/\n/i/g
s/_//g
s/[[:alpha:]]*//g/ (FALTA UNA PARTE)
8- sed -e /^Nombre/ {
s/^Nombre://
h
n
s/’Telefono://
G
s/\n/,/
p
}
LENGUAJE AWK BÁSICO
1.Escribe un script que lea el fichero /etc/passwd y presente el login de los
usuarios definidos en el sistema. Además, debe informar del UID y de sudirectorio de recepción.
awk -F":" '{print $1, $3, $6}' /etc/passwd
awk -v FS=":" '{print $1,$3,$6}' /etc/passwd
script1.awk
BEGIN{ FS=":"}
{print $1, $3, $6}
awk -f script1.awk /etc/passwd
2.Escribe un script que lea el fichero /etc/passwd y presente el nombre de los
usuarios “normales” definidos en el sistema. Además, debe informar del UID y de su directorio de recepción.
awk -F=":" '{if ($3>999) print $1,$3,$6}' /etc/passwd
script2.awk
BEGIN { FS=":"}
{if ($3>999) print $1,$3,$6}
3.Cuando un usuario realiza un intento de inicio de sesión y falla al teclear la password, este evento se registra en el fichero /var/log/auth.log. Analiza la información que proporciona este fichero y muestra, siguiendo este orden, el login de aquellos usuarios que han generado este evento junto con la fecha y hora. awk '/authentication failure/ {print $NF,$1,$2,$3}' /var/log/auth.log
3.Cuando un usuario realiza un intento de inicio de sesión y falla al teclear la password, este evento se registra en el fichero /var/log/auth.log. Analiza la información que proporciona este fichero y muestra, siguiendo este orden, el login de aquellos usuarios que han generado este evento junto con la fecha y hora. awk '/authentication failure/ {print $NF,$1,$2,$3}' /var/log/auth.log
4- Se dispone de un fichero fechas.txt donde cada línea contiene una fecha expresada
con el siguiente formato: mes/día/año (separados por el carácter /)
Usando awk, almacena en el fichero rango_fechas.txt las fechas cuyo año sea
superior a 1999. Las fechas se almacenarán con el siguiente formato: día mes año
(separados por un espacio en blanco)
awk -F "/" '{if($3>1999) print $2,$1,$3}' ~/fechas.txt > rango.txt
5- Escribe un programa awk que presente ese contenido con el siguiente formato,
utilizando como separador de campo el tabulador:
awk -v FS="\n" -v RS="" 'BEGIN {print "Nº\tNombre\tTelefono\n"}{print $1"\t"$2"\t"$3"\n" }' prueba
awk.awk
BEGIN {FS="\n";RS="";OFS=”\t”;print "Nº\tNombre\tTelefono\n"}
{print $1,$2,$3”\n" }
awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" -v OFS="\t" 'BEGIN {print"Nº\tNombre\tTelefono"} {print $1,$2,$3}' profe
6- Escribe un programa usando awk que muestre en pantalla el número total de
bytes de todos los ficheros del directorio actual que fueron modificados por última
vez en Enero (puedes elegir otro mes) de cualquier año.
awk6.awk
BEGIN{
TOTAL=0
} {
if($6=="feb"){
TOTAL=TOTAL+$5
}
}
END{
print"El total de bytes es " TOTAL
}
if($6 ~ /-03-/)
ls -l | awk -f awk6.awk
7- El fichero de texto statistics_color.txt (disponible en Faitic, semana 8) contiene
las 27 características de textura calculadas para 1023 células. Por lo tanto, el fichero se compone de 1023 líneas y cada línea tiene 27 campos numéricos. Al final de cada línea existen dos campos que identifican la clase (sn y cn) y el estado de maduración (vit, atre, ac). Escribe un programa usando awk, que proporcione la media aritmética para las características 1, 5, 7 y 12 de aquellas células que coincidan con los siguientes criterios: sn vit, sn ac, sn atre, cn vit, cn ac y cn atre.
#!/usr/bin/awk -f
BEGIN{ print "Estadisticas";print "\tCarac1\tcarac2\tcarac5\tcarac7\tcarac12\n";}
{
/sn vit/ { sn_vit++; sn_vit_1+=$1; sn_vit_5+=$5;sn_vit_7+=$7;sn_vit_12+=$12;}
/sn ac/ { sn_ac++; sn_ac_1+=$1; sn_ac_5+=$5;sn_ac_7+=$7;sn_ac_12+=$12;}
/sn atre/ { sn_atre++; sn_atre_1+=$1; sn_atre_5+=$5;sn_atre_7+=$7;sn_atre_12+=$12;}
/cn vit/ { cn_vit++; cn_vit_1+=$1; cn_vit_5+=$5;cn_vit_7+=$7;cn_vit_12+=$12;}
/cn ac/ { cn_vit++; cn_ac_1+=$1; cn_ac_5+=$5;cn_ac_7+=$7;cn_ac_12+=$12;}
/cn atre/ { cn_atre++; cn_atre_1+=$1; cn_atre_5+=$5;cn_atre_7+=$7;cn_atre_12+=$12;}
}
END{
print "sn vit", sn_vit_1/sn_vit, sn_vit_5/sn_vit, sn_vit_7/sn_vit, sn_vit_12/sn_vit;
ETC ETC
}
AWK AVANZADO
1- Escribe un script awk que muestre las líneas de un fichero ordenadas de forma
creciente. Suponer que el fichero de entrada contiene como primer campo un
número entero que se va a utilizar para ordenar las líneas del fichero. Hay que tener
en cuenta que los números de cada línea no están ordenados y no son consecutivos,
puede haber saltos de líneas
BEGIN { min=0; max=0; }
{
if($1 < min)
min=$1;
else if($1 > max)
max=$1;
lineas[$1]=$0;
}
END
{
for(i=min;i<=max;i++)
{
if( i in lineas)
print lineas[i];
}
}
2- BEGIN{
RS=" "
FS="\n"
}
{
print $0
}
3-
BEGIN{
FS=":"
}
{
if($4 != "") grupo[$1] = $4
}
END{
FS=","
for(i in grupo){
$0 = grupo[i]
numeros[i] = NF
}
for(i in numeros) print "Nombre grupo:", i, "Nº usuarios:" ,numeros[i]
}
4-
BEGIN{
getline
}
{
procesos[$2]++;
}
END{
for( i in procesos ) print "Usuario:", i, "Nº de procesos:",pr
ocesos[i]
}
5-
BEGIN{
getline
}
{
procesos[$2]++;
}
END{
FS=":"
while ((getline < "/etc/passwd") > 0) nombres[$1] = $6
for( i in procesos ) {
for ( j in nombres ){
if(j == i) nombre = nombres[i]
}
print "Usuario:", i, "Nº de procesos:",procesos[i], "N
ombre completo:",nombre
}
}
6- El servicio informático de una empresa quiere detectar qué máquinas no
autorizadas están usando sus IP. Para resolver este problema tienen que conocer
que IP corresponde a cada computador de la red de la empresa utilizando la
dirección MAC. Por lo tanto, habrá que comprobar periodicamente los datos
correspondientes a las direcciones IPMAC, para ver si hay alguna variación.
Escribe un script awk para detectar una posible máquina no autorizada.
Notas:
• utiliza el comando arp n que te devuelve información sobre direcciones IP y
MAC;
• guarda en un fichero la dirección IP y MAC de los equipos de red de la
empresa, para que después se pueda comparar. Por ejemplo se obtendría el
siguiente fichero lista_IP_MAC.txt:
193.143.43.1 00:0E:7D:10:A0:C0
193.143.43.2 00:02:55:4A:15:D8
193.143.43.3 00:03:34:50:A3:C3
• al día siguiente hay que volver a mostrar las IP y sus correspondientes
direcciones MAC. Almacena esta información en otro fichero, por ejemplo en
el fichero arp_IP_MAC.txt:
193.143.43.1 00:0E:7D:10:A0:C0
193.143.43.2 00:02:55:4A:15:D8
193.143.43.3 00:02:15:20:C3:A5
donde se ha resaltado en negrita la dirección MAC de la máquina no
autorizada;
• compara los ficheros anteriores para detectar si alguna IP está siendo
utilizada por un intruso. Utiliza arrays asociativos y getline.
arp -n | sed -r '1d; s/ +/ /g' > intermedio
cut -f1,3 -d" " intermedio > lista_IP_MAC.txt
script7.awk
#!/usr/bin/awk -f
{ autorizados [ $1] = $2; }
END
{
for( i in autorizados)
{
while ( ( getline var <”lista_IP_MAC.txt”) > 0)
{
split(var,compara,” “);
if((compara[1] == i) && (compara[2]!=autorizados[i]))
{
print “cabron deixa de roubar”
break;
}
}
close(“lista_IP_MAC.txt”);
}
}