Backup

Publicado por antonio mauricio sousa 16/05/2005

[ Hits: 5.989 ]

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
#============================
#  [email protected]
#============================

# 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

Cyber Script

Script Para o Desligamento do Sistema

Mostrar IP da Internet

Arch Linux - remover dependências obsoletas

[ResuLinux] Discador Claro 3G em dialog


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário