Backup

Publicado por antonio mauricio sousa 16/05/2005

[ Hits: 6.264 ]

Download backup.sh




este script faz uma pesquisa em todo o disco por ficheiros de que um determinado user é o owner e guarda.os num .tgz com o nome escolhido por quem corre o script.
ele tambem tem a opção de visualixar o conteudo do backup feito e recuperar ficheiros para uma directoria a introduzir

se por acaso alguem o alterar. por favor, mandem.m um mail a dizer o que alteraram e porquê é que alteraram.... porque o meu objectivo é aprender e superar os meus erros...

  



Esconder código-fonte

#!/bin/bash
#
#============================
#                   backup.sh
#============================
# script para fazer um backup 
#============================
#      antonio mauricio sousa
#============================
#  antonio_sousa@linus.uac.pt
#============================

# para criar um arquivo com os dados de um USER
# pode.se usar o tar
# USAGE: tar [options] [tarfile] [other-files]
# como o objectivo é criar um ficheiro *.tgz
# deve.se implementar esta combinação
# tar cv directoria | gzip > backup.tgz
# ...Assim cria.se um arquivo backup.tgz com a 
# directoria 'directoria'...

# função create log:
# --cria uma introdução no ficheiro de logs
create_log ()
{
cat << EOF
ficheiro de log de apoio ao administrador
.criado com o script backup.sh
==========================================
EOF
}

# o script começa por
# verificar se os argumentos estao correctos e 
# se sao válidos:
if [ $# != 2 ]
# se for verdade os argumentos estao mal
then
    echo "--Usage: $0 <login> <file>"
    exit 1
fi
# verificar se o utilizador tem permissoes de SU
a=`whoami` 
b="root"
if [ "$a" = "$b" ]
then
    echo "--o utilizador tem as permissoes de root"
else
    echo "--voçe não tem as permissoes de root"
    exit 1
fi
# tambem é possivel ver se o USER é ROOT avaliando o
# seu UID 

echo "--numero de argumentos é valido"
echo "--a verificar se o $1 existe"
grep -q "^$1:" /etc/passwd 
if [ $? -eq 0 ]
then
   echo "--$1 é um USER válido"
else
    echo "--o user $1 é invalido"
    exit 1
fi

# imprimir um menu:

opc=0 # opção de escolha

echo
echo "--foi introduzido:"
echo "             utilizador: $1"
echo "             ficheiro final: $2.tgz"
while [ true ]
do
    # imprime o menu
    
    echo 
    echo "[MENU]"
    echo "1-Fazer Backup"
    echo "2-Listar conteúdo do backup"
    echo "3-Recuperar ficheiro de um backup"
    echo "4-Cancelar/Sair"
    # pedir a opção ao usr
    printf ">"
    read opc1
    opc="$opc1"
    #==================
    # analise do input:
    #==================
    if [ $opc = 4 ] # opçao sair
    then
        echo "--foi escolhida a opçao (4)"
        echo "--o script terminou"
        exit 0
    fi
    if [ $opc = 1 ] # opçao backup
    then
        echo "--foi escolhida a opção (1)"
        echo "--o script vai agora criar o backup de"
        echo "  todos os ficheiros em que $1 é o owner"
        
        # vamos guardar as informaçoes do backup em forma de log
        # no ficheiro /var/log/backup.log
        # ::. mas primeiro temos de verificar se o ficheiro existe
        # se existe acrescenta.se a informação 
        # cc cria.se um ficheiro novo e acrescenta.se a informação
        [ -f /var/log/backup.log ]
        if (($? == 0))
        then
            echo "--/var/log/backup.log vai conter informaçoes do backup"
        else
            # o file nao existe mas vai ser criado com o comando cat
            # o cat recebe como input todas as linhas de texto ate encontrar
            # o EOF            
            create_log > /var/log/backup.log
            echo "--/var/log/backup.log vai conter informaçoes do backup"
        fi

        # criar o backup.tgz
        #tar cv directoria | gzip > $2.tgz
        #
        # existem 3 maneiras basicas de manipular o tar:
        #    .(c) criar
        #    .(t) visualizar
        #    .(x) extrair
        find / -user $1 > /var/log/files_ultimo_backup
        #if (($? == 0))
        #then
        tar -zcvf $2.tgz -T /var/log/files_ultimo_backup
         #   echo "--foi criado o backup $2.tgz do user $1 em [`date`]" >> /var/log/backup.log 
         #   echo "--informações guardadas em /var/log/backup.log"
        #else
         #   echo "--não foi possivel criar o backup"
        #fi
    fi
    if [ $opc = 2 ]
    then
        echo "--foi escolhida a opção (2)"
        [ -f $2.tgz ]
        if (($? == 0))
        then
            echo "--ficheiro $2.tgz existe"
            echo "--abrir /var/log/files_ultimo_backup com o less"
            less /var/log/files_ultimo_backup
            # tambem pode.se listar todos os ficheiros de um tar
            # atravez da opçao -t ou --list 
            # mas como files_ultimo_backup tem todos os ficheiros
            # é preferivel chamar esse ficheiro com um programa 
            # que imprime o ficheiro no terminal (cat , more, less - neste caso o less)
            # ... less é melhor que more:)
            echo "--visualizaçao do conteudo do backup $2.tgz feita com sucesso em [ `date` ]" >> /var/log/backup.log
        else
            echo "--ficheiro $2.tgz não foi encontrado"
            echo "--é necessario fazer o backup primeiro"                        
        fi
    fi
    if [ $opc = 3 ]
    then
        echo "--foi escolhida a opção (3)"
        [ -f $2.tgz ]
        if (($? == 0))
        then
            # recuperar um ficheiro de um backup
            echo "--o utilizador tem de introduzir os dados do"
            echo "  arquivo a extrair"
            printf "nome:"
            read nome
            printf "destino(directoria)": dest
            read dest
            [ -d "$dest" ]
            if (($? == 0))
            then
                echo "--$dest é uma directoria valida"

                tar xfvz "$2".tgz "$nome"
            
                # fazer um gunzip de $2.tgz para obter um .tar
                #gunzip $2.tgz
                # agora tenho um tar e aplico a operaçao para retirar o "nome"
                #tar xvf $2.tar "$nome"
                # desfazer a operaçao gunzip
                #gzip $2.tar
                # assim é criado um ficheiro
                #mv $2.tar.gz $2.tgz
                mv $2.tgz "$dest"
                echo "--ficheiro $nome foi extraido com sucesso de $2.tgz em [ `date` ]" >> /var/log/backup.log
            else 
                echo "--$dest não é uma directoria valida"
            fi        
        fi
    fi
    
done

Scripts recomendados

Salvar link favorito

Remover arquivos duplicados

LogPac

Importar varius Emolticons de uma vez para amsn

BKP Completo Sem compactação (com exclusao)


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts