Script de limpeza, atualização e verificação de erros no Debian

Publicado por Ricardo Lisboa (última atualização em 11/01/2026)

[ Hits: 886 ]

Download debian-clean-and-diagnose.sh




Esse script, criado com a ajuda do Gemini, permite fazer limpeza, atualização e diagnóstico no Debian 13.  Resolvi criar após erros e travamentos no meu sistema, devido à instalação de programas.  Ele detectou tudo que estava com problemas e, submetendo o relatório ao Gemini, consegui resolver.

  



Esconder código-fonte

#!/bin/bash

# ==============================================================================
# AVISO SOBRE O HISTÓRICO DE LOGS:
# Este script utiliza 'journalctl --vacuum-time=1s' ao final da execução.
# Isso remove todos os logs anteriores para garantir que relatórios futuros 
# mostrem apenas erros novos. Se o sistema sofrer um erro crítico ou travar, 
# analise os logs ANTES de rodar este script, pois o histórico será apagado.
# ==============================================================================

# 1. Detecta o usuário real (mesmo se rodar com sudo) e define o diretório
REAL_USER=${SUDO_USER:-$USER}
REAL_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6)
DIRETORIO_REPORTS="$REAL_HOME/Reports"

# 2. Cria a pasta com as permissões corretas para o seu usuário
sudo install -d -o "$REAL_USER" -g "$REAL_USER" "$DIRETORIO_REPORTS"

# 3. Define o nome do arquivo
ARQUIVO_LOG="$DIRETORIO_REPORTS/Relatorio_Manutencao_$(date +%Y%m%d_%H%M%S).txt"

# Inicia o bloco de captura (Tudo aqui dentro vai para o arquivo e para a tela)
{
    echo "====================================================="
    echo "   MANUTENÇÃO, ATUALIZAÇÃO E ANÁLISE"
    echo "   Data: $(date)"
    echo "   Usuário: $REAL_USER"
    echo "====================================================="

    # --- PARTE 1: ATUALIZAÇÃO E MANUTENÇÃO ---
    printf "\n%s* 1. Atualizando o sistema...%s\n" "$B" "$N"
    sudo apt update -y 2>/dev/null && sudo apt full-upgrade -y 2>/dev/null

    if dpkg -s flatpak >/dev/null 2>&1; then
        printf "\n%s- Atualizando e limpando flatpaks...%s\n" "$B" "$N"
        flatpak update -y
        flatpak uninstall --unused -y
    fi

    printf "\n%s* 2. Limpeza de pacotes e cache...%s\n" "$B" "$N"
    sudo apt purge --autoremove -y 2>/dev/null
    sudo apt autoclean -y 2>/dev/null
    sudo apt clean 2>/dev/null
    
    printf "\n%s* Executando o TRIM...%s\n" "$B" "$N"
    fstrim -v /

    # --- PARTE 2: ANÁLISE DE SAÚDE ---
    echo -e "\n====================================================="
    echo "   DIAGNÓSTICO DE ERROS (PÓS-MANUTENÇÃO)"
    echo "====================================================="

    echo -e "\n[1/4] Verificando integridade de pacotes..."
    sudo dpkg --configure -a
    sudo apt-get check 2>/dev/null || echo "ERRO: Problemas nas dependências encontrados."

    echo -e "\n[2/4] Erros críticos no log (Última sessão):"
    sudo journalctl -p 3 -b --no-pager

    echo -e "\n[3/4] Alertas do Kernel (Hardware/Drivers):"
    sudo dmesg -T --level=err,crit,alert | tail -n 10

    echo -e "\n[4/4] Top 5 Processos (CPU):"
    ps aux --sort=-%cpu | head -n 6

    echo -e "\n====================================================="
    echo "   LIMPANDO HISTÓRICO DE LOGS (Journal Vacuum)"
    echo "====================================================="
    sudo journalctl --vacuum-time=1s
    
    echo -e "\nFIM DO PROCESSO: $(date +%H:%M:%S)"
    echo "AVISO: O histórico de logs foi resetado para garantir relatórios limpos."

} | tee "$ARQUIVO_LOG"

# Ajusta permissão para o usuário real (Ricardo)
sudo chown "$REAL_USER":"$REAL_USER" "$ARQUIVO_LOG"

printf "\n%s* Concluído! Relatório salvo em: %s%s\n" "$B" "$ARQUIVO_LOG" "$N"
printf "%s* NOTA:%s Histórico de logs limpo para a próxima análise.\n\n" "$B" "$N"

Scripts recomendados

Timer para desligar o PC

SDVDMux

PDC linux desligando pc em uma de windows

Script simples de backup de arquivos em máquina remota

Script para instalação Gerix Wi-fi Cracker no Kali Linux


  

Comentários
[1] Comentário enviado por xerxeslins em 11/01/2026 - 21:39h

Curti! Valeu!




[2] Comentário enviado por Zoiudo em 14/01/2026 - 09:32h

