Diferencia entre revisiones de «Semana del Ñu y el pingüino 2014»

De Hacklab La Paz - r00thouse
Sin resumen de edición
Sin resumen de edición
 
Línea 181: Línea 181:
=== Concruso de scripts para automatización de tareas<br/> ===
=== Concruso de scripts para automatización de tareas<br/> ===


La modalidad es:
Ganador: Nils Flores &lt;nils.flores@gmail.com&gt;


#Se pide automatizar una tarea o varias tareas de administración o diagnóstico en el sistema operativo.
=== Ejercicios solucionados ===
#Los concursantes deben realizar scripts para atender a esta solución.
<pre>Ejercicio 2
#Una vez tengan la solución los subirán a un server o lo muestran a los organizadores.
#Los organizadores evaluarán y verificarán la solución.
#La persona que haya resuelto más problemas y más rápido ganará el premio.


== Situación ==
Necesita tener en un archivo una lista de las personas que accedieron al sistema mediante ssh (secure shell)
== Ejercicio ==
Realice un script que genere un archivo de reportes con la lista detallada de usuarios accedierón por ssh a la computadora cada vez que se ejecute.
</pre>
Sol <source lang="bash">
#!/bin/bash
# reporta en el archivo logdeautenticacion.txt los rregistros de
# logueo por ssh
cat /var/log/auth* | grep Accepted >> /home/logdeautenticacion.txt
exit 0
</source>
sol.
<pre>
Ejercicio3
== Situación ==
Imagine que administra un sistema y que debe asegurarse de que los
usuarios no activos no ocupen espacio en la memoria que los usuarios
activos necesitan.
Para eso usted decide hacer un script al cual se especifica el
directorio y el "El número máximo de días" de antiguedad que puede
tener un archivo para ser eliminado.
== Ejercicio ==
Dado un directorio "D" y un número de días "d", realice un script que
le permita eliminar los archivos con una atingüedad mayor o igual
que "d" en el directorio "D".
Ejemplo de llamada al script:
./EliminarArchivosviejos /var/tmp/ 50
Lo que hará el script "EliminarArchivosViejos" es eliminar todos
los archivos que tengan al menos 50 días de antigüedad.
./EliminarArchivosviejos /var/tmp/ 2
Ahora el script mencionado eliminará los archivos que tengan al menos
2 días de antigüedad dentro la carpeta /var/tmp
</pre>
<source lang="bash">
#!/bin/bash
# Hace una comprobación de tiempo y elimina los archivos mas viejos
# al numero de dias del primer argumento que esten en la carpeta
# especificada como segundo argumento
Carpeta=$1
Tiempo=$2
find $Carpeta* -mtime +$Tiempo -exec rm {} \
exit 0
</source>
<pre>
Ejercicio 4
== Situación ==
Imagine que se tiene una carpeta dentro de su directorio personal
que cambia constantemente. Dentro esa carpeta hay archivos
de mucha importancia de los cuales debe tener respaldos.
Se tiene el siguiente script que se encarga de hacer una copia
de seguridad y la guarda en dos diferentes directorios
cada vez que se ejecuta.
##################################################################
#!/bin/bash
CARPETA_A_COPIAR=$HOME/Plantillas
DESTINO_1=/var/tmp/
DESTINO_2=$HOME/.copia/
# Comprueba existencia
if [ ! -d $CARPETA_A_COPIAR ]
then
    echo "ERROR - No existe la carpeta origen $CARPETA_A_COPIAR "
    exit 1
fi
# Comprueba carpetas destino
if [ ! -d $DESTINO_1 ] || [ ! -d $DESTINO_2 ]
then
    echo "ERROR - No existe al menos una carpeta destino "
    exit 1
fi
# Se realiza la copia
cp -rf $CARPETA_A_COPIAR $DESTINO_1
cp -rf $CARPETA_A_COPIAR $DESTINO_2
echo "Copias de seguridad realizadas"
echo "en $DESTINO_1 y $DESTINO_2"
exit 0
##################################################################
Un problema con el script anterior es que de no existir alguna de
las carpetas destino no se ejecuta.
El otro es que reemplaza las copias de seguridad que se hayan
hecho antes, imagine que usted necesita las últimas 5 copias de
seguridad por si ocurren cambios indeseables.
== Ejercicio ==
Modifique el script anterior para que si no existe alguna de las
carpetas destino crearlas y en ellas guardar las copias.
Tambíen el script debe mantener las 5 últimas copias de seguridad
dentro de ambas carpetas destino.
Usted escoja como nombrar a las copias de seguridad pero recuerde
que deben haber máximo 5 copias de la carpeta orgien dentre de
cada una de las dos carpetas destino y estas deben ser las últimas
5 copias de seguridad.
Esto significa, si el script se ejecuta 6 veces este debe eliminar
la primera copia que es la más antigua, si se ejecuta 20 veces
sólo debe mantener las 5 copias más nuevas.
</pre>
sol.
<source lang="bash">
#!/bin/bash
# Hace una copia de la carpeta Plantillas dentro de HOME
# otros directorios
CARPETA_A_COPIAR=$HOME/Plantillas
DESTINO_1=/var/tmp/
DESTINO_2=$HOME/.copia/
NUMERO_COPIAS=4 #el numero maximo de copias menos 1
NUM_ACTUAL_COPIAS=0
ARCHIVO_NUM_COPIAS="logc"
NOMBRE="copia"
# Comprueba existencia
if [ ! -d $CARPETA_A_COPIAR ]
then
    echo "ERROR - No existe la carpeta origen $CARPETA_A_COPIAR "
    exit 1
fi
# Comprueba carpetas destino
if [ ! -d $DESTINO_1 ]
then
    mkdir $DESTINO_1
fi
if [ ! -d $DESTINO_2 ]
then
    mkdir $DESTINO_2
fi
# Comprueba que exista archivo con el numero actual de copias
if [ -e "$DESTINO_1$ARCHIVO_NUM_COPIAS" ]
then
    n=$(cat $DESTINO_1$ARCHIVO_NUM_COPIAS)
    let "NUM_ACTUAL_COPIAS=$n"
    echo "copia numero $NUM_ACTUAL_COPIAS"
else # el archivo aun no existe, se asume primera copia
    echo "1" > $DESTINO_1$ARCHIVO_NUM_COPIAS
fi
# Controla que no se exceda el numero maximo de copias
if [ "$NUM_ACTUAL_COPIAS" -gt "$NUMERO_COPIAS" ]
then
    num_eliminar=0
    let "num_eliminar=$NUM_ACTUAL_COPIAS-$NUMERO_COPIAS"
    echo "se eliminara $DESTINO_1$NOMBRE$num_eliminar"
    if [ -d "$DESTINO_1$NOMBRE$num_eliminar" ]
    then # elimina la carpeta mas antigua
rm -rf $DESTINO_1$NOMBRE$num_eliminar
rm -rf $DESTINO_2$NOMBRE$num_eliminar
echo "eliminada la copia $num_eliminar"
    fi
fi
# Hace la carpeta de copia de seguridad y la nombra adecuadamente
n=$NUM_ACTUAL_COPIAS
let "n=$n+1"
echo "$n" > $DESTINO_1$ARCHIVO_NUM_COPIAS
echo "realizando copia numero $n"
# Se realiza las copias
cp -rf $CARPETA_A_COPIAR $DESTINO_1$NOMBRE$n
cp -rf $CARPETA_A_COPIAR $DESTINO_2$NOMBRE$n
echo "Copias de seguridad realizadas"
echo "en $DESTINO_1 y $DESTINO_2"
exit 0
</source>
<pre>
Ejercicio 5
== Situacón ==
Imagine que en el sistema existen varios usuarios y usted quiere
saber quienes son los que más espacio de almacenamiento utilizan
en sus carpetas personales.
== Ejercicio ==
Cree un script que registre en un archivo llamado "log_uso_home"
en la carpeta /var/tmp/ , el tamaño de las carpetas /home de cada
usuario cada que se ejecute sin borrar los datos anteriores.
También en el archivo deberá indicar la fecha y hora de cada
prueba.
Ejemplo de salida:
dom nov 16 21:47:28 BOT 2014
129M /home/rigoberto
1,2G /home/hilerio
1,5M /home/gustavo
16K /home/gilda
1,3M /home/marcelo
1,3G /home/
lun nov 17 21:47:28 BOT 2014
144M /home/rigoberto
2,4G /home/hilerio
1,5M /home/gustavo
16K /home/gilda
5,3M /home/marcelo
2,5G /home/
Nota.- Se asume que todas las carpetas personales están en /home/
</pre>
sol.
<source lang="bash">
#!/bin/bash
# Reporta el espacio que ocupa cada usuario en su carpeta
# personal habitual
ARCHIVO_LOG=/var/tmp/log_uso_home
ROOT_UID=0 # ID del usuario root
ERROR_NON_ROOT=67 # Para salir con error de no usuario root
# Asegura que el script se ejecuta como root
if [ "$UID" -ne "$ROOT_UID" ]
then
    echo "No es el usuario root no tiene permisos"
    exit $ERROR_NON_ROOT
