diff --git a/utils/.local/bin/clean b/utils/.local/bin/clean new file mode 100755 index 0000000..152a48e --- /dev/null +++ b/utils/.local/bin/clean @@ -0,0 +1,136 @@ +#!/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