Arch Linux

 

Scripts: cleaner

De Wiki do Arch Linux Brasil

#! /bin/bash
#-*- coding: utf-8 -*-

#### Limpador de cache, logs, pacotes desnecessários e arquivos de backup

##	Autor:	Renan Tomal Fernandes
##	E-mail: renan  arroba  kauamanga  ponto  com  ponto br
## 	Última alteração:	2009-11-06
## 	Depende de:
##			coreutils
##			pacman


. /etc/rc.conf
. /etc/rc.d/functions

function limpa_logs() {
    _logs_dir=/var/log
    log "Pasta de logs:" 1
    log "Antes:  $(du -sh "$_logs_dir")" 2

    find "$_logs_dir" |
        while read line; do
            if [ -f "$line" ]; then
                echo '' > "$line"
            fi
        done

    log "Depois: $(du -sh "$_logs_dir")" 2
    return 0
}

function limpa_pacotes_desnecessarios() {

    log "Pacotes desnecessários:" 1

    _packages=$(pacman -Qdtq)

    if [ -n "$_packages" ]; then
        (pacman -Rns $_packages && log "$(echo $_packages | wc -l) pacotes removidos($_packages)" 2) ||
        (log "Falha ao rodar o seguinte comando: pacman -Rns $_packages" 2 && return 1)
    else
        log "Nenhum pacote desnecessário encontrado" 2
    fi
    return 0
}

function limpa_cache_pacman(){

    log "Cache do pacman:" 1

    log "Antes:" 2 
    log "Tamanho: $(du -sh /var/cache/pacman/pkg/)" 3
    log "Número de arquivos: $(ls /var/cache/pacman/pkg | wc -l)" 3

    pacman -Sc --noconfirm >/dev/null 2>&1

    if [ $? != 0 ]; then
        log "Houve um erro ao executar: pacman -Sc --noconfirm" 2
        return 1
    fi

    log "Depois:" 2
    log "Tamanho: $(du -sh /var/cache/pacman/pkg/)" 3
    log "Número de arquivos: $(ls /var/cache/pacman/pkg | wc -l)" 3

    return 0

}