fi
cd /home/
{
    date
    du -h --max-depth 1
    echo
} >> $ARCHIVO_LOG
exit 0
</source>
=== CTF<br/> ===
=== CTF<br/> ===

Revisión actual - 19:05 21 nov 2014

Una semana entera de charlas y concursos de software libre este año es organizada por laSCE FCPN de la UMSA en La Paz.

Ingreso

Completamente libre y gratis, ven y entérate de actividades y algunas tecnologías de software libre.

Concursos

Puedes también participar en los concursos especificados a continuación, el ingreso es 1bs pero el premio a los ganadores es de 5000 ctvs más un certificado.

Por falta de ambientes, no habrán computadoras disponibles (tal vez alguna vieja que haya que arrancar con live CD/USB). Por eso es mejor traer una laptop para concursar.

Horarios

Hora
Lunes Martes
Miércoles Jueves

Viernes


CONCURSOS
CHARLAS
14:30 15:00
  • CTF
  • Blender
  • Inkscape


  • Scripts de automatización
  • Programación gráfica

CUPS

(Franklin Torrez)

Criterios de Diseño Web

Blender

(Rodrigo)

15:00 15:30
  • CTF
  • Blender
  • Inkscape
  • Scripts de automatización
  • Programación gráfica

CUPS

(Franklin Torrez)

Criterios de Diseño Web

15:30 16:00
  • CTF
  • Blender
  • Inkscape
  • Scripts de automatización
  • Programación gráfica

Inkscape

(Cristhian Yupanqui)

Virtualización KVM

(Gabriel Condori)

Android

(Cristiam)

16:00 16:30
  • CTF
  • Blender
  • Inkscape
  • Scripts de automatización
  • Programación gráfica

Inkscape

(Cristhian Yupanqui)

Virtualización KVM

(Gabriel Condori)

Linux Embebido

(Javier Zelada)

16:30 17:00
  • CTF
  • Blender
  • Inkscape
  • Scripts de automatización
  • Programación gráfica

Desarrollo web con herramientas libres

(Victor Aguilar)

GPG

(Rodrigo Garcia)

Linux Embebido

(Javier Zelada)

17:00 17:30
  • CTF
  • Blender
  • Inkscape
  • Scripts de automatización Programación gráfica

Desarrollo web con herramientas libres

(Victor Aguilar)

GPG

(Rodrigo Garcia)

cakephp

(Amilkar Shegrid Contreras Castro)

17:30 18:30
  • CTF
  • Blender
  • Inkscape
  • Scripts de automatización
  • Programación gráfica

Hardware Libre

(Rommy Quispe)

Reacción Climática

(Amos Batto)

DJANGO

(Jhonny Cruz)

19:00

20:00



Filosofía del software libre

(Georgia Ortiz)

Servidor de Dominio

(Miguel Yucra)

Robótica

Grover

Lugar y Fecha

Del Lunes 17 de Noviembre al Viernes 21 de Noviembre

Carrera informática UMSA (Monoblock Central), Los concursos en la Biblioteca de la Carrera y las charlas en la sala audiovisual 2do piso

Info Extra

Concruso de scripts para automatización de tareas

Ganador: Nils Flores <nils.flores@gmail.com>

Ejercicios solucionados

Ejercicio 2

== Situación ==

