#!/usr/bin/env bash # # Скрипт для очистки системных логов # Требует права root # set -euo pipefail if [[ "$1" == "-h" || "$1" == "--help" ]]; then cat </dev/null | awk '{print $1}' } # Показываем текущее использование log_info "Текущее использование:" df -hx tmpfs echo log_info "По директориям:" sudo du -h --max-depth=0 \ /var/log/ \ /var/cache/apt/ \ /var/lib/docker/ \ "$HOME"/.local/share/Trash/files/ \ "$HOME"/.cache/thumbnails/ \ 2>/dev/null \ | sort -rh echo choice="${1:-}" if [ -z "$choice" ]; then echo "Выберите режим очистки:" echo " 1) Безопасный" echo " 2) Средний" echo " 3) Агрессивный" echo read -rp "Выбор [1-3]: " choice echo fi case "$choice" in 1) log_info "Выбран безопасный (1) режим..." set -x sudo journalctl --vacuum-size=100M sudo find /var/log -name "*.gz" -mtime +7 -delete 2>/dev/null || true sudo find /var/log -name "*.log.*" -mtime +7 -delete 2>/dev/null || true [ -d "$HOME"/.local/share/Trash/files/ ] && sudo rm -rfv "$HOME"/.local/share/Trash/files//* [ -d "$HOME"/.cache/thumbnails/ ] && sudo rm -rfv "$HOME"/.cache/thumbnails//* set +x ;; 2) log_info "Выбран средний (2) режим..." set -x sudo journalctl --vacuum-size=50M sudo find /var/log -name "*.gz" -mtime +3 -delete 2>/dev/null || true sudo find /var/log -name "*.log.*" -mtime +3 -delete 2>/dev/null || true sudo find /var/log -name "dpkg.log.*" -mtime +3 -delete 2>/dev/null || true [ -d "$HOME"/.local/share/Trash/files/ ] && sudo rm -rfv "$HOME"/.local/share/Trash/files//* 2>/dev/null || true [ -d "$HOME"/.cache/thumbnails/ ] && sudo rm -rfv "$HOME"/.cache/thumbnails//* 2>/dev/null || true sudo rm -rfv /var/cache/apt/archives/*.deb 2>/dev/null || true sudo apt clean 2>/dev/null || true set +x ;; 3) log_info "Выбран агрессивный (3) режим!" read -rp "Продолжить? (y|yes|n|no): " confirm if [[ "$confirm" != "yes" ]] && [[ "$confirm" != "y" ]]; then log_info "Отменено" exit 0 fi set -x sudo journalctl --vacuum-time=1d sudo find /var/log -name "*.gz" -delete 2>/dev/null || true sudo find /var/log -name "*.log.*" -delete 2>/dev/null || true sudo rm -rfv /var/log/journal/user-*@* 2>/dev/null || true sudo rm -rfv /var/log/journal/system*@* 2>/dev/null || true sudo rm -fv /var/log/{syslog,dmesg,btmp}.* 2>/dev/null || true sudo apt autoremove --purge sudo apt autoclean sudo apt clean sudo rm -rfv /var/cache/apt/archives/* 2>/dev/null || true hash docker && docker system prune -f snap list 2>/dev/null && snap refresh --list 2>/dev/null || true sudo snap list --all \ | awk '/disabled/{print $1, $3}' \ | while read snapname revision; do sudo snap remove "$snapname" --revision="$revision" done set +x ;; *) log_error "Неверный выбор" exit 1 ;; esac echo log_info "Очистка завершена!" log_info "Текущее использование:" df -hx tmpfs echo log_info "По директориям:" sudo du -h --max-depth=0 \ /var/log/ \ /var/cache/apt/ \ /var/lib/docker/ \ "$HOME"/.local/share/Trash/files/ \ "$HOME"/.cache/thumbnails/ \ 2>/dev/null \ | sort -rh