function limpa_yaourtbuild() {

    log "yaourt-build" 1

    if [ -d /var/abs/local/yaourtbuild/* ]; then
        log "Antes:  $(du -sh /var/abs/local/yaourtbuild/)" 2
        ls /var/abs/local/yaourtbuild/* |
            while read line; do
                if [ $INTERACTIVE == 1 ]; then
                    question "Apagar $line?"
                    if [ $question == 1 ]; then
                        rm -rf "$line"
                    fi
                else
                    rm -rf "$line"
                fi
            done
        log "Depois: $(du -sh /var/abs/local/yaourtbuild/)" 2
    else
        log "Nada encontrado" 2
    fi

    return 0
}

function limpa_yaourttmp(){

    log "yaourt-tmp" 1

    if [ -d /tmp/yaourt-tmp-* ]; then
        log "Antes:  $(du -sh /tmp)" 2
        rm -rf /tmp/yaourt-tmp-*
        log "Depois: $(du -sh /tmp)" 2
    else
        log "Nada encontrado" 2
    fi

    return 0

}

function limpa_backups(){
    log "Backups:" 1

    find / -iname "*~" -o -iname "*.bak" -o -iname "*.tmp" > /tmp/bkp_log
    count=0

    for i in $(seq 1 $(cat /tmp/bkp_log | wc -l )); do
        line=$(cat /tmp/bkp_log | head -n $i | tail -n 1)
        if [ $INTERACTIVE == 1 ]; then
            if [ -f "$line" ]; then
                question "Remover arquivo $line?"
            else
                question "Remover diretório $line?"
            fi

            if [ $question == 1 ]; then
                rm -rf "$line"
                count=$(expr $count + 1)
            fi
        else
            rm -rf "$line"
            count=$(expr $count + 1)
        fi
    done

    rm /tmp/bkp_log

    log "Arquivos removidos: $count" 2
    return 0
}

function add_bkp_file(){
    if [ ! -n "$arqs" ]; then
        arqs="$arqs\n"
    fi
    arqs="$arqs$1"
}

function pega_opcoes(){

    LIMPA_LOGS=1
    LIMPA_PACOTES=1
    LIMPA_CACHE=1
    LIMPA_YAOURTBUILD=1
    LIMPA_YAOURTTMP=1
    LIMPA_BACKUPS=0
    INTERACTIVE=0
    HELP=0
    VERSION=0.0.2

    until [ -f "$1" -o "$1" = "--" -o -z "$1" ]
    do
        case "$1" in
            --nologs | -l )
                LIMPA_LOGS=0
                ;;
            --nopackages | -p )
                LIMPA_PACOTES=0
                ;;
            --nocache | -c )
                LIMPA_CACHE=0
                ;;
            --noyaourtbuild | -b )
                LIMPA_YAOURTBUILD=0
                ;;
            --noyaourttmp | -t )
                LIMPA_YAOURTTMP=0
                ;;
            --clear-backups | -cb )
                LIMPA_BACKUPS=1
                ;;
            --interactive | -i )
                INTERACTIVE=1
                ;;
            --help | -h )
                usage
                exit 0
                ;;
            --version | -v )
                echo $VERSION
                exit 0
                ;;
            * )
                usage
                error "parâmetro desconhecido: $1" 1
                ;;
        esac
        shift
    done

}

function error(){
    echo -e "\e[1;31mERRO\e[0;31m: $1\e[m"
    exit $2
}

function log(){
    for((i=0;i<$2;i++)); do
        log="$log  "
    done
    log="$log $1\n"
}

function roda_comandos(){
    roda_funcao limpa_logs                   $LIMPA_LOGS        "Limpando logs"                                      "Limpar logs?"
    roda_funcao limpa_cache_pacman           $LIMPA_CACHE       "Limpando pacotes não instalados do cache do pacman" "Limpar pacotes não instalados do cache?"
    roda_funcao limpa_yaourtbuild            $LIMPA_YAOURTBUILD "Limpando yaourtbuild"                               "Limpar pasta de compilação do yaourt?"
    roda_funcao limpa_yaourttmp              $LIMPA_YAOURTTMP   "Limpando yaourt-tmp"                                "Limpar pasta temporária do yaourt?"
    roda_funcao limpa_pacotes_desnecessarios $LIMPA_PACOTES     "Removendo pacotes desnecessários"                   "Remover pacotes desnecessários(dependências inúteis)?"
    roda_funcao limpa_backups                $LIMPA_BACKUPS     "Limpando backups"                                   "Remover arquivos de backups?"
}

function roda_funcao(){
    if [ $2 == 1 ]; then

        if [ $INTERACTIVE == 1 ]; then
            question "$4"
            if [ $question == 0 ]; then
                return 1
            fi
        fi

        stat_busy "$3"
        $1
        if [ $? == 0 ]; then
            stat_done "$3"
        else
            stat_fail "$3"
        fi
    fi
}

function question(){
    printf "\e[1;33m?? \e[1;37m$1 \e[1;30m[\e[1;32mS\e[1;30m/\e[1;31mN\e[1;30m]:\e[m "
    read out

    case "$out" in
        's' | 'S' )
            resp=1
            ;;
        * )
            resp=0
            ;;
    esac

    if [ "x$2" == "xecho" ]; then
        echo $resp
    else
        question=$resp
    fi

    return 0
}

function usage(){
    echo "cleaner versão: $VERSION"
    echo "  Opções:"
    echo "    -h  | --help          : Mostra essa mensagem de ajuda e sai"
    echo "    -v  | --version       : Mostra a versão do programa e sai"
    echo "    -l  | --nologs        : Não esvazia os arquivos de log"
    echo "    -c  | --nocache       : Não limpa o cache do pacman"
    echo "    -p  | --nopackages    : Não remove os pacotes desnecessários(dependências que não são mais necessárias)"
    echo "    -b  | --noyaourtbuild : Não remove o conteudo de /var/abs/local/yaourtbuild"
    echo "    -t  | --noyaourttmp   : Não remove /tmp/yaourt-tmp-*"
    echo "    -cb | --clear-backups : Remove todos os *~ *.bak *.tmp de /"
    echo "    -i  | --interactive   : Modo interativo / não automático"
}

pega_opcoes $@

if [ "$(whoami)" != "root" ]; then

    _s=$(which sudo 2>/dev/null)
    echo "É necessário rodar esse script como root. usando o seguinte comando:"

    if [ -n "$_s" ]; then
        echo "sudo '$0' $@"
        sudo "$0" $@
    else
        echo "su -c '\"$0\" $@'"
        su -c "'$0' $@"
    fi
    exit 0
fi

log "Informações" 0

roda_comandos
echo -e "$log"

## Sugestões:
##		autor:
##		data:
##		conteúdo:
Ferramentas pessoais
TOOLBOX
LANGUAGES