Necesita tener en un archivo una lista de las personas que accedieron al sistema mediante ssh (secure shell)

== Ejercicio ==

Realice un script que genere un archivo de reportes con la lista detallada de usuarios accedierón por ssh a la computadora cada vez que se ejecute.

Sol

#!/bin/bash

# reporta en el archivo logdeautenticacion.txt los rregistros de 
# logueo por ssh

cat /var/log/auth* | grep Accepted >> /home/logdeautenticacion.txt

exit 0

sol.

Ejercicio3

== Situación ==

Imagine que administra un sistema y que debe asegurarse de que los
usuarios no activos no ocupen espacio en la memoria que los usuarios
activos necesitan.

Para eso usted decide hacer un script al cual se especifica el 
directorio y el "El número máximo de días" de antiguedad que puede
tener un archivo para ser eliminado.

== Ejercicio ==

Dado un directorio "D" y un número de días "d", realice un script que
le permita eliminar los archivos con una atingüedad mayor o igual
que "d" en el directorio "D".

Ejemplo de llamada al script:

	./EliminarArchivosviejos /var/tmp/ 50

Lo que hará el script "EliminarArchivosViejos" es eliminar todos
los archivos que tengan al menos 50 días de antigüedad.

	./EliminarArchivosviejos /var/tmp/ 2

Ahora el script mencionado eliminará los archivos que tengan al menos
2 días de antigüedad dentro la carpeta /var/tmp
#!/bin/bash
# Hace una comprobación de tiempo y elimina los archivos mas viejos
# al numero de dias del primer argumento que esten en la carpeta
# especificada como segundo argumento

Carpeta=$1
Tiempo=$2

find $Carpeta* -mtime +$Tiempo -exec rm {} \

exit 0
Ejercicio 4
== Situación ==

Imagine que se tiene una carpeta dentro de su directorio personal
que cambia constantemente. Dentro esa carpeta hay archivos
de mucha importancia de los cuales debe tener respaldos.
Se tiene el siguiente script que se encarga de hacer una copia 
de seguridad y la guarda en dos diferentes directorios
cada vez que se ejecuta.

##################################################################
#!/bin/bash

CARPETA_A_COPIAR=$HOME/Plantillas
DESTINO_1=/var/tmp/
DESTINO_2=$HOME/.copia/

# Comprueba existencia
if [ ! -d $CARPETA_A_COPIAR ]
then
    echo "ERROR - No existe la carpeta origen $CARPETA_A_COPIAR "
    exit 1
fi
# Comprueba carpetas destino
if [ ! -d $DESTINO_1 ] || [ ! -d $DESTINO_2 ] 
then
    echo "ERROR - No existe al menos una carpeta destino "
    exit 1
fi
# Se realiza la copia
cp -rf $CARPETA_A_COPIAR $DESTINO_1
cp -rf $CARPETA_A_COPIAR $DESTINO_2

echo "Copias de seguridad realizadas"
echo "en $DESTINO_1 y $DESTINO_2"

exit 0
##################################################################

Un problema con el script anterior es que de no existir alguna de
las carpetas destino no se ejecuta.

El otro es que reemplaza las copias de seguridad que se hayan 
hecho antes, imagine que usted necesita las últimas 5 copias de
seguridad por si ocurren cambios indeseables.

== Ejercicio ==

Modifique el script anterior para que si no existe alguna de las
carpetas destino crearlas y en ellas guardar las copias.

Tambíen el script debe mantener las 5 últimas copias de seguridad
dentro de ambas carpetas destino.
Usted escoja como nombrar a las copias de seguridad pero recuerde
que deben haber máximo 5 copias de la carpeta orgien dentre de
cada una de las dos carpetas destino y estas deben ser las últimas
5 copias de seguridad. 
Esto significa, si el script se ejecuta 6 veces este debe eliminar
la primera copia que es la más antigua, si se ejecuta 20 veces
sólo debe mantener las 5 copias más nuevas.

sol.

#!/bin/bash
# Hace una copia de la carpeta Plantillas dentro de HOME
# otros directorios

CARPETA_A_COPIAR=$HOME/Plantillas
DESTINO_1=/var/tmp/
DESTINO_2=$HOME/.copia/