Dei uma fuçada pra dar uma escolha gráfica pro usuário entre manutenção e diagnóstico, usa zenity para Gnome e kdialog pra KDE, detecta hdd ou ssd, teste aí:

#!/bin/bash

# ==============================================================================
# MANUTENÇÃO E DIAGNÓSTICO – VERSÃO GRÁFICA COM ESCOLHA - "MANUGNÓSTICO"
# KDE (kdialog) | GNOME (zenity)
# Debian e agregados
# ==============================================================================

# --- Detecta usuário real ---
REAL_USER=${SUDO_USER:-$USER}
REAL_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6)
REPORTS_DIR="$REAL_HOME/Reports"
install -d -o "$REAL_USER" -g "$REAL_USER" "$REPORTS_DIR"

DATA=$(date +%Y%m%d_%H%M%S)

# --- Detecta dialog ---
if command -v kdialog >/dev/null 2>&1; then
UI="kdialog"
elif command -v zenity >/dev/null 2>&1; then
UI="zenity"
else
UI="cli"
fi

# --- Funções de UI ---
menu() {
case "$UI" in
kdialog)
kdialog --menu "Escolha a operação:" \
1 "Manutenção do sistema" \
2 "Diagnóstico do sistema"
;;
zenity)
zenity --list --title="Manutenção do Sistema" \
--column="Opção" --column="Descrição" \
1 "Manutenção do sistema" \
2 "Diagnóstico do sistema"
;;
*)
echo "1) Manutenção"
echo "2) Diagnóstico"
read -rp "Escolha: " REPLY
echo "$REPLY"
;;
esac
}

notify() {
local MSG="$1"
local TYPE="$2"

case "$UI" in
kdialog)
[ "$TYPE" = "error" ] && kdialog --error "$MSG" || kdialog --msgbox "$MSG"
;;
zenity)
[ "$TYPE" = "error" ] && zenity --error --text="$MSG" || zenity --info --text="$MSG"
;;
*)
echo "$MSG"
;;
esac
}

# --- Detecção de SSD ---
is_ssd() {
DEV=$(findmnt -n -o SOURCE / | sed 's/[0-9]*$//')
[ "$(cat /sys/block/${DEV##*/}/queue/rotational 2>/dev/null)" = "0" ]
}

# --- Status ---
STATUS_OK=true
ERROS=0

# --- Operações ---
manutencao() {
LOG="$REPORTS_DIR/Relatorio_Manutencao_$DATA.txt"
{
echo "=== MANUTENÇÃO DO SISTEMA ==="
date
echo

sudo apt update || STATUS_OK=false
sudo apt full-upgrade -y || STATUS_OK=false

sudo apt autoremove --purge -y
sudo apt autoclean -y
sudo apt clean

if command -v flatpak >/dev/null 2>&1; then
flatpak update -y
flatpak uninstall --unused -y
fi

if command -v fstrim >/dev/null 2>&1 && is_ssd; then
echo
echo "SSD detectado – executando TRIM"
sudo fstrim -v /
else
echo
echo "TRIM ignorado (disco não é SSD)"
fi

echo
echo "=== FIM DA MANUTENÇÃO ==="
} | tee "$LOG"

chown "$REAL_USER:$REAL_USER" "$LOG"
}

diagnostico() {
LOG="$REPORTS_DIR/Relatorio_Diagnostico_$DATA.txt"
{
echo "=== DIAGNÓSTICO DO SISTEMA ==="
date
echo

echo "[1] Verificando pacotes..."
sudo dpkg --configure -a || ERROS=$((ERROS+1))
sudo apt-get check || ERROS=$((ERROS+1))

echo
echo "[2] Erros críticos do boot atual:"
journalctl -p 3 -b --no-pager | tee /tmp/journal_err.txt
[ -s /tmp/journal_err.txt ] && ERROS=$((ERROS+1))

echo
echo "[3] Erros recentes do kernel:"
dmesg -T --level=err,crit,alert | tail -n 15 | tee /tmp/dmesg_err.txt
[ -s /tmp/dmesg_err.txt ] && ERROS=$((ERROS+1))

echo
echo "[4] Top processos por CPU:"
ps aux --sort=-%cpu | head -n 6

echo
echo "=== FIM DO DIAGNÓSTICO ==="
} | tee "$LOG"

chown "$REAL_USER:$REAL_USER" "$LOG"
}

# --- Execução ---
OP=$(menu) || exit 0

case "$OP" in
1)
manutencao
;;
2)
diagnostico
;;
*)
exit 0
;;
esac

# --- Resumo ---
if [ "$ERROS" -gt 0 ]; then
notify "Processo concluído com ALERTAS.\nErros detectados: $ERROS\nRelatórios em ~/Reports" "error"
else
notify "Processo concluído com SUCESSO.\nNenhum erro crítico detectado.\nRelatórios em ~/Reports" "info"
fi





"O maior fracasso da nossa espécie não é falta de tecnologia. É termos tecnologia suficiente para salvar todos e coragem política apenas para salvar alguns." - ChatGPT


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts