Script en bash
-
Hola gente!!
Bueno el tema es el siguiente tengo que hacer un script en bash.
Lo que tengo que hacer es hacer un backup del home de cada usuario que no sea administrador, bueno la parte esa esta lista, despues tengo que hacer que el usuario comun pueda ver sus copias de seguridad, y poder recuperar todo o parte de esa copia y ese es mi problema no se me ocurre como hacerlo. aca esta el codigo que hace la el empaquetado y la comprecion.#!/bin/bash
#toma la fecha y hora del sistema
fecha=`date +%F-%H.%M`
#pasa el archivo /etc/passwd al archivo temp.txt
cat /etc/passwd > temp.txt
while read L ; do
#toma el nombre del usuario
usu=`echo "$L" | cut -d: -f1`
#toma el UID del usuario
uid=`echo "$L" | cut -d: -f3`
#toma el directorio home del usuario
home=`echo "$L" | cut -d: -f6`
#comprueba el UID del usuario si es mayor de 500 y menor de 65000
if [ "$uid" -ge 500 ] && [ "$uid" -lt 65000 ] ; then
#empaqueta el home del usuario
tar -cvf /practica/backup_"$usu"_"$uid"_"$fecha".tar "$home"
#comprimir el el backup ya esta echo este es un codigo incompleto que hice
fi
done < temp.txt
#borra el archivo temp.txt
rm -f temp.txt
Nota: este script esta incompleto y puede tener fallas pero es basicamente el script que tengo funcionando. Desde ya gracias al que me pueda dar una mano. -
Vos por cada archivo estás guardando el nombre del usuario no ?? bueno, toma de la variable de entorno del usuario que ejecuta el programa ( USER ) el nombre actual y entonces mostra solamente los archivos que concuerden con ese patrón ( porque sabés que es de ese usuario ), o lo podrías hacer por uid, pero bue... así le mostras solamente esos archivos.
Cuando elige hacer un backup simplemente se lo desempaquetas.
Podrías hacer al programa suid para que lo pueda ejecutar cualquiera, o en un directorio con el bit sticky cuando haces el backup al archivo de cada usuario le haces un chown para que después ese usuario pueda manejarlo a su gusto desde la herramienta de backup sin necesidad de hacerla root suid.
El tema de hacer un backup parcial podrías refinarlo después, pero podrías usar la opción -t ( creo que es esa ) para pedir una lista de archivos que hay en el tar, y que el usuario elija cual desempaquetar.
O sea... un cortito ejemplo para la lista... una pabada:Código:for i in `ls *.tar | grep ${USER}`; do # hacer algo, como escribir el menú :) done; -
No digo que lo almacenes en un archivo porque podés filtrar perfectamente un ls, pero básicamente eso es lo que digo, que tomés los backups solamente del usuario que los pidió.
Si querés hacerlo con un archivo podrías guardar en el directorio de los backups un archivo de texto plano por cada usuario que contenga el nombre de todos los backups que puede manejar, un archivo por ej. llamado no se... usuario.txt y que tenga contenidos como el siguiente
backup_usuario_1000_algunafecha.tar
backup_usuario_1000_algunafecha.tar
backup_usuario_1000_algunafecha.tar
backup_usuario_1000_algunafecha.tar
backup_usuario_1000_algunafecha.tar
entonces podrías tomar el menú directamente de ese archivo... se entiende ?? pero si, lo que digo es que solamente le muestres los backups que concuerden con el usuario que los pidió. -
yo lo que haria, aparte, es una estructura case ... podira ser asi:
case $1 in
backup)echo "Nombre de usuario" && read USER
echo "Haciendo backup del home del usuario $USER ..."
(tu codigo)
;;
restaurar) echo "Nombre de usuario" && read USER
echo "Restaurando backup del usuario ..."
(tu codigo)
;;
esac
vale aclarar que $1 es el PIRMER argumento que se toma desde el prompt de bash despues del nombre del script. Podrias hacer el backup asi
manuuu@annabelle:~$./backup.sh backup
espero sirva este pequeño hint
by!
Manu