NUMERO_COPIAS=4 #el numero maximo de copias menos 1
NUM_ACTUAL_COPIAS=0
ARCHIVO_NUM_COPIAS="logc"
NOMBRE="copia"

# Comprueba existencia
if [ ! -d $CARPETA_A_COPIAR ]
then
    echo "ERROR - No existe la carpeta origen $CARPETA_A_COPIAR "
    exit 1
fi

# Comprueba carpetas destino
if [ ! -d $DESTINO_1 ]
then
    mkdir $DESTINO_1
fi
if [ ! -d $DESTINO_2 ] 
then
    mkdir $DESTINO_2
fi

# Comprueba que exista archivo con el numero actual de copias
if [ -e "$DESTINO_1$ARCHIVO_NUM_COPIAS" ]
then
    n=$(cat $DESTINO_1$ARCHIVO_NUM_COPIAS)
    let "NUM_ACTUAL_COPIAS=$n"
    echo "copia numero $NUM_ACTUAL_COPIAS"
else # el archivo aun no existe, se asume primera copia
    echo "1" > $DESTINO_1$ARCHIVO_NUM_COPIAS
fi
# Controla que no se exceda el numero maximo de copias
if [ "$NUM_ACTUAL_COPIAS" -gt "$NUMERO_COPIAS" ]
then
    num_eliminar=0
    let "num_eliminar=$NUM_ACTUAL_COPIAS-$NUMERO_COPIAS"
    echo "se eliminara $DESTINO_1$NOMBRE$num_eliminar"
    if [ -d "$DESTINO_1$NOMBRE$num_eliminar" ]
    then # elimina la carpeta mas antigua
	rm -rf $DESTINO_1$NOMBRE$num_eliminar
	rm -rf $DESTINO_2$NOMBRE$num_eliminar
	echo "eliminada la copia $num_eliminar"
    fi
fi

# Hace la carpeta de copia de seguridad y la nombra adecuadamente
n=$NUM_ACTUAL_COPIAS
let "n=$n+1"
echo "$n" > $DESTINO_1$ARCHIVO_NUM_COPIAS
echo "realizando copia numero $n"
# Se realiza las copias

cp -rf $CARPETA_A_COPIAR $DESTINO_1$NOMBRE$n
cp -rf $CARPETA_A_COPIAR $DESTINO_2$NOMBRE$n

echo "Copias de seguridad realizadas"
echo "en $DESTINO_1 y $DESTINO_2"

exit 0

Ejercicio 5

== Situacón ==

Imagine que en el sistema existen varios usuarios y usted quiere
saber quienes son los que más espacio de almacenamiento utilizan
en sus carpetas personales.

== Ejercicio ==

Cree un script que registre en un archivo llamado "log_uso_home"
en la carpeta /var/tmp/ , el tamaño de las carpetas /home de cada
usuario cada que se ejecute sin borrar los datos anteriores.
También en el archivo deberá indicar la fecha y hora de cada
prueba.

Ejemplo de salida:

dom nov 16 21:47:28 BOT 2014
129M	/home/rigoberto
1,2G	/home/hilerio
1,5M	/home/gustavo
16K	/home/gilda
1,3M	/home/marcelo
1,3G	/home/

lun nov 17 21:47:28 BOT 2014
144M	/home/rigoberto
2,4G	/home/hilerio
1,5M	/home/gustavo
16K	/home/gilda
5,3M	/home/marcelo
2,5G	/home/

Nota.- Se asume que todas las carpetas personales están en /home/

sol.

#!/bin/bash

# Reporta el espacio que ocupa cada usuario en su carpeta
# personal habitual

ARCHIVO_LOG=/var/tmp/log_uso_home

ROOT_UID=0 # ID del usuario root
ERROR_NON_ROOT=67 # Para salir con error de no usuario root

# Asegura que el script se ejecuta como root
if [ "$UID" -ne "$ROOT_UID" ]
then
    echo "No es el usuario root no tiene permisos"
    exit $ERROR_NON_ROOT
fi

cd /home/
{
    date
    du -h --max-depth 1
    echo 
} >> $ARCHIVO_LOG

exit 0

CTF