Here is a diagnose script for Zorin os 18.
#!/bin/bash
# ------------------------------------------------------------
# Zorin/Ubuntu Interaktives Diagnose & Reparatur Script
# Version: 2.0
# Verbesserte Fehlerbehandlung, Logging & User Experience
# ------------------------------------------------------------
# Farben für die Konsole
GREEN="\033[0;32m"
YELLOW="\033[1;33m"
RED="\033[0;31m"
BLUE="\033[0;34m"
NC="\033[0m"
# Globale Variablen
LOGFILE="/tmp/diagnose_$(date +%Y%m%d_%H%M%S).log"
ERROR_COUNT=0
WARNING_COUNT=0
# ----------------------------
# Initialisierung
# ----------------------------
init_script() {
echo -e "${GREEN}=== Interaktives Diagnose & Reparatur Script v2.0 ===${NC}"
echo -e "${BLUE}Logfile wird erstellt: $LOGFILE${NC}\n"
# Logfile Header
{
echo "=== Diagnose Log ==="
echo "Datum: $(date)"
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -r)"
echo "===================="
echo ""
} > "$LOGFILE"
# Sudo-Check
if [ "$EUID" -ne 0 ] && ! sudo -n true 2>/dev/null; then
echo -e "${YELLOW}Hinweis: Dieses Script benötigt sudo-Rechte für die meisten Funktionen.${NC}"
echo -e "${YELLOW}Du wirst möglicherweise nach deinem Passwort gefragt.${NC}\n"
fi
}
# ----------------------------
# Hilfsfunktionen
# ----------------------------
log_output() {
tee -a "$LOGFILE"
}
log_error() {
echo -e "${RED}[FEHLER] $1${NC}" | log_output
((ERROR_COUNT++))
}
log_warning() {
echo -e "${YELLOW}[WARNUNG] $1${NC}" | log_output
((WARNING_COUNT++))
}
log_success() {
echo -e "${GREEN}[OK] $1${NC}" | log_output
}
install_if_missing() {
local cmd=$1
local pkg=$2
if ! command -v "$cmd" &>/dev/null; then
echo -e "${YELLOW}Installiere $pkg...${NC}" | log_output
sudo apt install -y "$pkg" &>> "$LOGFILE" || {
log_error "$pkg konnte nicht installiert werden"
return 1
}
log_success "$pkg erfolgreich installiert"
fi
return 0
}
# ----------------------------
# Funktion: Menü anzeigen
# ----------------------------
show_menu() {
echo -e "${YELLOW}┌─────────────────────────────────────────────────┐${NC}"
echo -e "${YELLOW}│ Wähle die Checks, die du durchführen willst: │${NC}"
echo -e "${YELLOW}└─────────────────────────────────────────────────┘${NC}"
echo "1) Systeminfos (Hardware, Treiber, Kernel)"
echo "2) Paket-Check & Reparatur"
echo "3) Temperaturen (CPU/GPU/Fans)"
echo "4) Festplatten-Check (SMART)"
echo "5) CPU & RAM Kurztest"
echo "6) Netzwerk-Test"
echo "7) Treiberprüfung (NVIDIA/AMD/Intel)"
echo "8) Sicherheitsupdates prüfen & installieren"
echo "9) Speicherplatz & große Dateien"
echo "10) Systemlogs auf Fehler prüfen"
echo ""
echo "99) Alles ausführen"
echo "0) Abbrechen"
echo ""
echo -n "Auswahl (z.B. 1 3 5): "
}
# ----------------------------
# Funktion: Systeminfos
# ----------------------------
check_systeminfo() {
echo -e "\n${YELLOW}[1] Systeminformationen${NC}" | log_output
echo "======================================" | log_output
install_if_missing "inxi" "inxi" || return 1
inxi -Fxz 2>&1 | log_output
echo -e "\n${BLUE}Aktuelle Kernel-Version:${NC}" | log_output
uname -r | log_output
echo -e "\n${BLUE}Verfügbare Kernel:${NC}" | log_output
dpkg --list | grep linux-image | log_output
log_success "Systeminfo-Check abgeschlossen"
}
# ----------------------------
# Funktion: Paket-Check & Reparatur
# ----------------------------
check_packages() {
echo -e "\n${YELLOW}[2] Paket-Check & Reparatur${NC}" | log_output
echo "======================================" | log_output
echo "Repariere beschädigte Pakete..." | log_output
sudo apt --fix-broken install -y &>> "$LOGFILE"
echo "Konfiguriere ausstehende Pakete..." | log_output
sudo dpkg --configure -a &>> "$LOGFILE"
echo "Entferne nicht mehr benötigte Pakete..." | log_output
sudo apt autoremove -y &>> "$LOGFILE"
echo "Bereinige Paket-Cache..." | log_output
sudo apt autoclean &>> "$LOGFILE"
# Prüfe auf ausstehende Neustarts
if [ -f /var/run/reboot-required ]; then
log_warning "Systemneustart erforderlich!"
cat /var/run/reboot-required.pkgs 2>/dev/null | log_output
fi
log_success "Paket-Check abgeschlossen"
}
# ----------------------------
# Funktion: Temperaturen
# ----------------------------
check_temps() {
echo -e "\n${YELLOW}[3] Hardware-Temperaturen${NC}" | log_output
echo "======================================" | log_output
install_if_missing "sensors" "lm-sensors" || return 1
# Sensors automatisch konfigurieren (beim ersten Mal)
if [ ! -f /etc/sensors3.conf ]; then
echo "Konfiguriere Sensoren (kann einige Sekunden dauern)..." | log_output
sudo sensors-detect --auto &>> "$LOGFILE"
fi
sensors 2>&1 | log_output
# Warnungen bei hohen Temperaturen
while IFS= read -r line; do
if echo "$line" | grep -qE '\+[8-9][0-9]\.[0-9]°C|\+1[0-9]{2}\.[0-9]°C'; then
log_warning "Hohe Temperatur erkannt: $line"
fi
done < <(sensors 2>/dev/null)
log_success "Temperatur-Check abgeschlossen"
}
# ----------------------------
# Funktion: Festplatten-Check
# ----------------------------
check_disks() {
echo -e "\n${YELLOW}[4] Festplatten-Check (SMART)${NC}" | log_output
echo "======================================" | log_output
install_if_missing "smartctl" "smartmontools" || return 1
# Nur echte Festplatten prüfen (keine Loop-Devices etc.)
for disk in $(lsblk -d -n -o NAME,TYPE | grep 'disk' | awk '{print $1}'); do
echo -e "\n${BLUE}Disk: /dev/$disk${NC}" | log_output
# SMART-Fähigkeit prüfen
if sudo smartctl -i /dev/$disk &>> "$LOGFILE"; then
# SMART-Health-Status
if sudo smartctl -H /dev/$disk 2>&1 | grep -q "PASSED"; then
log_success "/dev/$disk: SMART Status OK"
else
log_error "/dev/$disk: SMART Status FAILED!"
fi
# Detaillierte Infos
sudo smartctl -A /dev/$disk 2>&1 | log_output
else
log_warning "/dev/$disk: SMART nicht verfügbar oder nicht unterstützt"
fi
done
# Speicherplatz prüfen
echo -e "\n${BLUE}Speicherplatz-Übersicht:${NC}" | log_output
df -h 2>&1 | log_output
# Warnung bei wenig freiem Speicher
while IFS= read -r line; do
usage=$(echo "$line" | awk '{print $5}' | tr -d '%')
if [ "$usage" -ge 90 ] 2>/dev/null; then
log_warning "Partition fast voll: $line"
fi
done < <(df -h | grep -v "Filesystem")
log_success "Festplatten-Check abgeschlossen"
}
# ----------------------------
# Funktion: CPU & RAM Test
# ----------------------------
check_stress() {
echo -e "\n${YELLOW}[5] CPU & RAM Kurztest${NC}" | log_output
echo "======================================" | log_output
install_if_missing "stress-ng" "stress-ng" || return 1
echo "Starte Stresstest (10 Sekunden)..." | log_output
echo "Dies belastet CPU und RAM kurzzeitig..." | log_output
stress-ng --cpu 2 --vm 1 --vm-bytes 512M --timeout 10s --metrics-brief 2>&1 | log_output
if [ ${PIPESTATUS[0]} -eq 0 ]; then
log_success "Stresstest erfolgreich abgeschlossen"
else
log_error "Stresstest mit Fehlern beendet"
fi
# RAM-Info
echo -e "\n${BLUE}RAM-Auslastung:${NC}" | log_output
free -h | log_output
}
# ----------------------------
# Funktion: Netzwerk-Test
# ----------------------------
check_network() {
echo -e "\n${YELLOW}[6] Netzwerk-Test${NC}" | log_output
echo "======================================" | log_output
# Netzwerk-Interfaces
echo -e "${BLUE}Netzwerk-Interfaces:${NC}" | log_output
ip addr show 2>&1 | log_output
# Ping Test
echo -e "\n${BLUE}Ping Test (Google DNS):${NC}" | log_output
if ping -c 4 -W 2 8.8.8.8 &>> "$LOGFILE"; then
log_success "Netzwerk-Verbindung OK (IP-Ebene)"
else
log_error "Keine Netzwerk-Verbindung (IP-Ebene)"
return 1
fi
echo -e "\n${BLUE}Ping Test (google.com):${NC}" | log_output
if ping -c 4 -W 2 google.com &>> "$LOGFILE"; then
log_success "DNS-Auflösung OK"
else
log_warning "DNS-Auflösung fehlgeschlagen"
fi
# DNS Server
echo -e "\n${BLUE}Konfigurierte DNS-Server:${NC}" | log_output
if command -v resolvectl &>/dev/null; then
resolvectl status | grep "DNS Servers" | log_output
else
cat /etc/resolv.conf | grep nameserver | log_output
fi
log_success "Netzwerk-Check abgeschlossen"
}
# ----------------------------
# Funktion: Treiberprüfung
# ----------------------------
check_drivers() {
echo -e "\n${YELLOW}[7] Treiberprüfung${NC}" | log_output
echo "======================================" | log_output
# GPU erkennen
echo -e "${BLUE}Erkannte GPUs:${NC}" | log_output
lspci | grep -i vga | log_output
lspci | grep -i 3d | log_output
# NVIDIA
if lspci | grep -i nvidia &>/dev/null; then
echo -e "\n${BLUE}NVIDIA GPU erkannt${NC}" | log_output
if command -v nvidia-smi &>/dev/null; then
nvidia-smi 2>&1 | log_output
log_success "NVIDIA-Treiber installiert und aktiv"
else
log_warning "NVIDIA GPU vorhanden, aber nvidia-smi nicht verfügbar"
log_warning "Treiber möglicherweise nicht installiert"
fi
fi
# AMD
if lspci | grep -i amd | grep -i vga &>/dev/null; then
echo -e "\n${BLUE}AMD GPU erkannt${NC}" | log_output
if command -v glxinfo &>/dev/null; then
glxinfo | grep -i "OpenGL renderer" | log_output
log_success "AMD GPU-Treiber aktiv"
else
log_warning "glxinfo nicht installiert (mesa-utils)"
fi
fi
# Intel
if lspci | grep -i intel | grep -i vga &>/dev/null; then
echo -e "\n${BLUE}Intel GPU erkannt${NC}" | log_output
log_success "Intel integrierte Grafik (Standard-Treiber)"
fi
# Ubuntu Drivers Tool
if command -v ubuntu-drivers &>/dev/null; then
echo -e "\n${BLUE}Verfügbare proprietäre Treiber:${NC}" | log_output
ubuntu-drivers list 2>&1 | log_output
echo -e "\n${BLUE}Empfohlene Treiber:${NC}" | log_output
ubuntu-drivers devices 2>&1 | log_output
echo -e "\n${YELLOW}Möchtest du die empfohlenen Treiber installieren? (y/n):${NC} "
read -r install_drivers
if [[ "$install_drivers" =~ ^[Yy]$ ]]; then
echo "Installiere empfohlene Treiber..." | log_output
sudo ubuntu-drivers autoinstall &>> "$LOGFILE"
log_success "Treiber-Installation abgeschlossen (Neustart erforderlich)"
fi
else
log_warning "ubuntu-drivers nicht verfügbar"
fi
log_success "Treiber-Check abgeschlossen"
}
# ----------------------------
# Funktion: Sicherheitsupdates
# ----------------------------
check_updates() {
echo -e "\n${YELLOW}[8] Sicherheitsupdates${NC}" | log_output
echo "======================================" | log_output
echo "Aktualisiere Paketlisten..." | log_output
sudo apt update 2>&1 | log_output
echo -e "\n${BLUE}Verfügbare Updates:${NC}" | log_output
apt list --upgradable 2>/dev/null | log_output
# Sicherheitsupdates zählen
security_updates=$(apt list --upgradable 2>/dev/null | grep -i security | wc -l)
if [ "$security_updates" -gt 0 ]; then
log_warning "$security_updates Sicherheitsupdates verfügbar!"
fi
echo -e "\n${YELLOW}Updates installieren? (y/n):${NC} "
read -r install_updates
if [[ "$install_updates" =~ ^[Yy]$ ]]; then
echo "Installiere Updates..." | log_output
sudo apt upgrade -y 2>&1 | log_output
log_success "Updates installiert"
else
log_warning "Updates übersprungen"
fi
}
# ----------------------------
# Funktion: Speicherplatz-Analyse
# ----------------------------
check_diskspace() {
echo -e "\n${YELLOW}[9] Speicherplatz & große Dateien${NC}" | log_output
echo "======================================" | log_output
# Übersicht
df -h | log_output
# Größte Verzeichnisse im Home
echo -e "\n${BLUE}Größte Verzeichnisse in $HOME:${NC}" | log_output
du -h "$HOME" --max-depth=1 2>/dev/null | sort -hr | head -10 | log_output
# Alte Kernels
echo -e "\n${BLUE}Installierte Kernel:${NC}" | log_output
dpkg --list | grep linux-image | log_output
# Paket-Cache
echo -e "\n${BLUE}APT Cache Größe:${NC}" | log_output
du -sh /var/cache/apt/archives 2>&1 | log_output
log_success "Speicherplatz-Analyse abgeschlossen"
}
# ----------------------------
# Funktion: Systemlogs prüfen
# ----------------------------
check_systemlogs() {
echo -e "\n${YELLOW}[10] Systemlogs auf Fehler prüfen${NC}" | log_output
echo "======================================" | log_output
# Letzte kritische Fehler
echo -e "${BLUE}Kritische Fehler (letzte 24h):${NC}" | log_output
journalctl -p err -S today 2>&1 | tail -50 | log_output
# Kernel-Panics
echo -e "\n${BLUE}Kernel-Panics:${NC}" | log_output
dmesg | grep -i "panic\|oops\|bug" | log_output || echo "Keine Kernel-Panics gefunden" | log_output
# OOM (Out of Memory)
echo -e "\n${BLUE}Out-of-Memory Ereignisse:${NC}" | log_output
dmesg | grep -i "out of memory\|oom" | log_output || echo "Keine OOM-Ereignisse" | log_output
log_success "Systemlog-Check abgeschlossen"
}
# ----------------------------
# Hauptmenü & Ausführung
# ----------------------------
main() {
init_script
show_menu
read -r choices
# Eingabe validieren
if [[ -z "$choices" || "$choices" == "0" ]]; then
echo -e "${YELLOW}Abbruch...${NC}"
exit 0
fi
if [[ ! "$choices" =~ ^[0-9\ ]+$ ]]; then
log_error "Ungültige Eingabe! Nur Zahlen und Leerzeichen erlaubt."
exit 1
fi
echo -e "\n${GREEN}Starte Diagnose...${NC}\n"
# Befehle ausführen
for choice in $choices; do
case $choice in
1) check_systeminfo ;;
2) check_packages ;;
3) check_temps ;;
4) check_disks ;;
5) check_stress ;;
6) check_network ;;
7) check_drivers ;;
8) check_updates ;;
9) check_diskspace ;;
10) check_systemlogs ;;
99)
check_systeminfo
check_packages
check_temps
check_disks
check_stress
check_network
check_drivers
check_updates
check_diskspace
check_systemlogs
;;
*)
log_error "Ungültige Auswahl: $choice"
;;
esac
done
# Zusammenfassung
echo -e "\n${GREEN}╔════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ DIAGNOSE ABGESCHLOSSEN ║${NC}"
echo -e "${GREEN}╚════════════════════════════════════════════════════╝${NC}"
echo -e "${BLUE}Durchgeführte Checks:${NC} $choices"
echo -e "${BLUE}Logfile:${NC} $LOGFILE"
if [ $ERROR_COUNT -gt 0 ]; then
echo -e "${RED}Fehler gefunden:${NC} $ERROR_COUNT"
fi
if [ $WARNING_COUNT -gt 0 ]; then
echo -e "${YELLOW}Warnungen:${NC} $WARNING_COUNT"
fi
if [ $ERROR_COUNT -eq 0 ] && [ $WARNING_COUNT -eq 0 ]; then
echo -e "${GREEN}✓ Keine kritischen Probleme gefunden!${NC}"
else
echo -e "\n${YELLOW}Bitte überprüfe das Logfile für Details:${NC}"
echo " cat $LOGFILE"
fi
echo ""
}
# Script starten
main
create a file: nano ~/diagnose.sh
make it executable: chmod +x ~/diagnose.sh
run command in Console: ~/diagnose.sh
you can dump the result in any AI to get additional help.
I hope that helps other Users as it helped me.
Cheers Rash